refactor: 移除 ScoreSaber 和 BeatLeader 热门成绩相关代码,并为玩家信息添加头像显示
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
package scoresaber
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.lxtend.com/qqbot/sqlite3"
|
||||
"git.lxtend.com/qqbot/util"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
const wsURL = "wss://scoresaber.com/ws"
|
||||
|
||||
var ScoresManager = scoresManager{}
|
||||
|
||||
type scoresManager struct {
|
||||
conn *websocket.Conn
|
||||
retryTimes int
|
||||
}
|
||||
|
||||
func init() {
|
||||
for err := ScoresManager.connect(); err != nil; err = ScoresManager.connect() {
|
||||
log.Print("连接 WebSocket 失败:", err)
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
util.AddCycleTask("cleanOldScores", 0, 1*time.Hour, cleanOldScores)
|
||||
}
|
||||
|
||||
func (sm *scoresManager) connect() error {
|
||||
var err error
|
||||
sm.conn, _, err = websocket.DefaultDialer.Dial(wsURL, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sm.retryTimes = 0
|
||||
go sm.receiveData()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sm *scoresManager) receiveData() {
|
||||
defer func() {
|
||||
for err := ScoresManager.connect(); err != nil; err = ScoresManager.connect() {
|
||||
log.Printf("连接 WebSocket 失败:%v", err)
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}()
|
||||
for {
|
||||
var cmd Command
|
||||
err := sm.conn.ReadJSON(&cmd)
|
||||
if err != nil {
|
||||
log.Print("读取数据失败:", err)
|
||||
time.Sleep(time.Second)
|
||||
sm.retryTimes++
|
||||
if sm.retryTimes > 3 {
|
||||
return
|
||||
}
|
||||
continue
|
||||
}
|
||||
SSQuery.SaveRecord(cmd.CommandData)
|
||||
}
|
||||
}
|
||||
|
||||
func (sm *scoresManager) GetRecentScores(count int, predict string) []RecordDataLite {
|
||||
db := sqlite3.GetDB() // 假设 sqlite3.GetDB() 返回 *sqlx.DB
|
||||
scoresCopy := make([]RecordDataLite, 0, count)
|
||||
|
||||
query := "SELECT * FROM ssRecordData"
|
||||
if predict != "" {
|
||||
query += " " + predict
|
||||
}
|
||||
query += " ORDER BY generated_time DESC LIMIT ?"
|
||||
|
||||
err := db.Select(&scoresCopy, query, count)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return scoresCopy
|
||||
}
|
||||
|
||||
func cleanOldScores() {
|
||||
//清除>1天前且未绑定ss的记录
|
||||
//1.获取所有绑定ss
|
||||
//2.获取所有>1天前的记录
|
||||
//3.删除未绑定ss的记录
|
||||
db := sqlite3.GetDB()
|
||||
ssBind := make([]string, 0)
|
||||
db.Select(&ssBind, "SELECT ssid FROM ssBind")
|
||||
db.Exec("DELETE FROM ssRecordData WHERE generated_time < ? AND ssid NOT IN (?)", time.Now().AddDate(0, 0, -1).Unix(), ssBind)
|
||||
}
|
||||
@@ -2,8 +2,13 @@ package scoresaber
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.lxtend.com/qqbot/message"
|
||||
"git.lxtend.com/qqbot/util"
|
||||
)
|
||||
|
||||
// Command 表示从 WebSocket 收到的数据结构
|
||||
@@ -219,7 +224,23 @@ func (p PlayerDataLite) IsDiffFrom(p2 PlayerDataLite) bool {
|
||||
}
|
||||
|
||||
func (p PlayerData) ToString() string {
|
||||
err := util.DownloadFile(p.ProfilePicture, util.GenTempFilePath(p.ID+".jpg"))
|
||||
if err != nil {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.ProfilePicture, err)
|
||||
}
|
||||
defer os.Remove(util.GenTempFilePath(p.ID + ".jpg"))
|
||||
outFile, err := util.ResizeImageByMaxHeight(util.GenTempFilePath(p.ID+".jpg"), 20)
|
||||
if err != nil {
|
||||
log.Default().Printf("缩放头像失败,url:%s,err:%v", p.ProfilePicture, err)
|
||||
}
|
||||
picMsg := message.ImageMessage{
|
||||
Type: message.TypeImage,
|
||||
Data: message.ImageMessageData{
|
||||
File: outFile,
|
||||
},
|
||||
}
|
||||
formatedStr := "玩家 %s\n" +
|
||||
picMsg.ToCQString() +
|
||||
"区域 %s\n" +
|
||||
"PP %.1f\n" +
|
||||
"全球排名 %d\n" +
|
||||
@@ -263,7 +284,23 @@ func (p PlayerDataLite) ToString() string {
|
||||
}
|
||||
|
||||
func (p PlayerData) LastDiffToString(lastDayQueryData PlayerDataLite) string {
|
||||
err := util.DownloadFile(p.ProfilePicture, util.GenTempFilePath(p.ID+".jpg"))
|
||||
if err != nil {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.ProfilePicture, err)
|
||||
}
|
||||
defer os.Remove(util.GenTempFilePath(p.ID + ".jpg"))
|
||||
outFile, err := util.ResizeImageByMaxHeight(util.GenTempFilePath(p.ID+".jpg"), 20)
|
||||
if err != nil {
|
||||
log.Default().Printf("缩放头像失败,url:%s,err:%v", p.ProfilePicture, err)
|
||||
}
|
||||
picMsg := message.ImageMessage{
|
||||
Type: message.TypeImage,
|
||||
Data: message.ImageMessageData{
|
||||
File: outFile,
|
||||
},
|
||||
}
|
||||
formatedStr := "玩家 %s\n" +
|
||||
picMsg.ToCQString() +
|
||||
"区域 %s\n" +
|
||||
"PP %.1f(%+.1f)\n" +
|
||||
"全球排名 %d(%+d)\n" +
|
||||
|
||||
Reference in New Issue
Block a user