156 lines
3.7 KiB
Go
156 lines
3.7 KiB
Go
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,
|
|
}
|
|
}
|