feat: 添加关键词回复

This commit is contained in:
lixiangwuxian
2024-10-20 15:47:00 +08:00
parent 003c9b6f90
commit 5a56f6fdc7
9 changed files with 340 additions and 32 deletions

View File

@@ -9,7 +9,8 @@ import (
"git.lxtend.com/qqbot/model"
)
var handlers = make(map[string]model.HandlerInfo[model.Handler])
var allGroupHandlers = make(map[string]model.HandlerInfo[model.Handler])
var GroupHandlers = make(map[int64]map[string]model.HandlerInfo[model.Handler])
var frontMatchHandlers = make(map[string]model.HandlerInfo[model.Handler])
var liveHandlers = make(map[int64]map[int64]model.TryCatchHandler)
var livePrivateHandlers = make(map[int64]model.TryCatchHandler)
@@ -21,7 +22,7 @@ func RegisterPrivateHandler(handler model.Handler) {
}
func RegisterHandler(trigger string, handler model.Handler, level constants.PermissionLevel) {
handlers[trigger] = model.HandlerInfo[model.Handler]{
allGroupHandlers[trigger] = model.HandlerInfo[model.Handler]{
Trigger: trigger,
Handler: handler,
Level: level,
@@ -47,6 +48,23 @@ func RegisterLiveHandler(groupID int64, userID int64, handler model.TryCatchHand
liveHandlers[groupID][userID] = handler
}
func RegisterGroupHandler(groupID int64, trigger string, handler model.Handler, level constants.PermissionLevel) {
if _, ok := GroupHandlers[groupID]; !ok {
GroupHandlers[groupID] = make(map[string]model.HandlerInfo[model.Handler])
}
GroupHandlers[groupID][trigger] = model.HandlerInfo[model.Handler]{
Trigger: trigger,
Handler: handler,
Level: level,
}
}
func UnRegisterGroupHandler(groupID int64, trigger string) {
if _, ok := GroupHandlers[groupID]; ok {
delete(GroupHandlers[groupID], trigger)
}
}
func MsgInHandler(msg model.Message) (reply model.Reply) {
defer func() {
if r := recover(); r != nil {
@@ -85,9 +103,14 @@ func MsgInHandler(msg model.Message) (reply model.Reply) {
}
}
msgArray := strings.Split(msg.RawMsg, " ")
if handler, ok := handlers[msgArray[0]]; ok {
if handler, ok := allGroupHandlers[msgArray[0]]; ok {
return auth.TryExecHandler(msg, handler.Level, handler.Handler)
}
if groupHandler, ok := GroupHandlers[msg.GroupInfo.GroupId]; ok {
if handler, ok := groupHandler[msgArray[0]]; ok {
return auth.TryExecHandler(msg, handler.Level, handler.Handler)
}
}
if !msg.GroupInfo.IsGroupMsg && privateAllHandler != nil {
return privateAllHandler(msg)
}

155
handler/kw/kw.go Normal file
View File

@@ -0,0 +1,155 @@
package say
import (
"math/rand/v2"
"strconv"
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/model"
"git.lxtend.com/qqbot/service/kw"
"git.lxtend.com/qqbot/util"
)
func init() {
handler.RegisterHandler("kw", setKw, constants.LEVEL_TRUSTED)
handler.RegisterHelpInform("kw", "kw [关键词] [回复内容] 添加关键词回复,kw [关键词] 删除全部关键词回复")
handler.RegisterHandler("kwd", deleteKw, constants.LEVEL_TRUSTED)
handler.RegisterHandler("kwall", getGroupAllKW, constants.LEVEL_TRUSTED)
handler.RegisterHelpInform("kwall", "kwall 查看所有关键词回复")
initKw()
}
func initKw() {
kwList, err := kw.GetAllKW()
if err != nil {
return
}
for _, v := range kwList {
group, _ := strconv.Atoi(v.GroupID)
regKw(v.Kw, int64(group))
}
}
func setKw(msg model.Message) (reply model.Reply) {
tokens := util.SplitN(msg.RawMsg, 3)
if len(tokens) < 2 {
return model.Reply{
ReplyMsg: "参数不足, 请使用\"kw [关键词] [回复内容]\"添加关键词回复",
ReferOriginMsg: true,
FromMsg: msg,
}
}
if _, err := kw.AddKW(tokens[1], tokens[2], strconv.Itoa(int(msg.GroupInfo.GroupId)), strconv.Itoa(int(msg.UserId))); err != nil {
return model.Reply{
ReplyMsg: "添加失败",
ReferOriginMsg: true,
FromMsg: msg,
}
}
regKw(tokens[1], msg.GroupInfo.GroupId)
return model.Reply{
ReplyMsg: "记下了",
ReferOriginMsg: true,
FromMsg: msg,
}
}
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{
ReplyMsg: "删除失败",
ReferOriginMsg: true,
FromMsg: msg,
}
}
unRegKw(tokens[1], msg.GroupInfo.GroupId)
return model.Reply{
ReplyMsg: "清空了",
ReferOriginMsg: true,
FromMsg: msg,
}
}
if len(tokens) < 2 {
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{
ReplyMsg: "删除失败",
ReferOriginMsg: true,
FromMsg: msg,
}
}
return model.Reply{
ReplyMsg: "删除了",
ReferOriginMsg: true,
FromMsg: msg,
}
}
func getGroupAllKW(msg model.Message) (reply model.Reply) {
kwList, err := kw.GetGroupAllKW(strconv.Itoa(int(msg.GroupInfo.GroupId)))
if err != nil {
return model.Reply{
ReplyMsg: "获取失败",
ReferOriginMsg: true,
FromMsg: msg,
}
}
kws := ""
for k, v := range kwList {
kws += v.Kw + " -> " + v.Reply
if k != len(kwList)-1 {
kws += "\n"
}
}
return model.Reply{
ReplyMsg: kws,
ReferOriginMsg: true,
FromMsg: msg,
}
}
func regKw(keyword string, groupId int64) {
handler.RegisterGroupHandler(groupId, keyword, kwReply, constants.LEVEL_USER)
}
func unRegKw(keyword string, groupId int64) {
handler.UnRegisterGroupHandler(groupId, keyword)
}
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{
ReplyMsg: "",
ReferOriginMsg: false,
FromMsg: msg,
}
}
wlist := []string{}
for _, v := range w {
wlist = append(wlist, v.Reply)
}
pick := rand.IntN(len(wlist))
if util.Fail(0.1) {
return model.Reply{
ReplyMsg: "",
ReferOriginMsg: false,
FromMsg: msg,
}
}
return model.Reply{
ReplyMsg: wlist[pick],
ReferOriginMsg: false,
FromMsg: msg,
}
}

View File

@@ -1,22 +0,0 @@
package say
import (
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/model"
)
func init() {
handler.RegisterHandler("kw", say, constants.LEVEL_TRUSTED)
}
func say(msg model.Message) (reply model.Reply) {
if len(msg.RawMsg) <= len("kw ") {
return model.Reply{}
}
return model.Reply{
ReplyMsg: "记下了",
ReferOriginMsg: true,
FromMsg: msg,
}
}

28
handler/wordle/wordle.go Normal file
View File

@@ -0,0 +1,28 @@
package wordle
import (
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/model"
)
func init() {
handler.RegisterHandler("wordle", wordle, constants.LEVEL_USER)
}
func wordle(msg model.Message) (reply model.Reply) {
handler.RegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId, tempTrigger)
return model.Reply{
ReplyMsg: "",
ReferOriginMsg: true,
FromMsg: msg,
}
}
func tempTrigger(msg model.Message) (reply model.Reply, isTrigger bool) {
return model.Reply{
ReplyMsg: " ",
ReferOriginMsg: true,
FromMsg: msg,
}, true
}