fix:修改了atri.go的匹配逻辑

This commit is contained in:
haibaraguo 2021-09-04 01:26:55 +08:00
parent 3077f3c053
commit b60a6c7d0c
2 changed files with 1964 additions and 282 deletions

1682
nohup.out

File diff suppressed because it is too large Load Diff

View File

@ -1,282 +1,282 @@
/* /*
Package atri 本文件基于 https://github.com/Kyomotoi/ATRI Package atri 本文件基于 https://github.com/Kyomotoi/ATRI
Golang 移植版语料素材均来自上述项目 Golang 移植版语料素材均来自上述项目
本项目遵守 AGPL v3 协议进行开源 本项目遵守 AGPL v3 协议进行开源
*/ */
package atri package atri
import ( import (
"math/rand" "math/rand"
"time" "time"
zero "github.com/wdvxdr1123/ZeroBot" zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/message"
) )
var ( var (
// ATRI 所有命令的优先级 // ATRI 所有命令的优先级
prio = 2 prio = -1
// ATRI 表情的 codechina 镜像 // ATRI 表情的 codechina 镜像
res = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/plugin_atri/" res = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/plugin_atri/"
// ATRI 的总开关 // ATRI 的总开关
enable = true enable = true
) )
func init() { // 插件主体 func init() { // 插件主体
zero.OnFullMatch("ATRI醒醒", zero.AdminPermission).SetBlock(true).SetPriority(prio). zero.OnFullMatch("ATRI醒醒", zero.AdminPermission).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
enable = true enable = true
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText("嗯呜呜……夏生先生……?")) ctx.SendChain(randText("嗯呜呜……夏生先生……?"))
}) })
zero.OnFullMatch("ATRI睡吧", zero.AdminPermission).SetBlock(true).SetPriority(prio). zero.OnFullMatch("ATRI睡吧", zero.AdminPermission).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
enable = false enable = false
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText("Zzz……Zzz……")) ctx.SendChain(randText("Zzz……Zzz……"))
}) })
zero.OnFullMatch("萝卜子", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnFullMatch("萝卜子", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
switch rand.Intn(2) { switch rand.Intn(2) {
case 0: case 0:
ctx.SendChain(randText("萝卜子是对机器人的蔑称!", "是亚托莉......萝卜子可是对机器人的蔑称")) ctx.SendChain(randText("萝卜子是对机器人的蔑称!", "是亚托莉......萝卜子可是对机器人的蔑称"))
case 1: case 1:
ctx.SendChain(randRecord("RocketPunch.amr")) ctx.SendChain(randRecord("RocketPunch.amr"))
} }
}) })
zero.OnKeywordGroup([]string{"喜欢", "爱你", "爱", "suki", "daisuki", "すき", "好き", "贴贴", "老婆", "亲一个", "mua"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"喜欢", "爱你", "爱", "suki", "daisuki", "すき", "好き", "贴贴", "老婆", "亲一个", "mua"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
if rand.Intn(10) == 0 { if rand.Intn(10) == 0 {
ctx.SendChain(randImage("SUKI.jpg", "SUKI1.jpg", "SUKI2.png")) ctx.SendChain(randImage("SUKI.jpg", "SUKI1.jpg", "SUKI2.png"))
}else{ }else{
ctx.SendChain(randText( ctx.SendChain(randText(
"椛椛不是你的电子宠物", "椛椛不是你的电子宠物",
"椛椛不爱你,爬", "椛椛不爱你,爬",
"你是个好人,你值得更好的归属", "你是个好人,你值得更好的归属",
"椛椛已经有主人了", "椛椛已经有主人了",
)) ))
} }
}) })
zero.OnKeywordGroup([]string{"草你妈", "操你妈", "脑瘫", "废柴", "fw", "five", "废物", "战斗", "爬", "爪巴", "sb", "SB", "傻B"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio - 1). zero.OnKeywordGroup([]string{"草你妈", "操你妈", "脑瘫", "废柴", "fw", "five", "废物", "战斗", "爬", "爪巴", "sb", "SB", "傻B"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio - 1).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randImage("FN.jpg", "WQ.jpg", "WQ1.jpg")) ctx.SendChain(randImage("FN.jpg", "WQ.jpg", "WQ1.jpg"))
}) })
zero.OnFullMatchGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う"}, atriSwitch()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う","早好"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour() now := time.Now().Hour()
switch { switch {
case now < 6: // 凌晨 case now < 6: // 凌晨
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"zzzz......", "zzzz......",
"zzzzzzzz......", "zzzzzzzz......",
"zzz...好涩哦..zzz....", "zzz...好涩哦..zzz....",
"别...不要..zzz..那..zzz..", "别...不要..zzz..那..zzz..",
"嘻嘻..zzz..呐~..zzzz..", "嘻嘻..zzz..呐~..zzzz..",
"...zzz....哧溜哧溜....", "...zzz....哧溜哧溜....",
)) ))
case now >= 6 && now < 9: case now >= 6 && now < 9:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"啊......早上好...(哈欠)", "啊......早上好...(哈欠)",
"唔......吧唧...早上...哈啊啊~~~\n早上好......", "唔......吧唧...早上...哈啊啊~~~\n早上好......",
"早上好......", "早上好......",
"早上好呜......呼啊啊~~~~", "早上好呜......呼啊啊~~~~",
"啊......早上好。\n昨晚也很激情呢", "啊......早上好。\n昨晚也很激情呢",
"吧唧吧唧......怎么了...已经早上了么...", "吧唧吧唧......怎么了...已经早上了么...",
"早上好!", "早上好!",
"......看起来像是傍晚,其实已经早上了吗?", "......看起来像是傍晚,其实已经早上了吗?",
"早上好......欸~~~脸好近呢", "早上好......欸~~~脸好近呢",
)) ))
case now >= 9 && now < 18: case now >= 9 && now < 18:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"哼!这个点还早啥,昨晚干啥去了!?", "哼!这个点还早啥,昨晚干啥去了!?",
"熬夜了对吧熬夜了对吧熬夜了对吧???!", "熬夜了对吧熬夜了对吧熬夜了对吧???!",
"是不是熬夜是不是熬夜是不是熬夜?!", "是不是熬夜是不是熬夜是不是熬夜?!",
)) ))
case now >= 18 && now < 24: case now >= 18 && now < 24:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"早个啥?哼唧!我都准备洗洗睡了!", "早个啥?哼唧!我都准备洗洗睡了!",
"不是...你看看几点了,哼!", "不是...你看看几点了,哼!",
"晚上好哇", "晚上好哇",
)) ))
} }
}) })
zero.OnFullMatchGroup([]string{"中午好", "午安"}, atriSwitch()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"中午好", "午安","午好"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour() now := time.Now().Hour()
if now > 11 && now < 15 { // 中午 if now > 11 && now < 15 { // 中午
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"午安w", "午安w",
"午觉要好好睡哦ATRI会陪伴在你身旁的w", "午觉要好好睡哦ATRI会陪伴在你身旁的w",
"嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o", "嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o",
"睡你午觉去!哼唧!!", "睡你午觉去!哼唧!!",
)) ))
} }
}) })
zero.OnFullMatchGroup([]string{"晚安", "oyasuminasai", "おやすみなさい"}, atriSwitch()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"晚安", "oyasuminasai", "おやすみなさい","晚好"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour() now := time.Now().Hour()
switch { switch {
case now < 6: // 凌晨 case now < 6: // 凌晨
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"zzzz......", "zzzz......",
"zzzzzzzz......", "zzzzzzzz......",
"zzz...好涩哦..zzz....", "zzz...好涩哦..zzz....",
"别...不要..zzz..那..zzz..", "别...不要..zzz..那..zzz..",
"嘻嘻..zzz..呐~..zzzz..", "嘻嘻..zzz..呐~..zzzz..",
"...zzz....哧溜哧溜....", "...zzz....哧溜哧溜....",
)) ))
case now >= 6 && now < 11: case now >= 6 && now < 11:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"你可猝死算了吧!", "你可猝死算了吧!",
"?啊这", "?啊这",
"亲,这边建议赶快去睡觉呢~~~", "亲,这边建议赶快去睡觉呢~~~",
"不可忍不可忍不可忍!!为何这还不猝死!!", "不可忍不可忍不可忍!!为何这还不猝死!!",
)) ))
case now >= 11 && now < 15: case now >= 11 && now < 15:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"午安w", "午安w",
"午觉要好好睡哦ATRI会陪伴在你身旁的w", "午觉要好好睡哦ATRI会陪伴在你身旁的w",
"嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o", "嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o",
"睡你午觉去!哼唧!!", "睡你午觉去!哼唧!!",
)) ))
case now >= 15 && now < 19: case now >= 15 && now < 19:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"难不成??晚上不想睡觉??现在休息", "难不成??晚上不想睡觉??现在休息",
"就......挺离谱的...现在睡觉", "就......挺离谱的...现在睡觉",
"现在还是白天哦,睡觉还太早了", "现在还是白天哦,睡觉还太早了",
)) ))
case now >= 19 && now < 24: case now >= 19 && now < 24:
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o", "嗯哼哼~睡吧,就像平常一样安眠吧~o(≧▽≦)o",
"......(打瞌睡)", "......(打瞌睡)",
"呼...呼...已经睡着了哦~...呼......", "呼...呼...已经睡着了哦~...呼......",
"......我、我会在这守着你的,请务必好好睡着", "......我、我会在这守着你的,请务必好好睡着",
)) ))
} }
}) })
zero.OnKeywordGroup([]string{"高性能", "太棒了", "すごい", "sugoi", "斯国一", "よかった"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"高性能", "太棒了", "すごい", "sugoi", "斯国一", "よかった"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"当然,我是高性能的嘛~", "当然,我是高性能的嘛~",
"小事一桩,我是高性能的嘛", "小事一桩,我是高性能的嘛",
"怎么样?还是我比较高性能吧?", "怎么样?还是我比较高性能吧?",
"哼哼!我果然是高性能的呢!", "哼哼!我果然是高性能的呢!",
"因为我是高性能的嘛!嗯哼!", "因为我是高性能的嘛!嗯哼!",
"因为我是高性能的呢!", "因为我是高性能的呢!",
"哎呀~,我可真是太高性能了", "哎呀~,我可真是太高性能了",
"正是,因为我是高性能的", "正是,因为我是高性能的",
"是的。我是高性能的嘛♪", "是的。我是高性能的嘛♪",
"毕竟我可是高性能的!", "毕竟我可是高性能的!",
"嘿嘿,我的高性能发挥出来啦♪", "嘿嘿,我的高性能发挥出来啦♪",
"我果然是很高性能的机器人吧!", "我果然是很高性能的机器人吧!",
"是吧!谁叫我这么高性能呢!哼哼!", "是吧!谁叫我这么高性能呢!哼哼!",
"交给我吧,有高性能的我陪着呢", "交给我吧,有高性能的我陪着呢",
"呣......我的高性能,毫无遗憾地施展出来了......", "呣......我的高性能,毫无遗憾地施展出来了......",
)) ))
}) })
zero.OnKeywordGroup([]string{"没事", "没关系", "大丈夫", "还好", "不要紧", "没出大问题", "没伤到哪"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"没事", "没关系", "大丈夫", "还好", "不要紧", "没出大问题", "没伤到哪"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText( ctx.SendChain(randText(
"当然,我是高性能的嘛~", "当然,我是高性能的嘛~",
"没事没事,因为我是高性能的嘛!嗯哼!", "没事没事,因为我是高性能的嘛!嗯哼!",
"没事的,因为我是高性能的呢!", "没事的,因为我是高性能的呢!",
"正是,因为我是高性能的", "正是,因为我是高性能的",
"是的。我是高性能的嘛♪", "是的。我是高性能的嘛♪",
"毕竟我可是高性能的!", "毕竟我可是高性能的!",
"那种程度的事不算什么的。\n别看我这样我可是高性能的", "那种程度的事不算什么的。\n别看我这样我可是高性能的",
"没问题的,我可是高性能的", "没问题的,我可是高性能的",
)) ))
}) })
zero.OnKeywordGroup([]string{"好吗", "是吗", "行不行", "能不能", "可不可以"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"好吗", "是吗", "行不行", "能不能", "可不可以"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
if rand.Intn(2) == 0 { if rand.Intn(2) == 0 {
ctx.SendChain(randImage("YES.png", "NO.jpg")) ctx.SendChain(randImage("YES.png", "NO.jpg"))
} }
}) })
zero.OnFullMatchGroup([]string{"啊这"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"啊这"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
if rand.Intn(2) == 0 { if rand.Intn(2) == 0 {
ctx.SendChain(randImage("AZ.jpg", "AZ1.jpg")) ctx.SendChain(randImage("AZ.jpg", "AZ1.jpg"))
} }
}) })
zero.OnFullMatchGroup([]string{"我好了"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnKeywordGroup([]string{"我好了"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText("不许好!", "憋回去!")) ctx.SendChain(randText("不许好!", "憋回去!"))
}) })
zero.OnFullMatchGroup([]string{"", "?", "¿"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnFullMatchGroup([]string{"", "?", "¿"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
switch rand.Intn(5) { switch rand.Intn(5) {
case 0: case 0:
ctx.SendChain(randText("?", "", "嗯?", "(。´・ω・)ん?", "ん?")) ctx.SendChain(randText("?", "", "嗯?", "(。´・ω・)ん?", "ん?"))
case 1, 2: case 1, 2:
ctx.SendChain(randImage("WH.jpg", "WH1.jpg", "WH2.jpg", "WH3.jpg")) ctx.SendChain(randImage("WH.jpg", "WH1.jpg", "WH2.jpg", "WH3.jpg"))
} }
}) })
zero.OnKeyword("离谱", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio). zero.OnKeyword("离谱", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
switch rand.Intn(5) { switch rand.Intn(5) {
case 0: case 0:
ctx.SendChain(randText("?", "", "嗯?", "(。´・ω・)ん?", "ん?")) ctx.SendChain(randText("?", "", "嗯?", "(。´・ω・)ん?", "ん?"))
case 1, 2: case 1, 2:
ctx.SendChain(randImage("WH.jpg")) ctx.SendChain(randImage("WH.jpg"))
} }
}) })
zero.OnKeyword("答应我", atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio). zero.OnKeyword("答应我", atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
time.Sleep(time.Second * 1) time.Sleep(time.Second * 1)
ctx.SendChain(randText("我无法回应你的请求")) ctx.SendChain(randText("我无法回应你的请求"))
}) })
} }
func randText(text ...string) message.MessageSegment { func randText(text ...string) message.MessageSegment {
length := len(text) length := len(text)
return message.Text(text[rand.Intn(length)]) return message.Text(text[rand.Intn(length)])
} }
func randImage(file ...string) message.MessageSegment { func randImage(file ...string) message.MessageSegment {
length := len(file) length := len(file)
return message.Image(res + file[rand.Intn(length)]) return message.Image(res + file[rand.Intn(length)])
} }
func randRecord(file ...string) message.MessageSegment { func randRecord(file ...string) message.MessageSegment {
length := len(file) length := len(file)
return message.Record(res + file[rand.Intn(length)]) return message.Record(res + file[rand.Intn(length)])
} }
// atriSwitch 控制 ATRI 的开关 // atriSwitch 控制 ATRI 的开关
func atriSwitch() zero.Rule { func atriSwitch() zero.Rule {
return func(ctx *zero.Ctx) bool { return func(ctx *zero.Ctx) bool {
return enable return enable
} }
} }
// atriSleep 凌晨0点到6点ATRI 在睡觉,不回应任何请求 // atriSleep 凌晨0点到6点ATRI 在睡觉,不回应任何请求
func atriSleep() zero.Rule { func atriSleep() zero.Rule {
return func(ctx *zero.Ctx) bool { return func(ctx *zero.Ctx) bool {
if now := time.Now().Hour(); now >= 1 && now < 6 { if now := time.Now().Hour(); now >= 1 && now < 6 {
return false return false
} }
return true return true
} }
} }