From 7f0560b56e6b64d6a533315248dd37ac20926abd Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Wed, 9 Apr 2025 23:28:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=87=BD=E6=95=B0=E7=9A=84=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E6=8C=87=E9=92=88=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E6=8F=90=E9=AB=98=E5=86=85=E5=AD=98=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=95=88=E7=8E=87=E5=B9=B6=E9=81=BF=E5=85=8D=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E6=8B=B7=E8=B4=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action/action.go | 2 +- auth/auth.go | 10 ++---- handler/auth/auth.go | 12 +++---- handler/beatleader/beatleader.go | 28 +++++++-------- handler/blackjack/blackjack.go | 20 +++++------ handler/drawback/drawback.go | 6 ++-- handler/echo/echo.go | 6 ++-- handler/exec/exec.go | 4 +-- handler/fetchself/fetch.go | 2 +- handler/getweb/getweb.go | 8 ++--- handler/handler.go | 6 ++-- handler/headmaster/headmaster.go | 6 ++-- handler/health/health.go | 4 +-- handler/help/help.go | 15 ++++++-- handler/init/init.go | 2 +- handler/jrrp/jrrp.go | 4 +-- handler/kfccrazy/kfc.go | 30 ++++++++-------- handler/kw/kw.go | 32 ++++++++--------- handler/newbond/newbond.go | 12 +++---- handler/newbond/service.go | 2 +- handler/restart/restart.go | 30 ++++++++-------- handler/roll/roll.go | 6 ++-- handler/scoresaber/score.go | 40 ++++++++++----------- handler/steamplaying/steam_playing.go | 50 +++++++++++++-------------- handler/ticket/ticket.go | 14 ++++---- handler/urlparser/url.go | 14 ++++---- handler/wordle/wordle.go | 8 ++--- handler/xibao/xibao.go | 20 +++++------ model/handler.go | 4 +-- model/message.go | 12 ++----- model/upstream_message.go | 10 +++--- ws_client/client.go | 2 +- 32 files changed, 211 insertions(+), 210 deletions(-) diff --git a/action/action.go b/action/action.go index 89f08df..6876107 100644 --- a/action/action.go +++ b/action/action.go @@ -33,7 +33,7 @@ func (am *actionManager) SendAction(action string) error { return am.botConn.WriteMessage(websocket.TextMessage, []byte(action)) } -func (am *actionManager) SendMsg(reply model.Reply) error { +func (am *actionManager) SendMsg(reply *model.Reply) error { am.sendMtx.Lock() defer am.sendMtx.Unlock() if reply.ReferOriginMsg { diff --git a/auth/auth.go b/auth/auth.go index 38d6f94..765afdc 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -39,20 +39,16 @@ func SetPermission(qqID int64, level constants.PermissionLevel) error { return setAuth(auth) } -func TryExecHandler(msg model.Message, level constants.PermissionLevel, handler model.Handler) (reply model.Reply) { +func TryExecHandler(msg model.Message, level constants.PermissionLevel, handler model.Handler) (reply *model.Reply) { if permission, err := getAuth(msg.UserId); err == nil { if permission.Role == constants.LEVEL_IGNORE { - return model.Reply{ - ReplyMsg: "", - ReferOriginMsg: false, - FromMsg: msg, - } + return nil } } if HasPermission(msg.UserId, level) { return handler(msg) } - return model.Reply{ + return &model.Reply{ ReplyMsg: "权限校验错误", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/auth/auth.go b/handler/auth/auth.go index f1f23c2..c9fbf14 100644 --- a/handler/auth/auth.go +++ b/handler/auth/auth.go @@ -26,11 +26,11 @@ var userLevelMap = map[string]constants.PermissionLevel{ "忽略": constants.LEVEL_IGNORE, } -func setUserLevel(msg model.Message) (reply model.Reply) { +func setUserLevel(msg model.Message) (reply *model.Reply) { re := regexp.MustCompile(`\s+`) tokens := re.Split(msg.RawMsg, -1) if len(tokens) < 3 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "参数不足", ReferOriginMsg: true, FromMsg: msg, @@ -44,7 +44,7 @@ func setUserLevel(msg model.Message) (reply model.Reply) { log.Println(userText) user, err := strconv.Atoi(userText) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "用户解析失败", ReferOriginMsg: true, FromMsg: msg, @@ -53,20 +53,20 @@ func setUserLevel(msg model.Message) (reply model.Reply) { levelText := tokens[2] level, ok := userLevelMap[levelText] if !ok { - return model.Reply{ + return &model.Reply{ ReplyMsg: "权限不存在", ReferOriginMsg: true, FromMsg: msg, } } if err := auth.SetPermission(int64(user), level); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "权限设置失败", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "权限设置成功", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/beatleader/beatleader.go b/handler/beatleader/beatleader.go index febaf31..6750a8e 100644 --- a/handler/beatleader/beatleader.go +++ b/handler/beatleader/beatleader.go @@ -30,7 +30,7 @@ func init() { handler.RegisterHandler("jbl", screenShotBL, constants.LEVEL_USER) } -func getMyBL(msg model.Message) (reply model.Reply) { +func getMyBL(msg model.Message) (reply *model.Reply) { var ( resultStr string err error @@ -53,43 +53,43 @@ func getMyBL(msg model.Message) (reply model.Reply) { resultStr = "获取您的分数时出现问题,请稍后重试。" } - return model.Reply{ + return &model.Reply{ ReplyMsg: resultStr, ReferOriginMsg: true, FromMsg: msg, } } -func bindBL(msg model.Message) (reply model.Reply) { +func bindBL(msg model.Message) (reply *model.Reply) { if len(msg.RawMsg) <= len("绑定bl ") { - return model.Reply{ + return &model.Reply{ ReplyMsg: "请输入绑定的beatleader账号", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: beatleader.BLQuery.BindBL(strconv.Itoa(int(msg.UserId)), msg.RawMsg[len("绑定bl "):]), ReferOriginMsg: true, FromMsg: msg, } } -func unbindBL(msg model.Message) (reply model.Reply) { - return model.Reply{ +func unbindBL(msg model.Message) (reply *model.Reply) { + return &model.Reply{ ReplyMsg: beatleader.BLQuery.UnbindBL(strconv.Itoa(int(msg.UserId))), ReferOriginMsg: true, FromMsg: msg, } } -func getMyRecentScore(msg model.Message) (reply model.Reply) { +func getMyRecentScore(msg model.Message) (reply *model.Reply) { count := 1 scoreMsg := "" if len(msg.RawMsg) > len("最新bl ") { var err error count, err = strconv.Atoi(msg.RawMsg[len("最新bl "):]) if err != nil || count <= 0 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: true, FromMsg: msg, @@ -103,7 +103,7 @@ func getMyRecentScore(msg model.Message) (reply model.Reply) { recordCount := 0 records, err := beatleader.BLQuery.GetRecentScores(count, strconv.Itoa(int(msg.UserId))) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -145,27 +145,27 @@ func getMyRecentScore(msg model.Message) (reply model.Reply) { if len(scoreMsg) > 0 { scoreMsg = scoreMsg[:len(scoreMsg)-len("\n")] //去掉最后一个换行符 } else { - return model.Reply{ + return &model.Reply{ ReplyMsg: "无最近游戏记录", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "玩家 " + userName + " 的" + strconv.Itoa(recordCount) + "条最近记录为:\n" + scoreMsg, ReferOriginMsg: true, FromMsg: msg, } } -func screenShotBL(msg model.Message) (reply model.Reply) { +func screenShotBL(msg model.Message) (reply *model.Reply) { imageMsg := message.ImageMessage{ Type: "image", Data: message.ImageMessageData{ File: "file:///tmp/qqbot/" + beatleader.GetBLPicture(strconv.Itoa(int(msg.UserId))), }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/blackjack/blackjack.go b/handler/blackjack/blackjack.go index 22cb332..18df5e6 100644 --- a/handler/blackjack/blackjack.go +++ b/handler/blackjack/blackjack.go @@ -18,10 +18,10 @@ func init() { userGameMap = make(map[string]*core.BackJackGame) } -func blackJack(msg model.Message) model.Reply { +func blackJack(msg model.Message) *model.Reply { tokens := util.SplitN(msg.RawMsg, 2) if len(tokens) < 2 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "Invalid command", ReferOriginMsg: true, FromMsg: msg, @@ -30,7 +30,7 @@ func blackJack(msg model.Message) model.Reply { if tokens[1] == "exit" { delete(userGameMap, util.From(msg.GroupInfo.GroupId, msg.UserId)) - return model.Reply{ + return &model.Reply{ ReplyMsg: "Bye", ReferOriginMsg: false, FromMsg: msg, @@ -41,7 +41,7 @@ func blackJack(msg model.Message) model.Reply { userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)] = core.NewBlackJackGame(controller.NewBlackJackSimulator(), view.NewLiteralViewer(controller.NewBlackJackSimulator())) } if _, ok := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)]; !ok { - return model.Reply{ + return &model.Reply{ ReplyMsg: "Please start a game first", ReferOriginMsg: true, FromMsg: msg, @@ -52,18 +52,18 @@ func blackJack(msg model.Message) model.Reply { if response[len(response)-1:] == "\n" { response = response[:len(response)-1] } - return model.Reply{ + return &model.Reply{ ReplyMsg: response, ReferOriginMsg: false, FromMsg: msg, } } -func blackJackWithNoBj(msg model.Message) (model.Reply, bool) { +func blackJackWithNoBj(msg model.Message) (reply *model.Reply, ok bool) { if msg.RawMsg == "exit" { delete(userGameMap, util.From(msg.GroupInfo.GroupId, msg.UserId)) handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId) - return model.Reply{ + return &model.Reply{ ReplyMsg: "Bye", ReferOriginMsg: false, FromMsg: msg, @@ -75,7 +75,7 @@ func blackJackWithNoBj(msg model.Message) (model.Reply, bool) { } if _, ok := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)]; !ok { - return model.Reply{ + return &model.Reply{ ReplyMsg: "Please start a game first", ReferOriginMsg: true, FromMsg: msg, @@ -84,7 +84,7 @@ func blackJackWithNoBj(msg model.Message) (model.Reply, bool) { response, err := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)].AddCommand(msg.RawMsg) if err != nil { if err.Error() == "invalid command" { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, @@ -97,7 +97,7 @@ func blackJackWithNoBj(msg model.Message) (model.Reply, bool) { if len(response) > 1 && response[len(response)-1:] == "\n" { response = response[:len(response)-1] } - return model.Reply{ + return &model.Reply{ ReplyMsg: response, ReferOriginMsg: false, FromMsg: msg, diff --git a/handler/drawback/drawback.go b/handler/drawback/drawback.go index e0bb806..daf423b 100644 --- a/handler/drawback/drawback.go +++ b/handler/drawback/drawback.go @@ -13,17 +13,17 @@ func init() { handler.RegisterHelpInform("撤回", "drawback", "发送 <引用消息>撤回 撤回消息") } -func drawback(msg model.Message) model.Reply { +func drawback(msg model.Message) *model.Reply { msgIdToDrawback := message.ReplyMessage{} if err := msgIdToDrawback.ParseMessage(msg.RawMsg); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, } } action.ActionManager.DrawbackMsg(int32(msgIdToDrawback.Data.ID)) - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, diff --git a/handler/echo/echo.go b/handler/echo/echo.go index 7a03176..d09ec5b 100644 --- a/handler/echo/echo.go +++ b/handler/echo/echo.go @@ -11,11 +11,11 @@ func init() { handler.RegisterHelpInform("echo", "echo", "echo 再说一遍") } -func echo(msg model.Message) (reply model.Reply) { +func echo(msg model.Message) (reply *model.Reply) { if len(msg.RawMsg) <= 5 { - return model.Reply{} + return &model.Reply{} } - return model.Reply{ + return &model.Reply{ ReplyMsg: msg.RawMsg[5:], ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/exec/exec.go b/handler/exec/exec.go index 009eb59..bf3f04f 100644 --- a/handler/exec/exec.go +++ b/handler/exec/exec.go @@ -18,7 +18,7 @@ func init() { handler.RegisterHelpInform("reboot", "docker", "reboot 重启环境") } -func runInDocker(msg model.Message) (reply model.Reply) { +func runInDocker(msg model.Message) (reply *model.Reply) { token := util.SplitN(msg.RawMsg, 2) if len(token) < 2 { reply.ReplyMsg = "Usage: exec " @@ -47,7 +47,7 @@ func runInDocker(msg model.Message) (reply model.Reply) { } } -func restartDocker(msg model.Message) (reply model.Reply) { +func restartDocker(msg model.Message) (reply *model.Reply) { if err := exec.DockerContainer.RestartAndCleanContainer(); err != nil { reply.ReplyMsg = "Error: " + err.Error() reply.ReferOriginMsg = true diff --git a/handler/fetchself/fetch.go b/handler/fetchself/fetch.go index 688c140..86bc22f 100644 --- a/handler/fetchself/fetch.go +++ b/handler/fetchself/fetch.go @@ -86,7 +86,7 @@ func (i *SystemInfo) String() string { return builder.String() } -func fetchSelf(msg model.Message) (reply model.Reply) { +func fetchSelf(msg model.Message) (reply *model.Reply) { //检测是否存在fetchCmd中的命令 for _, cmd := range fetchCmd { if _, err := exec.LookPath(cmd); err == nil { diff --git a/handler/getweb/getweb.go b/handler/getweb/getweb.go index 6e34bf6..a7221eb 100644 --- a/handler/getweb/getweb.go +++ b/handler/getweb/getweb.go @@ -11,15 +11,15 @@ func init() { // handler.RegisterHelpInform("上网", "getweb", "上网 截取网页") } -func getweb(msg model.Message) (reply model.Reply) { +func getweb(msg model.Message) (reply *model.Reply) { if len(msg.RawMsg) <= len("上网 ") { - return model.Reply{} + return &model.Reply{} } url := msg.RawMsg[len("上网 "):] url = formatURL(url) // if err := util.ScreenshotURL(url, "./tmp/getweb/url.png", 1620, 1960, 0, 0, 0, 0, ""); err != nil { if err := util.ScreenshotURL(url, util.GenTempFilePath("getweb/url.png"), 1620, 1960, 0, 0, 0, 0, ""); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -31,7 +31,7 @@ func getweb(msg model.Message) (reply model.Reply) { File: "file:///tmp/qqbot/getweb/url.png", }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/handler.go b/handler/handler.go index 5034dfb..fc78c91 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -88,7 +88,7 @@ func RegisterRegexHandler(trigger string, handler model.Handler, level constants } } -func MsgInHandler(msg model.Message) (reply model.Reply) { +func MsgInHandler(msg model.Message) (reply *model.Reply) { defer func() { if r := recover(); r != nil { stack := debug.Stack() @@ -100,7 +100,7 @@ func MsgInHandler(msg model.Message) (reply model.Reply) { if msg.RawMsg != "" { log.Default().Printf("\033[31m↓\033[0m:%v", msg) } else { - return model.Reply{} + return nil } defer func() { if reply.ReplyMsg != "" { @@ -144,7 +144,7 @@ func MsgInHandler(msg model.Message) (reply model.Reply) { if !msg.GroupInfo.IsGroupMsg && privateAllHandler != nil { return privateAllHandler(msg) } - return model.Reply{} + return &model.Reply{} } func RegisterHelpInform(triggerName string, category string, inform string) { diff --git a/handler/headmaster/headmaster.go b/handler/headmaster/headmaster.go index baba479..0f44958 100644 --- a/handler/headmaster/headmaster.go +++ b/handler/headmaster/headmaster.go @@ -24,7 +24,7 @@ func init() { handler.RegisterPrivateHandler(headmasterHandler) } -func headmasterHandler(msg model.Message) (reply model.Reply) { +func headmasterHandler(msg model.Message) (reply *model.Reply) { var from string if msg.GroupInfo.IsGroupMsg { from = util.From(msg.GroupInfo.GroupId, 0) @@ -32,13 +32,13 @@ func headmasterHandler(msg model.Message) (reply model.Reply) { from = util.From(0, msg.UserId) } if len(msg.RawMsg) > 7 && msg.RawMsg[0:7] == "校长 " { - return model.Reply{ + return &model.Reply{ ReplyMsg: ask(from, fmt.Sprintf("{\"qqid\":%d,\"group_nickname\":\"%s\",\"nickname\":\"%s\",\"referid\":%d,\"received_time\":%s,\"msg\":\"%s\"}", msg.UserId, msg.GroupInfo.UserCard, msg.UserNickName, msg.OriginMsgId, time.Now().Format("2006-01-02 15:04:05"), msg.RawMsg[7:])), ReferOriginMsg: false, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: ask(from, fmt.Sprintf("{\"qqid\":%d,\"group_nickname\":\"%s\",\"nickname\":\"%s\",\"referid\":%d,\"received_time\":%s,\"msg\":\"%s\"}", msg.UserId, msg.GroupInfo.UserCard, msg.UserNickName, msg.OriginMsgId, time.Now().Format("2006-01-02 15:04:05"), msg.RawMsg)), ReferOriginMsg: false, FromMsg: msg, diff --git a/handler/health/health.go b/handler/health/health.go index 7b9386e..db1f033 100644 --- a/handler/health/health.go +++ b/handler/health/health.go @@ -10,9 +10,9 @@ func init() { handler.RegisterHandler("health", health, constants.LEVEL_USER) } -func health(msg model.Message) (reply model.Reply) { +func health(msg model.Message) (reply *model.Reply) { heathResult := "" - return model.Reply{ + return &model.Reply{ ReplyMsg: heathResult, ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/help/help.go b/handler/help/help.go index 1229b14..403860b 100644 --- a/handler/help/help.go +++ b/handler/help/help.go @@ -3,6 +3,7 @@ package help import ( "git.lxtend.com/qqbot/constants" "git.lxtend.com/qqbot/handler" + "git.lxtend.com/qqbot/message" "git.lxtend.com/qqbot/model" "git.lxtend.com/qqbot/util" ) @@ -11,7 +12,7 @@ func init() { handler.RegisterHandler("!help", help, constants.LEVEL_BANNED) } -func help(msg model.Message) (reply model.Reply) { +func help(msg model.Message) *model.Reply { var helpInfo string if len(util.SplitN(msg.RawMsg, 2)) == 1 { helpInfo = `请输入!help [分类] 查看下面的分类功能` @@ -27,7 +28,17 @@ func help(msg model.Message) (reply model.Reply) { helpInfo += "\n" + v.Trigger + " : " + v.Inform } } - return model.Reply{ + textMsg := message.NewTextMessage() + textMsg.Data.Text = helpInfo + nodeMsg := message.NewNodeMessage() + nodeMsg.Data.ID = "10086" + nodeMsg.Data.UserID = "123456789" + nodeMsg.Data.Nickname = "test" + nodeMsg.Data.Content = []interface{}{textMsg} + forwardMsg := message.NewForwardMessage() + forwardMsg.Data.ID = "10086" + forwardMsg.Data.Content = []interface{}{nodeMsg} + return &model.Reply{ ReplyMsg: helpInfo, ReferOriginMsg: false, FromMsg: msg, diff --git a/handler/init/init.go b/handler/init/init.go index 1ff6e94..5f7f0e7 100644 --- a/handler/init/init.go +++ b/handler/init/init.go @@ -8,7 +8,7 @@ import ( func init() { go func() { - action.ActionManager.SendMsg(model.Reply{ + action.ActionManager.SendMsg(&model.Reply{ ReplyMsg: "初始化完成", FromMsg: model.Message{ GroupInfo: model.GroupInfo{ diff --git a/handler/jrrp/jrrp.go b/handler/jrrp/jrrp.go index 563f521..af81077 100644 --- a/handler/jrrp/jrrp.go +++ b/handler/jrrp/jrrp.go @@ -18,13 +18,13 @@ func init() { handler.RegisterHelpInform("今日人品/jrrp", "今日人品", "查询今日人品") } -func jrrpHandler(msg model.Message) (reply model.Reply) { +func jrrpHandler(msg model.Message) (reply *model.Reply) { luck, _ := jrrpInstance.GetJrrp(fmt.Sprint(msg.UserId)) nickname := msg.UserNickName if msg.GroupInfo.IsGroupMsg && msg.GroupInfo.UserCard != "" { nickname = msg.GroupInfo.UserCard } - return model.Reply{ + return &model.Reply{ ReplyMsg: nickname + "同学你好,你的今日人品是:" + fmt.Sprint(luck), ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/kfccrazy/kfc.go b/handler/kfccrazy/kfc.go index 91a4e2d..17fd118 100644 --- a/handler/kfccrazy/kfc.go +++ b/handler/kfccrazy/kfc.go @@ -27,11 +27,11 @@ func init() { sqlite3.TryCreateTable(createTableSQL) } -func storeKfc(msg model.Message) (reply model.Reply) { +func storeKfc(msg model.Message) (reply *model.Reply) { // 分割消息获取文案内容 tokens := util.SplitN(msg.RawMsg, 2) if len(tokens) < 2 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "请输入要添加的疯狂星期四文案", ReferOriginMsg: true, FromMsg: msg, @@ -40,7 +40,7 @@ func storeKfc(msg model.Message) (reply model.Reply) { content := strings.TrimSpace(tokens[1]) if content == "" { - return model.Reply{ + return &model.Reply{ ReplyMsg: "文案内容不能为空", ReferOriginMsg: true, FromMsg: msg, @@ -50,7 +50,7 @@ func storeKfc(msg model.Message) (reply model.Reply) { // 存储文案到数据库 tx, err := sqlite3.GetTran() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "数据库错误", ReferOriginMsg: true, FromMsg: msg, @@ -60,7 +60,7 @@ func storeKfc(msg model.Message) (reply model.Reply) { _, err = tx.Exec("INSERT INTO kfc_crazy (content, created_by) VALUES (?, ?)", content, msg.UserId) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "保存文案失败", ReferOriginMsg: true, FromMsg: msg, @@ -69,29 +69,29 @@ func storeKfc(msg model.Message) (reply model.Reply) { err = tx.Commit() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "保存文案失败", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "文案添加成功", ReferOriginMsg: true, FromMsg: msg, } } -func pickKfc(msg model.Message) (reply model.Reply) { +func pickKfc(msg model.Message) (reply *model.Reply) { // 判断是否是周四 if time.Now().Weekday() != time.Thursday { - return model.NotReply + return nil } // 从数据库随机获取一条文案 tx, err := sqlite3.GetTran() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "数据库错误", ReferOriginMsg: true, FromMsg: msg, @@ -102,7 +102,7 @@ func pickKfc(msg model.Message) (reply model.Reply) { var count int err = tx.Get(&count, "SELECT COUNT(*) FROM kfc_crazy") if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取文案失败", ReferOriginMsg: true, FromMsg: msg, @@ -110,13 +110,13 @@ func pickKfc(msg model.Message) (reply model.Reply) { } if count == 0 { - return model.NotReply + return nil } var content string err = tx.Get(&content, "SELECT content FROM kfc_crazy ORDER BY RANDOM() LIMIT 1") if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取文案失败", ReferOriginMsg: true, FromMsg: msg, @@ -125,14 +125,14 @@ func pickKfc(msg model.Message) (reply model.Reply) { err = tx.Commit() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取文案失败", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: content, ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/kw/kw.go b/handler/kw/kw.go index af7d7eb..4e4671c 100644 --- a/handler/kw/kw.go +++ b/handler/kw/kw.go @@ -32,10 +32,10 @@ func initKw() { } } -func setKw(msg model.Message) (reply model.Reply) { +func setKw(msg model.Message) (reply *model.Reply) { tokens := util.SplitN(msg.RawMsg, 3) if len(tokens) < 2 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "参数不足, 请使用\"kw [关键词] [回复内容]\"添加关键词回复", ReferOriginMsg: true, FromMsg: msg, @@ -43,62 +43,62 @@ func setKw(msg model.Message) (reply model.Reply) { } if _, err := kw.AddKW(tokens[1], tokens[2], strconv.Itoa(int(msg.GroupInfo.GroupId)), strconv.Itoa(int(msg.UserId))); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "添加失败", ReferOriginMsg: true, FromMsg: msg, } } regKw(tokens[1], msg.GroupInfo.GroupId) - return model.Reply{ + return &model.Reply{ ReplyMsg: "记下了", ReferOriginMsg: true, FromMsg: msg, } } -func deleteKw(msg model.Message) (reply model.Reply) { +func deleteKw(msg model.Message) (reply *model.Reply) { tokens := util.SplitN(msg.RawMsg, 3) if len(tokens) == 2 { if err := kw.DeleteKW(tokens[1], strconv.Itoa(int(msg.GroupInfo.GroupId))); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "删除失败", ReferOriginMsg: true, FromMsg: msg, } } unRegKw(tokens[1], msg.GroupInfo.GroupId) - return model.Reply{ + return &model.Reply{ ReplyMsg: "清空了", ReferOriginMsg: true, FromMsg: msg, } } if len(tokens) < 2 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "参数不足, 请使用\"kwd [关键词] [回复内容]\"删除对应的关键词回复", ReferOriginMsg: true, FromMsg: msg, } } if err := kw.DeleteKWReply(tokens[1], tokens[2], strconv.Itoa(int(msg.GroupInfo.GroupId))); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "删除失败", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "删除了", ReferOriginMsg: true, FromMsg: msg, } } -func getGroupAllKW(msg model.Message) (reply model.Reply) { +func getGroupAllKW(msg model.Message) (reply *model.Reply) { kwList, err := kw.GetGroupAllKW(strconv.Itoa(int(msg.GroupInfo.GroupId))) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取失败", ReferOriginMsg: true, FromMsg: msg, @@ -111,7 +111,7 @@ func getGroupAllKW(msg model.Message) (reply model.Reply) { kws += "\n" } } - return model.Reply{ + return &model.Reply{ ReplyMsg: kws, ReferOriginMsg: true, FromMsg: msg, @@ -126,10 +126,10 @@ func unRegKw(keyword string, groupId int64) { handler.UnRegisterGroupHandler(groupId, keyword) } -func kwReply(msg model.Message) (reply model.Reply) { +func kwReply(msg model.Message) (reply *model.Reply) { w, err := kw.GetKW(msg.RawMsg, strconv.Itoa(int(msg.GroupInfo.GroupId))) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, @@ -140,7 +140,7 @@ func kwReply(msg model.Message) (reply model.Reply) { wlist = append(wlist, v.Reply) } pick := rand.IntN(len(wlist)) - return model.Reply{ + return &model.Reply{ ReplyMsg: wlist[pick], ReferOriginMsg: false, FromMsg: msg, diff --git a/handler/newbond/newbond.go b/handler/newbond/newbond.go index 2f5bec0..a7f23ff 100644 --- a/handler/newbond/newbond.go +++ b/handler/newbond/newbond.go @@ -13,30 +13,30 @@ func init() { handler.RegisterHelpInform("取消监听新债", "新债", "关闭新债监听") } -func listenBond(msg model.Message) (reply model.Reply) { +func listenBond(msg model.Message) (reply *model.Reply) { if err := AddGroupListen(int(msg.GroupInfo.GroupId)); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "开启新债监听失败,报错: " + err.Error(), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "开启新债监听成功", ReferOriginMsg: true, FromMsg: msg, } } -func unListenBond(msg model.Message) (reply model.Reply) { +func unListenBond(msg model.Message) (reply *model.Reply) { if err := RemoveGroupListen(int(msg.GroupInfo.GroupId)); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "关闭新债监听失败,报错: " + err.Error(), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "关闭新债监听成功", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/newbond/service.go b/handler/newbond/service.go index eb9ac1a..815ead1 100644 --- a/handler/newbond/service.go +++ b/handler/newbond/service.go @@ -160,7 +160,7 @@ func RoundCheckNewBond() { }, }, } - action.ActionManager.SendMsg(msg) + action.ActionManager.SendMsg(&msg) } } AddBondData(bond) diff --git a/handler/restart/restart.go b/handler/restart/restart.go index 62ee07a..d5f9fab 100644 --- a/handler/restart/restart.go +++ b/handler/restart/restart.go @@ -32,81 +32,81 @@ func init() { handler.RegisterHelpInform("/shutdown", "热更新", "结束程序") } -func restart(msg model.Message) model.Reply { +func restart(msg model.Message) *model.Reply { if !hasVaildBuild { - return model.Reply{ + return &model.Reply{ ReplyMsg: "上次构建失败,请先成功构建再部署", ReferOriginMsg: true, FromMsg: msg, } } go restartProgram() - return model.Reply{ + return &model.Reply{ ReplyMsg: "重启中...", ReferOriginMsg: true, FromMsg: msg, } } -func shutdown(msg model.Message) model.Reply { +func shutdown(msg model.Message) *model.Reply { go shutdownProgram() - return model.Reply{ + return &model.Reply{ ReplyMsg: "关闭中...", ReferOriginMsg: true, FromMsg: msg, } } -func build(msg model.Message) model.Reply { +func build(msg model.Message) *model.Reply { err := buildBot() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "构建失败,报错如下\n" + err.Error(), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "构建成功", ReferOriginMsg: true, FromMsg: msg, } } -func buildAndRestart(msg model.Message) model.Reply { +func buildAndRestart(msg model.Message) *model.Reply { err := buildBot() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "构建失败,报错如下\n" + err.Error(), ReferOriginMsg: true, FromMsg: msg, } } if !hasVaildBuild { - return model.Reply{ + return &model.Reply{ ReplyMsg: "构建失败,请先成功构建再部署", ReferOriginMsg: true, FromMsg: msg, } } go restartProgram() - return model.Reply{ + return &model.Reply{ ReplyMsg: "构建成功,重启中...", ReferOriginMsg: true, FromMsg: msg, } } -func pullCode(msg model.Message) model.Reply { +func pullCode(msg model.Message) *model.Reply { err := util.GitPull() if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "拉取代码成功", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/roll/roll.go b/handler/roll/roll.go index 6203934..1666144 100644 --- a/handler/roll/roll.go +++ b/handler/roll/roll.go @@ -17,17 +17,17 @@ func init() { handler.RegisterHelpInform("roll [次数]d[面数]", "roll", "掷骰") } -func roll(msg model.Message) (reply model.Reply) { +func roll(msg model.Message) (reply *model.Reply) { act, err := ParseRollExpression(msg.RawMsg) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, } } result, results := RollDice(act) - return model.Reply{ + return &model.Reply{ ReplyMsg: "掷骰结果: " + strconv.Itoa(result) + "点 " + fmt.Sprint(results), ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/scoresaber/score.go b/handler/scoresaber/score.go index eb066f7..db03404 100644 --- a/handler/scoresaber/score.go +++ b/handler/scoresaber/score.go @@ -32,7 +32,7 @@ func init() { // handler.RegisterHandler("jss", screenshotSS, constants.LEVEL_USER) } -func ssPlusN(msg model.Message) (reply model.Reply) { +func ssPlusN(msg model.Message) (reply *model.Reply) { var ( resultStr strings.Builder err error @@ -43,7 +43,7 @@ func ssPlusN(msg model.Message) (reply model.Reply) { if len(msg.RawMsg) > len("ss+") { N, err = strconv.Atoi(msg.RawMsg[len("ss+"):]) if err != nil || N <= 0 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "请输入一个正整数", ReferOriginMsg: true, FromMsg: msg, @@ -54,7 +54,7 @@ func ssPlusN(msg model.Message) (reply model.Reply) { userIdStr := strconv.Itoa(int(msg.UserId)) userSSID, err := scoresaber.GetSSID(userIdStr) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -70,7 +70,7 @@ func ssPlusN(msg model.Message) (reply model.Reply) { attempts++ } if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取您的分数时出现问题,请稍后重试。" + err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -80,7 +80,7 @@ func ssPlusN(msg model.Message) (reply model.Reply) { // 获取当前用户所在区对应+N位的玩家列表 leaderboard, err := scoresaber.FetchCountryLeaderboard(userInfo.Country, userInfo.CountryRank-N, userInfo.ID) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "获取您的分数时出现问题,请稍后重试。" + err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -102,14 +102,14 @@ func ssPlusN(msg model.Message) (reply model.Reply) { } } resultStr.WriteString(fmt.Sprintf("您只需要再打出%.2fpp就能达到%s区第%d名。", targetPlayer.PP-userInfo.PP, userInfo.Country, targetPlayer.CountryRank)) - return model.Reply{ + return &model.Reply{ ReplyMsg: resultStr.String(), ReferOriginMsg: true, FromMsg: msg, } } -func getSSProfile(msg model.Message) (reply model.Reply) { +func getSSProfile(msg model.Message) (reply *model.Reply) { var ( resultStr string err error @@ -130,7 +130,7 @@ func getSSProfile(msg model.Message) (reply model.Reply) { ssId, err = scoresaber.GetSSID(userIdStr) } if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "您未绑定ss账号,输入\"绑定ss [ssId]\"绑定(ssId为您的scoresaber主页链接中的数字部分)", ReferOriginMsg: true, FromMsg: msg, @@ -153,37 +153,37 @@ func getSSProfile(msg model.Message) (reply model.Reply) { resultStr = "获取您的分数时出现问题,请稍后重试。" + err.Error() } - return model.Reply{ + return &model.Reply{ ReplyMsg: resultStr, ReferOriginMsg: true, FromMsg: msg, } } -func bindSS(msg model.Message) (reply model.Reply) { - return model.Reply{ +func bindSS(msg model.Message) (reply *model.Reply) { + return &model.Reply{ ReplyMsg: scoresaber.SSQuery.BindSS(strconv.Itoa(int(msg.UserId)), msg.RawMsg[len("绑定ss "):]), ReferOriginMsg: true, FromMsg: msg, } } -func unbindSS(msg model.Message) (reply model.Reply) { - return model.Reply{ +func unbindSS(msg model.Message) (reply *model.Reply) { + return &model.Reply{ ReplyMsg: scoresaber.SSQuery.UnbindSS(strconv.Itoa(int(msg.UserId))), ReferOriginMsg: true, FromMsg: msg, } } -func getMyRecentScore(msg model.Message) (reply model.Reply) { +func getMyRecentScore(msg model.Message) (reply *model.Reply) { count := 1 scoreMsg := "" if len(msg.RawMsg) > len("最新ss ") { var err error count, err = strconv.Atoi(msg.RawMsg[len("最新ss "):]) if err != nil || count <= 0 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: true, FromMsg: msg, @@ -197,7 +197,7 @@ func getMyRecentScore(msg model.Message) (reply model.Reply) { recordCount := 0 records, err := scoresaber.SSQuery.GetRecentScores(count, strconv.Itoa(int(msg.UserId))) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: err.Error(), ReferOriginMsg: true, FromMsg: msg, @@ -238,21 +238,21 @@ func getMyRecentScore(msg model.Message) (reply model.Reply) { if len(scoreMsg) > 0 { scoreMsg = scoreMsg[:len(scoreMsg)-len("\n")] //去掉最后一个换行符 } else { - return model.Reply{ + return &model.Reply{ ReplyMsg: "无最近游戏记录", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "玩家 " + userName + " 的" + strconv.Itoa(recordCount) + "条最近记录为:\n" + scoreMsg, ReferOriginMsg: true, FromMsg: msg, } } -func screenshotSS(msg model.Message) (reply model.Reply) { - return model.Reply{ +func screenshotSS(msg model.Message) (reply *model.Reply) { + return &model.Reply{ ReplyMsg: "[CQ:image,file=file:///tmp/qqbot/" + scoresaber.GetSSPicture(strconv.Itoa(int(msg.UserId))) + "]", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/steamplaying/steam_playing.go b/handler/steamplaying/steam_playing.go index 2b665ab..0a8233e 100644 --- a/handler/steamplaying/steam_playing.go +++ b/handler/steamplaying/steam_playing.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "git.lxtend.com/qqbot/action" "git.lxtend.com/qqbot/config" "git.lxtend.com/qqbot/constants" "git.lxtend.com/qqbot/handler" @@ -35,10 +36,10 @@ func init() { go RoundCheckSteamPlaying() } -func bindSteam(msg model.Message) model.Reply { +func bindSteam(msg model.Message) *model.Reply { token := util.SplitN(msg.RawMsg, 2) if len(token) < 2 { - return model.Reply{ + return &model.Reply{ ReplyMsg: "请输入steamID", ReferOriginMsg: true, FromMsg: msg, @@ -50,111 +51,111 @@ func bindSteam(msg model.Message) model.Reply { token[1] = steamIdInUrl[1] } if valid, err := checkSteamIDValid(token[1]); !valid { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("steamID无效: %v", err), ReferOriginMsg: true, FromMsg: msg, } } else if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("steamID验证失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } if err := bindSteamUser(msg.UserId, token[1]); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("绑定失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } } - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("绑定steam用户%s成功,如果需要开启群内上号通知,请输入 启用上号通知", token[1]), ReferOriginMsg: true, FromMsg: msg, } } -func bindSteamInGroup(msg model.Message) model.Reply { +func bindSteamInGroup(msg model.Message) *model.Reply { if user, err := getSteamUser(msg.UserId); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("查询steam绑定失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } else if err := bindUserInGroup(msg.GroupInfo.GroupId, user.SteamID); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("绑定至群监听列表失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "绑定至群监听列表成功", ReferOriginMsg: true, FromMsg: msg, } } -func unbindSteam(msg model.Message) model.Reply { +func unbindSteam(msg model.Message) *model.Reply { if user, err := getSteamUser(msg.UserId); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("解绑失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } else { if err := unbindUserInAllGroup(user.SteamID); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("解绑所有群监听列表失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } if err := unbindSteamUser(msg.UserId); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("解绑失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "解绑成功", ReferOriginMsg: true, FromMsg: msg, } } -func unbindSteamInGroup(msg model.Message) model.Reply { +func unbindSteamInGroup(msg model.Message) *model.Reply { if user, err := getSteamUser(msg.UserId); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("群监听解绑失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } else { if err := unbindUserInGroup(msg.GroupInfo.GroupId, user.SteamID); err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("群监听解绑失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "群监听解绑成功,本群内将不再查询你的steam游戏状态", ReferOriginMsg: true, FromMsg: msg, } } -func checkSteamPlaying(msg model.Message) model.Reply { +func checkSteamPlaying(msg model.Message) *model.Reply { users, err := getSteamUsersInGroup(msg.GroupInfo.GroupId) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("获取群成员steam列表失败: %v", err), ReferOriginMsg: true, FromMsg: msg, @@ -166,13 +167,13 @@ func checkSteamPlaying(msg model.Message) model.Reply { } gameList, err := checkSteamGameStatus(steamIds) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("获取游戏列表失败: %v", err), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: gameList, ReferOriginMsg: true, FromMsg: msg, @@ -285,8 +286,7 @@ func RoundCheckSteamPlaying() { // FromMsg: model.Message{GroupInfo: model.GroupInfo{GroupId: group}}, FromMsg: model.Message{GroupInfo: model.GroupInfo{GroupId: config.ConfigManager.GetConfig().Management.ReportGroup}}, } - // action.ActionManager.SendMsg(msg) - log.Println(msg.ReplyMsg) + action.ActionManager.SendMsg(&msg) } } diff --git a/handler/ticket/ticket.go b/handler/ticket/ticket.go index 6306328..18acc3b 100644 --- a/handler/ticket/ticket.go +++ b/handler/ticket/ticket.go @@ -17,26 +17,26 @@ func init() { handler.RegisterHelpInform("结单 [id]", "ticket", "结单") } -func newTicket(msg model.Message) model.Reply { +func newTicket(msg model.Message) *model.Reply { id, err := storeTicket(msg.RawMsg[len("提单 "):], msg.UserId, msg.GroupInfo.GroupId) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("提单失败: %s", err.Error()), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("提单成功,id为%d,可以至 https://www.lxtend.com/ticket 查看工单", id), ReferOriginMsg: true, FromMsg: msg, } } -func doneTicket(msg model.Message) model.Reply { +func doneTicket(msg model.Message) *model.Reply { id, err := strconv.Atoi(msg.RawMsg[len("结单 "):]) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()), ReferOriginMsg: true, FromMsg: msg, @@ -44,13 +44,13 @@ func doneTicket(msg model.Message) model.Reply { } err = setTicketDone(id) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()), ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: "结单成功", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/urlparser/url.go b/handler/urlparser/url.go index e6fdd99..0707fb9 100644 --- a/handler/urlparser/url.go +++ b/handler/urlparser/url.go @@ -20,7 +20,7 @@ func init() { handler.RegisterFrontMatchHandler("https://", plainTextUrlParser, constants.LEVEL_USER) } -func plainTextUrlParser(msg model.Message) (reply model.Reply) { +func plainTextUrlParser(msg model.Message) (reply *model.Reply) { url := msg.RawMsg url = strings.Split(url, " ")[0] url = strings.Split(url, "\n")[0] @@ -29,7 +29,7 @@ func plainTextUrlParser(msg model.Message) (reply model.Reply) { url, _ = removeTrackingParams(url) newUrl, err := resolveFinalURL(url) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, @@ -37,31 +37,31 @@ func plainTextUrlParser(msg model.Message) (reply model.Reply) { } newUrl, _ = removeTrackingParams(newUrl) if util.IsEquivalentURL(url, newUrl) { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: newUrl, ReferOriginMsg: true, FromMsg: msg, } } -func cqJsonUrlParser(msg model.Message) (reply model.Reply) { +func cqJsonUrlParser(msg model.Message) (reply *model.Reply) { newMsg := strings.ReplaceAll(msg.RawMsg, "\n", "") qqdocurl, err := extractQQDocURL(newMsg) if err != nil { - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: true, FromMsg: msg, } } - return model.Reply{ + return &model.Reply{ ReplyMsg: qqdocurl, ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/wordle/wordle.go b/handler/wordle/wordle.go index bb731c9..edee8bb 100644 --- a/handler/wordle/wordle.go +++ b/handler/wordle/wordle.go @@ -10,18 +10,18 @@ func init() { handler.RegisterHandler("wordle", wordle, constants.LEVEL_USER) } -func wordle(msg model.Message) (reply model.Reply) { +func wordle(msg model.Message) (reply *model.Reply) { handler.RegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId, tempTrigger) - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: true, FromMsg: msg, } } -func tempTrigger(msg model.Message) (reply model.Reply, isTrigger bool) { +func tempTrigger(msg model.Message) (reply *model.Reply, isTrigger bool) { handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId) - return model.Reply{ + return &model.Reply{ ReplyMsg: " ", ReferOriginMsg: true, FromMsg: msg, diff --git a/handler/xibao/xibao.go b/handler/xibao/xibao.go index 2c83c89..638ceaf 100644 --- a/handler/xibao/xibao.go +++ b/handler/xibao/xibao.go @@ -20,14 +20,14 @@ func init() { handler.RegisterHelpInform("悲报 [内容]", "喜报/悲报", "生成悲报图片,支持换行或多消息发送") } -func xiBao(msg model.Message) (reply model.Reply) { +func xiBao(msg model.Message) (reply *model.Reply) { fileName := uuid.New().String() filePath := util.GenTempFilePath(fmt.Sprintf("%s.png", fileName)) re := regexp.MustCompile(`\s+`) tokens := re.Split(msg.RawMsg, 2) if len(tokens) < 2 { handler.RegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId, xiBaoTemp) - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, @@ -40,14 +40,14 @@ func xiBao(msg model.Message) (reply model.Reply) { File: "file://" + filePath, }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, } } -func xiBaoTemp(msg model.Message) (reply model.Reply, isTrigger bool) { +func xiBaoTemp(msg model.Message) (reply *model.Reply, isTrigger bool) { handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId) fileName := uuid.New().String() filePath := util.GenTempFilePath(fmt.Sprintf("%s.png", fileName)) @@ -58,21 +58,21 @@ func xiBaoTemp(msg model.Message) (reply model.Reply, isTrigger bool) { File: "file://" + filePath, }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, }, true } -func beiBao(msg model.Message) (reply model.Reply) { +func beiBao(msg model.Message) (reply *model.Reply) { fileName := uuid.New().String() filePath := util.GenTempFilePath(fmt.Sprintf("%s.png", fileName)) re := regexp.MustCompile(`\s+`) tokens := re.Split(msg.RawMsg, 2) if len(tokens) < 2 { handler.RegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId, beiBaoTemp) - return model.Reply{ + return &model.Reply{ ReplyMsg: "", ReferOriginMsg: false, FromMsg: msg, @@ -85,14 +85,14 @@ func beiBao(msg model.Message) (reply model.Reply) { File: "file:///tmp/qqbot/" + fileName + ".png", }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, } } -func beiBaoTemp(msg model.Message) (reply model.Reply, isTrigger bool) { +func beiBaoTemp(msg model.Message) (reply *model.Reply, isTrigger bool) { handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId) fileName := uuid.New().String() filePath := util.GenTempFilePath(fmt.Sprintf("%s.png", fileName)) @@ -103,7 +103,7 @@ func beiBaoTemp(msg model.Message) (reply model.Reply, isTrigger bool) { File: "file:///tmp/qqbot/" + fileName + ".png", }, } - return model.Reply{ + return &model.Reply{ ReplyMsg: imageMsg.ToCQString(), ReferOriginMsg: true, FromMsg: msg, diff --git a/model/handler.go b/model/handler.go index 59a973d..4ba3759 100644 --- a/model/handler.go +++ b/model/handler.go @@ -2,8 +2,8 @@ package model import "git.lxtend.com/qqbot/constants" -type Handler func(msg Message) (reply Reply) -type TryCatchHandler func(msg Message) (reply Reply, catched bool) +type Handler func(msg Message) (reply *Reply) +type TryCatchHandler func(msg Message) (reply *Reply, catched bool) type HandlerInfo[H Handler | TryCatchHandler] struct { Trigger string diff --git a/model/message.go b/model/message.go index b2541d0..32949db 100644 --- a/model/message.go +++ b/model/message.go @@ -15,13 +15,7 @@ type GroupInfo struct { } type Reply struct { - ReplyMsg string `json:"replyMsg"` - ReferOriginMsg bool `json:"referOriginMsg"` - FromMsg Message `json:"fromMsg"` -} - -var NotReply = Reply{ - ReplyMsg: "", - ReferOriginMsg: false, - FromMsg: Message{}, + ReplyMsg interface{} `json:"replyMsg"` + ReferOriginMsg bool `json:"referOriginMsg"` + FromMsg Message `json:"fromMsg"` } diff --git a/model/upstream_message.go b/model/upstream_message.go index d8eccb1..387e14b 100644 --- a/model/upstream_message.go +++ b/model/upstream_message.go @@ -14,13 +14,13 @@ type SendPkg struct { // 上游包的参数结构体 type UpstreamParams struct { - UserID int64 `json:"user_id"` - GroupID int64 `json:"group_id"` - Message string `json:"message"` - AutoEscape bool `json:"auto_escape"` + UserID int64 `json:"user_id"` + GroupID int64 `json:"group_id"` + Message interface{} `json:"message"` + AutoEscape bool `json:"auto_escape"` } -func GenSendPkg(userID int64, groupID int64, message string, autoEscape bool) SendPkg { +func GenSendPkg(userID int64, groupID int64, message interface{}, autoEscape bool) SendPkg { if groupID == 0 { return SendPkg{ Action: constants.PRIVATE_MSG_SEND, diff --git a/ws_client/client.go b/ws_client/client.go index c89a8eb..3094dcd 100644 --- a/ws_client/client.go +++ b/ws_client/client.go @@ -90,7 +90,7 @@ func (c *WebSocketClient) receiveMessages() { } go func() { reply := handler.MsgInHandler(msg) - if reply.ReplyMsg != "" { + if reply != nil { action.ActionManager.SendMsg(reply) } }()