mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-12 18:20:27 +00:00
fix extra
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/floatbox/binary"
|
||||
@@ -16,19 +17,22 @@ import (
|
||||
|
||||
// ----------------------- 远程调用 ----------------------
|
||||
const (
|
||||
URL = "https://api.steampowered.com/" // steam API 调用地址
|
||||
StatusURL = "ISteamUser/GetPlayerSummaries/v2/?key=%+v&steamids=%+v" // 根据用户steamID获取用户状态
|
||||
steamapikeygid = 3
|
||||
apiurl = "https://api.steampowered.com/" // steam API 调用地址
|
||||
statusurl = "ISteamUser/GetPlayerSummaries/v2/?key=%+v&steamids=%+v" // 根据用户steamID获取用户状态
|
||||
)
|
||||
|
||||
var apiKey string
|
||||
var (
|
||||
apiKey string
|
||||
apiKeyMu sync.Mutex
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine.OnRegex(`^steam绑定\s*api\s*key\s*(.*)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
apiKeyMu.Lock()
|
||||
defer apiKeyMu.Unlock()
|
||||
apiKey = ctx.State["regex_matched"].([]string)[1]
|
||||
m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||
_ = m.Manager.Response(steamapikeygid)
|
||||
err := m.Manager.SetExtra(steamapikeygid, apiKey)
|
||||
err := m.SetExtra(apiKey)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[steam] ERROR: 保存apikey失败!"))
|
||||
return
|
||||
@@ -36,6 +40,8 @@ func init() {
|
||||
ctx.SendChain(message.Text("保存apikey成功!"))
|
||||
})
|
||||
engine.OnFullMatch("查看apikey", zero.OnlyPrivate, zero.SuperUserPermission, getDB).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
apiKeyMu.Lock()
|
||||
defer apiKeyMu.Unlock()
|
||||
ctx.SendChain(message.Text("apikey为: ", apiKey))
|
||||
})
|
||||
engine.OnFullMatch("拉取steam订阅", getDB).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
@@ -55,7 +61,7 @@ func init() {
|
||||
localPlayerMap := make(map[int64]*player)
|
||||
for i := 0; i < len(infos); i++ {
|
||||
streamIds[i] = strconv.FormatInt(infos[i].SteamID, 10)
|
||||
localPlayerMap[infos[i].SteamID] = &infos[i]
|
||||
localPlayerMap[infos[i].SteamID] = infos[i]
|
||||
}
|
||||
// 将所有用户状态查一遍
|
||||
playerStatus, err := getPlayerStatus(streamIds...)
|
||||
@@ -114,7 +120,9 @@ func init() {
|
||||
func getPlayerStatus(streamIds ...string) ([]*player, error) {
|
||||
players := make([]*player, 0)
|
||||
// 拼接请求地址
|
||||
url := fmt.Sprintf(URL+StatusURL, apiKey, strings.Join(streamIds, ","))
|
||||
apiKeyMu.Lock()
|
||||
url := fmt.Sprintf(apiurl+statusurl, apiKey, strings.Join(streamIds, ","))
|
||||
apiKeyMu.Unlock()
|
||||
// 拉取并解析数据
|
||||
data, err := web.GetData(url)
|
||||
if err != nil {
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
var (
|
||||
engine = control.Register("steam", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Extra: control.ExtraFromString("steam"),
|
||||
Brief: "steam相关插件",
|
||||
Help: "- steam添加订阅 xxxxxxx (可输入需要绑定的 steamid)\n" +
|
||||
"- steam删除订阅 xxxxxxx (删除你创建的对于 steamid 的绑定)\n" +
|
||||
|
||||
@@ -22,14 +22,15 @@ var (
|
||||
ctx.SendChain(message.Text("[steam] ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
if err = database.db.Create(TableListenPlayer, &player{}); err != nil {
|
||||
if err = database.db.Create(tableListenPlayer, &player{}); err != nil {
|
||||
ctx.SendChain(message.Text("[steam] ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
// 校验密钥是否初始化
|
||||
m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||
_ = m.Manager.Response(steamapikeygid)
|
||||
_ = m.Manager.GetExtra(steamapikeygid, &apiKey)
|
||||
apiKeyMu.Lock()
|
||||
defer apiKeyMu.Unlock()
|
||||
_ = m.GetExtra(&apiKey)
|
||||
if apiKey == "" {
|
||||
ctx.SendChain(message.Text("ERROR: 未设置steam apikey"))
|
||||
return false
|
||||
@@ -45,8 +46,8 @@ type streamDB struct {
|
||||
}
|
||||
|
||||
const (
|
||||
// TableListenPlayer 存储查询用户信息
|
||||
TableListenPlayer = "listen_player"
|
||||
// tableListenPlayer 存储查询用户信息
|
||||
tableListenPlayer = "listen_player"
|
||||
)
|
||||
|
||||
// player 用户状态存储结构体
|
||||
@@ -60,58 +61,46 @@ type player struct {
|
||||
}
|
||||
|
||||
// update 如果主键不存在则插入一条新的数据,如果主键存在直接复写
|
||||
func (sql *streamDB) update(dbInfo *player) error {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
return sql.db.Insert(TableListenPlayer, dbInfo)
|
||||
func (sdb *streamDB) update(dbInfo *player) error {
|
||||
sdb.Lock()
|
||||
defer sdb.Unlock()
|
||||
return sdb.db.Insert(tableListenPlayer, dbInfo)
|
||||
}
|
||||
|
||||
// find 根据主键查信息
|
||||
func (sql *streamDB) find(steamID int64) (dbInfo player, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
func (sdb *streamDB) find(steamID int64) (dbInfo player, err error) {
|
||||
sdb.Lock()
|
||||
defer sdb.Unlock()
|
||||
condition := "where steam_id = " + strconv.FormatInt(steamID, 10)
|
||||
if !sql.db.CanFind(TableListenPlayer, condition) {
|
||||
return player{}, nil // 规避没有该用户数据的报错
|
||||
err = sdb.db.Find(tableListenPlayer, &dbInfo, condition)
|
||||
if err == sql.ErrNullResult { // 规避没有该用户数据的报错
|
||||
err = nil
|
||||
}
|
||||
err = sql.db.Find(TableListenPlayer, &dbInfo, condition)
|
||||
return
|
||||
}
|
||||
|
||||
// findWithGroupID 根据用户steamID和groupID查询信息
|
||||
func (sql *streamDB) findWithGroupID(steamID int64, groupID string) (dbInfo player, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
func (sdb *streamDB) findWithGroupID(steamID int64, groupID string) (dbInfo player, err error) {
|
||||
sdb.Lock()
|
||||
defer sdb.Unlock()
|
||||
condition := "where steam_id = " + strconv.FormatInt(steamID, 10) + " AND target LIKE '%" + groupID + "%'"
|
||||
if !sql.db.CanFind(TableListenPlayer, condition) {
|
||||
return player{}, nil // 规避没有该用户数据的报错
|
||||
err = sdb.db.Find(tableListenPlayer, &dbInfo, condition)
|
||||
if err == sql.ErrNullResult { // 规避没有该用户数据的报错
|
||||
err = nil
|
||||
}
|
||||
err = sql.db.Find(TableListenPlayer, &dbInfo, condition)
|
||||
return
|
||||
}
|
||||
|
||||
// findAll 查询所有库信息
|
||||
func (sql *streamDB) findAll() (dbInfos []player, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
var info player
|
||||
num, err := sql.db.Count(TableListenPlayer)
|
||||
if err != nil || num == 0 {
|
||||
return
|
||||
}
|
||||
dbInfos = make([]player, 0, num)
|
||||
err = sql.db.FindFor(TableListenPlayer, &info, "", func() error {
|
||||
if info.SteamID != 0 {
|
||||
dbInfos = append(dbInfos, info)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return
|
||||
func (sdb *streamDB) findAll() (dbInfos []*player, err error) {
|
||||
sdb.Lock()
|
||||
defer sdb.Unlock()
|
||||
return sql.FindAll[player](&sdb.db, tableListenPlayer, "")
|
||||
}
|
||||
|
||||
// del 删除指定数据
|
||||
func (sql *streamDB) del(steamID int64) error {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
return sql.db.Del(TableListenPlayer, "where steam_id = "+strconv.FormatInt(steamID, 10))
|
||||
func (sdb *streamDB) del(steamID int64) error {
|
||||
sdb.Lock()
|
||||
defer sdb.Unlock()
|
||||
return sdb.db.Del(tableListenPlayer, "where steam_id = "+strconv.FormatInt(steamID, 10))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user