羽流's Blog
  • 答题器
    • 新/错题反馈
    • 下载最新版
    • 网页版
  • Python
常见物质的熔点:
铁1535,铜1083,金1064,铝660,而我只需你的一个评论心就化了
  1. 首页
  2. Python
  3. 正文

解决Nonebot复读功能无法复读表情包

2020年09月06日 299点热度 3人点赞 0条评论

复读原理

首先复读功能实现原理非常简单,创建这样一个类

@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 函数,到怀疑复读函数,最终才发现,因为每次消息都不一样,根本没进入复读函数。

标签: CQ码 go-cqhttp nonebot Python
最后更新:2020年09月06日

羽流

大三学生,摸索中的小菜鸡,喜欢瞎折腾
QQ: 835291398
Github: https://github.com/YuLiu-lab

打赏 点赞
< 上一篇

文章评论

取消回复

大三学生,摸索中的小菜鸡,喜欢瞎折腾
QQ: 835291398
Github: https://github.com/YuLiu-lab

最新 热点 随机
最新 热点 随机
解决Nonebot复读功能无法复读表情包 消息框导致Tkinter输入框(Entry)无法输入 百度通用文字识别竖着识别文字 剑网三QQ机器人 科举答题器V1.8 Python调用Tesseract-OCR图像识别和打包后如何运行
百度通用文字识别竖着识别文字 科举答题器V1.8 解决Nonebot复读功能无法复读表情包 WordPress注册时一直出现您的密码重设链接无效请在下方请求新链接 百度贴吧自动签到图文教程 使用wxpy模块定时给女神发天气预报
标签聚合
科举答题 剑网三科举 jx3 tesseract 答题器 Tesseract-OCR Python 科举
2020年十一月
一 二 三 四 五 六 日
« 9月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  
友情链接
  • 爱极客
  • Q Q
访问数据
  • 1
  • 47,522

COPYRIGHT © 2020 羽流's Blog. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

蜀ICP备20003606号