Closed azmiao closed 1 year ago
方便起见已提交PR,若咖啡佬觉得修改后逻辑上有问题可直接关闭PR
问题1已于 https://github.com/Ice-Cirno/HoshinoBot/commit/2c5553b0acd1f2b25369adae5ae17c7d397c8398 修复(5个月前) 涉及fullmatch未触发,的确仍有bug,https://github.com/Ice-Cirno/HoshinoBot/commit/265f933f53ff940d2932613d34afbbc3aa8eda8d 这个commit已修复。
问题2设计如此,一条消息最多只能触发一个功能(否则用户很容易构造出触发多个功能的消息,容易误执行/风控),优先级为fullmatch = prefix > suffix > keyword > rex > command/neurallanguage。
后续信息在 265f933f53ff940d2932613d34afbbc3aa8eda8d 已同步
OK, 2eca008eeb4b16b5279d2011794a1fb1a302e3ae
此问题涉及两个小问题
具体问题的说明
问题1
举个栗子:一个fullmatch匹配“早”这个字,另一个rex匹配“早上啊啊啊.+?”
预期:发送“早上啊啊啊”,
service_funcs
服务列表里应该同时匹配到这个fullmatch和rex注意:fullmatch能匹配到我看了下代码好像代码里是用的前缀匹配,所以是正常能匹配到的,但是因为不完全会被跳过执行
实际:只匹配到了fullmatch
分析:通过查看![image](https://user-images.githubusercontent.com/54100327/204298372-8d56cbc9-1efe-4738-9746-f619456bfd4e.png)
trigger.py
内的RexTrigger
类,发现他获取到的event会因为先匹配了fullmatch而变成如下图,即拿到的text不全临时解决方案:我这边直接考虑拿raw_message,因为懒没有排查fullmatch为什么对event有影响。且修改未进行全面的测试,不确定CQHTTP的event.raw_message会不会有其他问题![image](https://user-images.githubusercontent.com/54100327/204299019-338bd5da-256c-4fd9-ac08-25af61308974.png)
问题2
举个栗子:仍然是上面的栗子,现在我们假设两个服务都被匹配到了,即
service_funcs
服务列表里同时有fullmatch对应的那个服务和rex对应的那个服务预期:将这俩服务里的函数都运行
实际:只运行了列表里的第一个服务
分析:最后这句
raise CanceledException('Handled by Hoshino')
在for循环内调用,调用完第一个服务后直接被强制raise了临时解决方案:将这行raise缩进一下,放到for循环外面,我这图里的代码可能不是最新,最新的也同理左缩进一格![image](https://user-images.githubusercontent.com/54100327/204300151-e8dc5b1d-22cc-4478-9452-c6513af3b431.png)