Ice9Coffee / HoshinoBot

A qqbot for Princess Connect Re:Dive (and other usage :)
GNU General Public License v3.0
1.41k stars 412 forks source link

on_fullmatch 触发器存在失配情况 #198

Closed clacknya closed 2 years ago

clacknya commented 3 years ago

在同时存在以下两种触发器时

@sv.on_fullmatch('AAA')
...
@sv.on_suffix('.BBB')
...

输入 AAA.BBB 触发了 fullmatch('AAA') 而不是 on_suffix('.BBB')

Ice9Coffee commented 3 years ago

fullmatch实现上走的是prefix,AAA.BBB首先触发了AAA的前缀,但不满足fullmatch的限制条件,所以不会进入处理函数。已触发prefix不会再触发其他触发器。

clacknya commented 3 years ago

fullmatch实现上走的是prefix,AAA.BBB首先触发了AAA的前缀,但不满足fullmatch的限制条件,所以不会进入处理函数。已触发prefix不会再触发其他触发器。

-> “但不满足fullmatch的限制条件,所以不会进入处理函数” 不,实际是进入了 fullmatch 的处理函数,并把 .BBB 截断了

Ice9Coffee commented 3 years ago

-> “但不满足fullmatch的限制条件,所以不会进入处理函数” 不,实际是进入了 fullmatch 的处理函数,并把 .BBB 截断了

没进入“你编写的”处理函数。

这就是现在的预期行为,尽管与“你的预期”可能不同。 今后会随 #193 一起修复。

clacknya commented 3 years ago

-> “但不满足fullmatch的限制条件,所以不会进入处理函数” 不,实际是进入了 fullmatch 的处理函数,并把 .BBB 截断了

没进入“你编写的”处理函数。

这就是现在的预期行为,尽管与“你的预期”可能不同。 今后会随 #193 一起修复。

进入我写的处理函数了,消息都发出去了[黄豆暴筋emoji]

Ice9Coffee commented 3 years ago

请提供相关代码及日志

clacknya commented 3 years ago

那我整理下

clacknya commented 3 years ago

另外想问下有没有一个方便调试的模拟客户端,不需要真正登录QQ

Ice9Coffee commented 3 years ago

另外想问下有没有一个方便调试的模拟客户端,不需要真正登录QQ

nonebot2提供的有(但hoshinobot暂不支持nb2),go-cqhttp似乎也有一个管理页面 这不属于本项目的范畴,请到相应项目讨论

clacknya commented 3 years ago
hoshino_test/
└── test.py

test.py

from hoshino import Service, R, util
from hoshino.typing import CQEvent, MessageSegment

sv = Service('测试', enable_on_default=False)

@sv.on_fullmatch('AAA')
async def AAA(bot, ev: CQEvent):
    await bot.send(ev, 'AAA')

@sv.on_suffix('.BBB')
@sv.on_prefix('doBBB')
async def BBB(bot, ev: CQEvent):
    await bot.send(ev, 'BBB')
    await bot.send(ev, ev.message.extract_plain_text())

QQ:

输入 AAA
回复 AAA
输入 AAA.BBB
回复 AAA

LOG:

[2021-09-05 03:42:32,160 nonebot] INFO: Self: 1957162568, Message -700564730 from *********@[群:*********]: 'AAA'
[2021-09-05 03:42:32,164 测试] INFO: Message -700564730 triggered AAA.
[2021-09-05 03:42:32,547 nonebot] INFO: Message -700564730 is ignored: Handled by Hoshino
[2021-09-05 03:42:36,825 nonebot] INFO: Self: 1957162568, Message 942692906 from *********@[群:*********]: 'AAA.BBB'
[2021-09-05 03:42:36,828 测试] INFO: Message 942692906 triggered AAA.
[2021-09-05 03:42:37,294 nonebot] INFO: Message 942692906 is ignored: Handled by Hoshino
Ice9Coffee commented 3 years ago

原因应该是on_fullmatch截断了AAA,on_suffix又截断了.BBB,导致进入handler时消息为空,满足了fullmatch的条件。 修复 #178 引入的bug,将随 #193 一起修复。

你可以回退到 这个commit(8c3ee735213c7b18e1f4cb4c8514d494b274ab64) 来解决此问题。