酷Q倒后,机器人项目迁移到了go-cqhttp,但是复读功能却出现了问题
复读原理
首先复读功能实现原理非常简单,创建这样一个类
@dataclass class Record:
last_msg: str
last_user_id: int
repeat_count: int = 0
每次收到新消息都和last_msg做对比,如果一致,repeat_count增加1,当repeat_count达到一定数量时触发复读。但是在我用GO-CQHTTP后,出现了表情包无法幅度的问题
问题原理
排查了一下午,最终发现,即使是同一个表情包,但发的人不同,最后的CQ码也不同
Person1
[CQ:image,file=ba2421b1f29116ff7f7e1afbb2927cd3.image,url=http://gchat.qpic.cn/gchatpic_new/2544547198/1013258198-2232641901-BA2421B1F29116FF7F7E1AFBB2927CD3/0?term=2]
Person2
[CQ:image,file=ba2421b1f29116ff7f7e1afbb2927cd3.image,url=http://gchat.qpic.cn/gchatpic_new/835291398/1013258198-3218374199-BA2421B1F29116FF7F7E1AFBB2927CD3/0?term=2]
仔细对比发现,缓存文件file相同,但url的值并不一样。这就导致了每次收到的即使是同一个表情包,但CQ码都不同,从而repeat_count清零,无法复读
解决方法
问题找到了,那解决方法也简单,去掉url这部分内容就好了
# 首先判断是不是图片消息
if "[CQ:image" in session.msg:
# 查找url所在下标
index = session.msg.find("url=")
if index != -1:
msg = session.msg[:index - 1] + "]"
else:
msg = session.msg
我的方法可能比较初级(Python菜B),应该有更好的办法可以用。这个问题说是坑到我了,找了一个下午,从怀疑 IntentCommand 函数,到怀疑复读函数,最终才发现,因为每次消息都不一样,根本没进入复读函数