From 7d10d0398e1350c56ddb8533891745a0a84d8423 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Mon, 24 Apr 2023 11:21:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20nakuru=E7=83=AD=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/qqbot/manager.py | 10 ++++++---- pkg/qqbot/sources/nakuru.py | 14 +++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index 78429202..4a1b8c78 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -188,14 +188,16 @@ class QQBotManager: 用于在热重载流程中卸载所有事件处理器 """ + import config self.adapter.unregister_listener( FriendMessage, on_friend_message ) - self.adapter.unregister_listener( - StrangerMessage, - on_stranger_message - ) + if config.msg_source_adapter == 'yirimirai': + self.adapter.unregister_listener( + StrangerMessage, + on_stranger_message + ) self.adapter.unregister_listener( GroupMessage, on_group_message diff --git a/pkg/qqbot/sources/nakuru.py b/pkg/qqbot/sources/nakuru.py index 1525e421..4f770115 100644 --- a/pkg/qqbot/sources/nakuru.py +++ b/pkg/qqbot/sources/nakuru.py @@ -56,6 +56,7 @@ class NakuruProjectMessageConverter(MessageConverter): yiri_msg_list = [] import datetime + # 添加Source组件以标记message_id等信息 yiri_msg_list.append(mirai.models.message.Source(id=message_id, time=datetime.datetime.now())) for component in message_chain: if type(component) is nkc.Plain: @@ -89,7 +90,7 @@ class NakuruProjectEventConverter(EventConverter): @staticmethod def target2yiri(event: typing.Any) -> mirai.Event: yiri_chain = NakuruProjectMessageConverter.target2yiri(event.message, event.message_id) - if type(event) is nakuru.FriendMessage: + if type(event) is nakuru.FriendMessage: # 私聊消息事件 return mirai.FriendMessage( sender=mirai.models.entities.Friend( id=event.sender.user_id, @@ -99,7 +100,7 @@ class NakuruProjectEventConverter(EventConverter): message_chain=yiri_chain, time=event.time ) - elif type(event) is nakuru.GroupMessage: + elif type(event) is nakuru.GroupMessage: # 群聊消息事件 permission = "MEMBER" if event.sender.role == "admin": @@ -206,6 +207,7 @@ class NakuruProjectAdapter(MessageSourceAdapter): def is_muted(self, group_id: int) -> bool: 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()) @@ -216,8 +218,12 @@ class NakuruProjectAdapter(MessageSourceAdapter): ): try: logging.debug("注册监听器: " + str(event_type) + " -> " + str(callback)) + + # 包装函数 async def listener_wrapper(app: nakuru.CQHTTP, source: self.event_converter.yiri2target(event_type)): callback(self.event_converter.target2yiri(source)) + + # 将包装函数和原函数的对应关系存入列表 self.listener_list.append( { "event_type": event_type, @@ -225,6 +231,8 @@ class NakuruProjectAdapter(MessageSourceAdapter): "wrapper": listener_wrapper, } ) + + # 注册监听器 self.bot.receiver(self.event_converter.yiri2target(event_type).__name__)(listener_wrapper) logging.debug("注册完成") except Exception as e: @@ -236,7 +244,7 @@ class NakuruProjectAdapter(MessageSourceAdapter): event_type: typing.Type[mirai.Event], callback: typing.Callable[[mirai.Event], None] ): - nakuru_event_name = self.event_converter.yiri2target(event_type) + nakuru_event_name = self.event_converter.yiri2target(event_type).__name__ new_event_list = []