From 3cb49fe2d8bd609429fe44703c154b1fe6f06e20 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Mon, 24 Apr 2023 10:34:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E7=BE=A4=E5=86=85=E7=A6=81=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/qqbot/manager.py | 11 +---------- pkg/qqbot/process.py | 3 ++- pkg/qqbot/sources/nakuru.py | 24 +++++++++++++++++++++--- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index 2a160c95..78429202 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -97,16 +97,7 @@ class QQBotManager: elif config.msg_source_adapter == 'nakuru': from pkg.qqbot.sources.nakuru import NakuruProjectAdapter self.adapter = NakuruProjectAdapter(config.nakuru_config) - # nakuru库有bug,这个接口没法带access_token,会失败 - # 所以目前自行发请求 - import requests - resp = requests.get( - url="http://{}:{}/get_login_info".format(config.nakuru_config['host'], config.nakuru_config['http_port']), - headers={ - 'Authorization': "Bearer " + config.nakuru_config['token'] if 'token' in config.nakuru_config else "" - } - ) - self.bot_account_id = int(resp.json()['data']['user_id']) + self.bot_account_id = self.adapter.bot_account_id else: self.adapter = pkg.utils.context.get_qqbot_manager().adapter diff --git a/pkg/qqbot/process.py b/pkg/qqbot/process.py index ff85126c..545886d1 100644 --- a/pkg/qqbot/process.py +++ b/pkg/qqbot/process.py @@ -66,7 +66,8 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes # 检查是否被禁言 if launcher_type == 'group': - if mgr.adapter.is_muted(launcher_id): + is_muted = mgr.adapter.is_muted(launcher_id) + if is_muted: logging.info("机器人被禁言,跳过消息处理(group_{})".format(launcher_id)) return reply diff --git a/pkg/qqbot/sources/nakuru.py b/pkg/qqbot/sources/nakuru.py index 46e17c79..d7fae727 100644 --- a/pkg/qqbot/sources/nakuru.py +++ b/pkg/qqbot/sources/nakuru.py @@ -12,6 +12,7 @@ import json class NakuruProjectMessageConverter(MessageConverter): + """消息转换器""" @staticmethod def yiri2target(message_chain: mirai.MessageChain) -> list: msg_list = [] @@ -50,6 +51,7 @@ class NakuruProjectMessageConverter(MessageConverter): @staticmethod def target2yiri(message_chain: typing.Any) -> mirai.MessageChain: + """将Yiri的消息链转换为YiriMirai的消息链""" assert type(message_chain) is list yiri_msg_list = [] @@ -71,6 +73,7 @@ class NakuruProjectMessageConverter(MessageConverter): class NakuruProjectEventConverter(EventConverter): + """事件转换器""" @staticmethod def yiri2target(event: typing.Type[mirai.Event]): if event is mirai.GroupMessage: @@ -127,16 +130,29 @@ class NakuruProjectEventConverter(EventConverter): class NakuruProjectAdapter(MessageSourceAdapter): """nakuru-project适配器""" bot: nakuru.CQHTTP + bot_account_id: int message_converter: NakuruProjectMessageConverter = NakuruProjectMessageConverter() event_converter: NakuruProjectEventConverter = NakuruProjectEventConverter() listener_list: list[dict] - def __init__(self, config: dict): + def __init__(self, cfg: dict): """初始化nakuru-project的对象""" - self.bot = nakuru.CQHTTP(**config) + self.bot = nakuru.CQHTTP(**cfg) self.listener_list = [] + # nakuru库有bug,这个接口没法带access_token,会失败 + # 所以目前自行发请求 + import config + import requests + resp = requests.get( + url="http://{}:{}/get_login_info".format(config.nakuru_config['host'], config.nakuru_config['http_port']), + headers={ + 'Authorization': "Bearer " + config.nakuru_config['token'] if 'token' in config.nakuru_config else "" + }, + timeout=5 + ) + self.bot_account_id = int(resp.json()['data']['user_id']) def send_message( self, @@ -178,7 +194,9 @@ class NakuruProjectAdapter(MessageSourceAdapter): asyncio.run(task) def is_muted(self, group_id: int) -> bool: - return False + import time + group_member_info = asyncio.run(self.bot.getGroupMemberInfo(group_id, self.bot_account_id)) + return group_member_info.shut_up_timestamp > int(time.time()) def register_listener( self,