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
This commit is contained in:
parent
9272c426e3
commit
fd2ebce29e
@ -247,9 +247,9 @@ func checkSteamGameStatus(steamID []string) (string, error) {
|
|||||||
return gameStatusList, nil
|
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 {
|
if len(steamID) == 0 {
|
||||||
return "疑似没人在玩游戏", nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
var glbErr error
|
var glbErr error
|
||||||
var writeMutex sync.Mutex
|
var writeMutex sync.Mutex
|
||||||
@ -311,21 +311,18 @@ func checkDiffSteamGameStatus(steamID []string, lastTimeStat map[string]string)
|
|||||||
}
|
}
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
if glbErr != nil {
|
if glbErr != nil {
|
||||||
return "", glbErr
|
return nil, glbErr
|
||||||
}
|
}
|
||||||
gameStatusListStr := ""
|
gameStatusListStr := map[string]string{}
|
||||||
for _, userState := range Players {
|
for _, userState := range Players {
|
||||||
if lastTimeStat[userState.SteamID] == userState.GameID {
|
if lastTimeStat[userState.SteamID] == userState.GameID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if userState.ToGameStatus() != "" {
|
if userState.ToGameStatus() != "" {
|
||||||
gameStatusListStr += userState.ToGameStatus() + "\n"
|
gameStatusListStr[userState.SteamID] = userState.ToGameStatus()
|
||||||
}
|
}
|
||||||
lastTimeStat[userState.SteamID] = userState.GameID
|
lastTimeStat[userState.SteamID] = userState.GameID
|
||||||
}
|
}
|
||||||
if gameStatusListStr != "" {
|
|
||||||
gameStatusListStr = gameStatusListStr[:len(gameStatusListStr)-1]
|
|
||||||
}
|
|
||||||
return gameStatusListStr, nil
|
return gameStatusListStr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,3 +371,17 @@ func getAllGroupID() ([]int64, error) {
|
|||||||
}
|
}
|
||||||
return groupIDs, nil
|
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
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ package steamplaying
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.lxtend.com/qqbot/action"
|
"git.lxtend.com/qqbot/action"
|
||||||
@ -15,15 +16,15 @@ import (
|
|||||||
func init() {
|
func init() {
|
||||||
// Register the handler with the server
|
// Register the handler with the server
|
||||||
handler.RegisterHandler("绑steam", bindSteam, constants.LEVEL_USER)
|
handler.RegisterHandler("绑steam", bindSteam, constants.LEVEL_USER)
|
||||||
handler.RegisterHelpInform("绑steam", "steam", "绑定您的steam账号。可以通过右上角-账户明细页面 https://store.steampowered.com/account/ 查看,位于页面左上角")
|
handler.RegisterHelpInform("绑steam", "steam", "输入steamID,绑定您的steam账号。可以通过客户端右上角-账户明细 https://store.steampowered.com/account/ 查看,steamID位于页面左上角")
|
||||||
handler.RegisterHandler("群绑定steam", bindSteamInGroup, constants.LEVEL_USER)
|
handler.RegisterHandler("启用上号通知", bindSteamInGroup, constants.LEVEL_USER)
|
||||||
handler.RegisterHelpInform("群绑定steam", "steam", "在群内启用你的steam游戏状态查询")
|
handler.RegisterHelpInform("启用上号通知", "steam", "在群内启用您的steam上号通知")
|
||||||
// handler.RegisterHandler("群通报steam", bindSteamInGroupBroadCast, constants.LEVEL_USER)
|
// handler.RegisterHandler("群通报steam", bindSteamInGroupBroadCast, constants.LEVEL_USER)
|
||||||
// handler.RegisterHelpInform("群通报steam", "在群内启用你的steam游戏上线通报")
|
// handler.RegisterHelpInform("群通报steam", "在群内启用你的steam游戏上线通报")
|
||||||
handler.RegisterHandler("解绑steam", unbindSteam, constants.LEVEL_USER)
|
handler.RegisterHandler("解绑steam", unbindSteam, constants.LEVEL_USER)
|
||||||
handler.RegisterHelpInform("解绑steam", "steam", "解绑您的steam账号,并解绑所有群监听")
|
handler.RegisterHelpInform("解绑steam", "steam", "解绑您的steam账号,并解绑所有群监听")
|
||||||
handler.RegisterHandler("群解绑steam", unbindSteamInGroup, constants.LEVEL_USER)
|
handler.RegisterHandler("禁用上号通知", unbindSteamInGroup, constants.LEVEL_USER)
|
||||||
handler.RegisterHelpInform("群解绑steam", "steam", "解绑本群群监听steam游戏状态")
|
handler.RegisterHelpInform("禁用上号通知", "steam", "禁用您在本群的steam上号通知")
|
||||||
handler.RegisterHandler("查房", checkSteamPlaying, constants.LEVEL_USER)
|
handler.RegisterHandler("查房", checkSteamPlaying, constants.LEVEL_USER)
|
||||||
handler.RegisterHelpInform("查房", "steam", "查看群内成员的steam游戏状态")
|
handler.RegisterHelpInform("查房", "steam", "查看群内成员的steam游戏状态")
|
||||||
go RoundCheckSteamPlaying()
|
go RoundCheckSteamPlaying()
|
||||||
@ -65,7 +66,7 @@ func bindSteam(msg model.Message) model.Reply {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return model.Reply{
|
return model.Reply{
|
||||||
ReplyMsg: fmt.Sprintf("绑定steam用户%s成功", token[1]),
|
ReplyMsg: fmt.Sprintf("绑定steam用户%s成功,如果需要开启群内上号通知,请输入 启用上号通知", token[1]),
|
||||||
ReferOriginMsg: true,
|
ReferOriginMsg: true,
|
||||||
FromMsg: msg,
|
FromMsg: msg,
|
||||||
}
|
}
|
||||||
@ -175,19 +176,26 @@ func checkSteamPlaying(msg model.Message) model.Reply {
|
|||||||
|
|
||||||
func RoundCheckSteamPlaying() {
|
func RoundCheckSteamPlaying() {
|
||||||
once := true
|
once := true
|
||||||
playingMap := map[int64]map[string]string{}
|
playingMap := map[string]string{}
|
||||||
util.AddCycleTask("checkSteamPlaying", 15*time.Second, 15*time.Second, func() {
|
util.AddCycleTask("checkSteamPlaying", 15*time.Second, 15*time.Second, func() {
|
||||||
|
allSteamIDs, err := getAllSteamID()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("获取所有steamID失败: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
groups, err := getAllGroupID()
|
groups, err := getAllGroupID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("获取群列表失败: ", err)
|
fmt.Println("获取群列表失败: ", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
gamePlayingMap, err := checkDiffSteamGameStatus(allSteamIDs, playingMap)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("获取游戏列表失败: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for _, group := range groups {
|
for _, group := range groups {
|
||||||
time.Sleep(15 * time.Second)
|
time.Sleep(15 * time.Second)
|
||||||
if _, ok := playingMap[group]; !ok {
|
|
||||||
playingMap[group] = map[string]string{}
|
|
||||||
}
|
|
||||||
users, err := getSteamUsersInGroup(group)
|
users, err := getSteamUsersInGroup(group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("获取群成员steam列表失败: ", err)
|
fmt.Println("获取群成员steam列表失败: ", err)
|
||||||
@ -197,14 +205,17 @@ func RoundCheckSteamPlaying() {
|
|||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
steamIds = append(steamIds, user.SteamID)
|
steamIds = append(steamIds, user.SteamID)
|
||||||
}
|
}
|
||||||
gameList, err := checkDiffSteamGameStatus(steamIds, playingMap[group])
|
|
||||||
if err != nil {
|
var gameList []string
|
||||||
fmt.Println("获取游戏列表失败: ", err)
|
for _, steamId := range steamIds {
|
||||||
continue
|
if gameStatus, ok := gamePlayingMap[steamId]; ok {
|
||||||
|
gameList = append(gameList, gameStatus)
|
||||||
}
|
}
|
||||||
if gameList != "" && !once {
|
}
|
||||||
|
|
||||||
|
if len(gamePlayingMap) > 0 && !once {
|
||||||
msg := model.Reply{
|
msg := model.Reply{
|
||||||
ReplyMsg: "速报:\n" + gameList,
|
ReplyMsg: "速报:\n" + strings.Join(gameList, "\n"),
|
||||||
ReferOriginMsg: false,
|
ReferOriginMsg: false,
|
||||||
FromMsg: model.Message{GroupInfo: model.GroupInfo{GroupId: group}},
|
FromMsg: model.Message{GroupInfo: model.GroupInfo{GroupId: group}},
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user