复读原理
首先复读功能实现原理非常简单,创建这样一个类
@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 函数,到怀疑复读函数,最终才发现,因为每次消息都不一样,根本没进入复读函数。
文章评论