init: 初始化仓库

This commit is contained in:
lixiangwuxian
2024-10-08 01:34:26 +08:00
commit 4d6c22ff7b
24 changed files with 1311 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
package scoresaber
import (
"database/sql"
"log"
"strconv"
_ "github.com/mattn/go-sqlite3"
)
func initDB() {
db, err := sql.Open("sqlite3", "./bindss.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
createTableSQL := `CREATE TABLE IF NOT EXISTS ssBind (
id INTEGER PRIMARY KEY AUTOINCREMENT,
qqid TEXT UNIQUE,
ssid TEXT UNIQUE
);`
_, err = db.Exec(createTableSQL)
if err != nil {
log.Fatal(err)
}
}
type SSQuery struct {
db *sql.DB
}
func NewSSQuery() *SSQuery {
initDB()
db, err := sql.Open("sqlite3", "./bindss.db")
if err != nil {
log.Fatal(err)
}
return &SSQuery{db: db}
}
func (ss *SSQuery) BindSS(qqId string, ssId string) (reply string) {
// ssId为数字
if _, isNum := strconv.Atoi(ssId); isNum != nil {
return "ssId格式错误,应当为一串数字"
}
data, _ := FetchPlayerData(ssId)
if data == nil {
return "未找到玩家"
}
//去重
if rows, err := ss.db.Query("SELECT * FROM ssBind WHERE qqid = ?", qqId); err == nil {
if rows.Next() {
return "您已绑定过ss账号,请先输入\"解绑ss\"解绑"
}
rows.Close()
}
_, err := ss.db.Exec("INSERT INTO ssBind(qqid, ssid) VALUES(?, ?)", qqId, ssId)
if err != nil {
return "绑定失败"
}
return "和用户名为 " + data.Name + " 的用户绑定成功,输入\"查ss\"查看个人数据"
}
func (ss *SSQuery) UnbindSS(qqId string) (reply string) {
//是否已绑定
if rows, err := ss.db.Query("SELECT * FROM ssBind WHERE qqid = ?", qqId); err == nil {
if !rows.Next() {
return "您未绑定ss账号输入\"绑定ss [ssId]\"绑定"
}
rows.Close()
}
_, err := ss.db.Exec("DELETE FROM ssBind WHERE qqid = ?", qqId)
if err != nil {
return "解绑失败"
}
return "解绑成功,重新绑定请输入\"绑定ss [ssId]\""
}
func (ss *SSQuery) GetScore(qqId string) (reply string) {
//是否已绑定
if rows, err := ss.db.Query("SELECT * FROM ssBind WHERE qqid = ?", qqId); err == nil {
if !rows.Next() {
return "您未绑定ss账号输入\"绑定ss [ssId]\"绑定"
}
}
var ssId string
ss.db.QueryRow("SELECT ssid FROM ssBind WHERE qqid = ?", qqId).Scan(&ssId)
data, _ := FetchPlayerData(ssId)
if data == nil {
return "未找到玩家"
}
return data.ToString()
}