Files
qq_bot/service/scoresaber/bind_ss.go
2024-10-08 01:34:26 +08:00

96 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()
}