IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    qqbot插件-闪照转发

    贺翔/CarOL发表于 2023-10-27 10:16:57
    love 0

    该QQ机器人使用go-cqhttp和nonebot框架。

    利用改框架,可以实现破解闪照并转发到指定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私聊转发原图



沪ICP备19023445号-2号
友情链接