qqbot插件-闪照转发

该QQ机器人使用go-cqhttpnonebot框架。

利用改框架,可以实现破解闪照并转发到指定qq号的功能

原理

qq的特殊消息都可以表示为CQ码(纪念原来的酷Q),CQ码文档可以参考go-cqhttp文档

我们需要的闪照的CQ码是这样的格式:

1
[CQ:image,type=flash,file=xxxx.image]
去掉type=flash,即可表示为正常的图片。

所以反闪照插件的功能思路就是:

  1. 利用正则表达式:\[CQ:image,type=flash,file=.*?\]捕获Bot接收到的所有闪照CQ码
  2. 解析出发送者,所在群号以及CQ码的全部信息
  3. 将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私聊转发原图


qqbot插件-闪照转发
https://blog.scubot.com/article/51135/
作者
贺翔/CarOL
发布于
2021年4月6日
许可协议