From fd2ebce29ed50b003de9671543c317969419f1ad Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Wed, 15 Jan 2025 11:14:11 +0800 Subject: [PATCH] refactor: update checkDiffSteamGameStatus to return a map for game statuses and add getAllSteamID function for retrieving all Steam IDs; enhance help messages for binding and unbinding Steam accounts --- handler/steamplaying/service.go | 27 ++++++++++++----- handler/steamplaying/steam_playing.go | 43 +++++++++++++++++---------- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/handler/steamplaying/service.go b/handler/steamplaying/service.go index e5e985d..85b2911 100644 --- a/handler/steamplaying/service.go +++ b/handler/steamplaying/service.go @@ -247,9 +247,9 @@ func checkSteamGameStatus(steamID []string) (string, error) { return gameStatusList, nil } -func checkDiffSteamGameStatus(steamID []string, lastTimeStat map[string]string) (string, error) { +func checkDiffSteamGameStatus(steamID []string, lastTimeStat map[string]string) (map[string]string, error) { if len(steamID) == 0 { - return "疑似没人在玩游戏", nil + return nil, nil } var glbErr error var writeMutex sync.Mutex @@ -311,21 +311,18 @@ func checkDiffSteamGameStatus(steamID []string, lastTimeStat map[string]string) } wg.Wait() if glbErr != nil { - return "", glbErr + return nil, glbErr } - gameStatusListStr := "" + gameStatusListStr := map[string]string{} for _, userState := range Players { if lastTimeStat[userState.SteamID] == userState.GameID { continue } if userState.ToGameStatus() != "" { - gameStatusListStr += userState.ToGameStatus() + "\n" + gameStatusListStr[userState.SteamID] = userState.ToGameStatus() } lastTimeStat[userState.SteamID] = userState.GameID } - if gameStatusListStr != "" { - gameStatusListStr = gameStatusListStr[:len(gameStatusListStr)-1] - } return gameStatusListStr, nil } @@ -374,3 +371,17 @@ func getAllGroupID() ([]int64, error) { } return groupIDs, nil } + +func getAllSteamID() ([]string, error) { + tx, err := sqlite3.GetTran() + if err != nil { + return nil, err + } + defer tx.Rollback() + var steamIDs []string + err = tx.Select(&steamIDs, "SELECT steamid FROM steam_user") + if err != nil { + return nil, err + } + return steamIDs, nil +} diff --git a/handler/steamplaying/steam_playing.go b/handler/steamplaying/steam_playing.go index 671f690..5543fc3 100644 --- a/handler/steamplaying/steam_playing.go +++ b/handler/steamplaying/steam_playing.go @@ -3,6 +3,7 @@ package steamplaying import ( "fmt" "regexp" + "strings" "time" "git.lxtend.com/qqbot/action" @@ -15,15 +16,15 @@ import ( func init() { // Register the handler with the server handler.RegisterHandler("绑steam", bindSteam, constants.LEVEL_USER) - handler.RegisterHelpInform("绑steam", "steam", "绑定您的steam账号。可以通过右上角-账户明细页面 https://store.steampowered.com/account/ 查看,位于页面左上角") - handler.RegisterHandler("群绑定steam", bindSteamInGroup, constants.LEVEL_USER) - handler.RegisterHelpInform("群绑定steam", "steam", "在群内启用你的steam游戏状态查询") + handler.RegisterHelpInform("绑steam", "steam", "输入steamID,绑定您的steam账号。可以通过客户端右上角-账户明细 https://store.steampowered.com/account/ 查看,steamID位于页面左上角") + handler.RegisterHandler("启用上号通知", bindSteamInGroup, constants.LEVEL_USER) + handler.RegisterHelpInform("启用上号通知", "steam", "在群内启用您的steam上号通知") // handler.RegisterHandler("群通报steam", bindSteamInGroupBroadCast, constants.LEVEL_USER) // handler.RegisterHelpInform("群通报steam", "在群内启用你的steam游戏上线通报") handler.RegisterHandler("解绑steam", unbindSteam, constants.LEVEL_USER) handler.RegisterHelpInform("解绑steam", "steam", "解绑您的steam账号,并解绑所有群监听") - handler.RegisterHandler("群解绑steam", unbindSteamInGroup, constants.LEVEL_USER) - handler.RegisterHelpInform("群解绑steam", "steam", "解绑本群群监听steam游戏状态") + handler.RegisterHandler("禁用上号通知", unbindSteamInGroup, constants.LEVEL_USER) + handler.RegisterHelpInform("禁用上号通知", "steam", "禁用您在本群的steam上号通知") handler.RegisterHandler("查房", checkSteamPlaying, constants.LEVEL_USER) handler.RegisterHelpInform("查房", "steam", "查看群内成员的steam游戏状态") go RoundCheckSteamPlaying() @@ -65,7 +66,7 @@ func bindSteam(msg model.Message) model.Reply { } } return model.Reply{ - ReplyMsg: fmt.Sprintf("绑定steam用户%s成功", token[1]), + ReplyMsg: fmt.Sprintf("绑定steam用户%s成功,如果需要开启群内上号通知,请输入 启用上号通知", token[1]), ReferOriginMsg: true, FromMsg: msg, } @@ -175,19 +176,26 @@ func checkSteamPlaying(msg model.Message) model.Reply { func RoundCheckSteamPlaying() { once := true - playingMap := map[int64]map[string]string{} + playingMap := map[string]string{} util.AddCycleTask("checkSteamPlaying", 15*time.Second, 15*time.Second, func() { + allSteamIDs, err := getAllSteamID() + if err != nil { + fmt.Println("获取所有steamID失败: ", err) + return + } groups, err := getAllGroupID() if err != nil { fmt.Println("获取群列表失败: ", err) return } + gamePlayingMap, err := checkDiffSteamGameStatus(allSteamIDs, playingMap) + if err != nil { + fmt.Println("获取游戏列表失败: ", err) + return + } for _, group := range groups { time.Sleep(15 * time.Second) - if _, ok := playingMap[group]; !ok { - playingMap[group] = map[string]string{} - } users, err := getSteamUsersInGroup(group) if err != nil { fmt.Println("获取群成员steam列表失败: ", err) @@ -197,14 +205,17 @@ func RoundCheckSteamPlaying() { for _, user := range users { steamIds = append(steamIds, user.SteamID) } - gameList, err := checkDiffSteamGameStatus(steamIds, playingMap[group]) - if err != nil { - fmt.Println("获取游戏列表失败: ", err) - continue + + var gameList []string + for _, steamId := range steamIds { + if gameStatus, ok := gamePlayingMap[steamId]; ok { + gameList = append(gameList, gameStatus) + } } - if gameList != "" && !once { + + if len(gamePlayingMap) > 0 && !once { msg := model.Reply{ - ReplyMsg: "速报:\n" + gameList, + ReplyMsg: "速报:\n" + strings.Join(gameList, "\n"), ReferOriginMsg: false, FromMsg: model.Message{GroupInfo: model.GroupInfo{GroupId: group}}, }