本文最后更新于104 天前,其中的信息可能已经过时,如有错误请发送邮件到skyfutu@qq.com
前言
有针对部分群聊屏蔽插件的需求
过程
根据需求,换句话说就是不对指定群聊进行响应,刚开始以为挺简单的,去看Mirai的Docs找到群号的参数行了
{
"type": "BotJoinGroupEvent",
"group": {
"id": 123456789,
"name": "Miral Technology",
"permission": "MEMBER"
},
invitor: null
}
从中我们可以看到,参数就是group.id,然后加个if的判断语句就实现了!就完成了以下代码:
def handle_group_message(self, event: EventContext, **kwargs):
group_id = kwargs.get("group_id")
# 判断
if group_id == "114514":
return # 返回了个寂寞
函数完成后本以为就此结束了,没想到没实现这个功能,并没有屏蔽指定qq群。这时我才意识到我是基于开源扩展plugin的,也就是说,插件不能直接读取到mirai的参数。
找到原因后,首先我去看了下消息函数,发现有这么一段代码
args = {
"launcher_type": launcher_type,
"launcher_id": launcher_id,
"sender_id": sender_id,
"text_message": text_message,
}
这个事件把mirai的api接口返回的消息分成如下
launcher_type是类型,私聊还是群聊
launcher_id是qq号/群号
sender_id为id
text_message就是留给我们插件检测的,例如sky ba,响应头就是sky,而ba就是指令,储存在text_message
虽然不能直接读取mirai接口的参数,但我们可以读取程序作者写的函数返回的参数,那么就只需要改成
if launcher_type == 'group' and launcher_id == 114514:
event.prevent_default()
return []
if语句进行判断两个参数,因为是屏蔽,所以返回空就行了,完成修改后热重启机器人,很显然轻松秒杀。
结尾
其实这也没什么技术含量,只是我闲的没事写的,文笔不太好,见谅…祝大家元宵节快乐!