本文最后更新于:2024-08-20T08:57:09+08:00
利用改框架,可以实现破解闪照并转发到指定qq号的功能
原理
qq的特殊消息都可以表示为CQ码(纪念原来的酷Q),CQ码文档可以参考go-cqhttp文档。
我们需要的闪照的CQ码是这样的格式:
1
| [CQ:image,type=flash,file=xxxx.image]
|
去掉
type=flash,
即可表示为正常的图片。
所以反闪照插件的功能思路就是:
- 利用正则表达式:
\[CQ:image,type=flash,file=.*?\]
捕获Bot接收到的所有闪照CQ码
- 解析出发送者,所在群号以及CQ码的全部信息
- 将CQ码中的
type=flash,
去掉,再私聊转发给预设的qq号即可
NoneBot2
中提供了on_regex
装饰器,可以直接正则监视所有满足条件的消息,
而NoneBot1并未提供类似on_regex
的正则匹配装饰器,所以需要用on_message
监听所有消息,再对消息进行正则过滤。
为了减少计算压力,只监听群聊中的消息即可。
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import re from nonebot import get_bot
target_user = 765892480
pattens = re.compile(r"\[CQ:image,type=flash,file=.*?\]")
bot = get_bot()
@bot.on_message("group") async def AntiFlashImage(event): raw_info = (await bot.get_msg(message_id=event.message_id)) raw_message = raw_info["raw_message"] if re.match(pattens, raw_message): image_ = raw_message.replace('type=flash,', '') new_message = ( f"在群({raw_info['group_id']})中捕获闪照\n" f"发送者:{raw_info['sender']['nickname']}({raw_info['sender']['user_id']})\n" f"{image_}" ) await bot.send_private_msg(user_id=target_user, message=new_message)
|
效果图
群聊发送闪图
Bot私聊转发原图