diff --git a/pkg/plugin/host.py b/pkg/plugin/host.py index d3209a06..7868403c 100644 --- a/pkg/plugin/host.py +++ b/pkg/plugin/host.py @@ -1,11 +1,15 @@ # 插件管理模块 +import asyncio import logging import importlib import pkgutil import sys +import traceback import pkg.utils.context as context +from mirai import Mirai + __plugins__ = {} """ 插件列表 @@ -159,10 +163,18 @@ class PluginHost: """获取运行时上下文""" return context - def get_bot(self): + def get_bot(self) -> Mirai: """获取机器人对象""" return context.get_qqbot_manager().bot + def send_person_message(self, person, message): + """发送私聊消息""" + asyncio.run(self.get_bot().send_friend_message(person, message)) + + def send_group_message(self, group, message): + """发送群消息""" + asyncio.run(self.get_bot().send_group_message(group, message)) + def notify_admin(self, message): """通知管理员""" context.get_qqbot_manager().notify_admin(message) @@ -184,7 +196,8 @@ class PluginHost: logging.debug("插件 {} 阻止了后序插件的执行".format(plugin['name'])) break - except: - logging.error("插件{}触发事件{}时发生错误: {}".format(plugin['name'], event_name, sys.exc_info())) + except Exception as e: + logging.error("插件{}触发事件{}时发生错误".format(plugin['name'], event_name)) + logging.error(traceback.format_exc()) return event_context diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index a4f8aeeb..40b02eb4 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -98,51 +98,64 @@ class QQBotManager: # Caution: 注册新的事件处理器之后,请务必在unsubscribe_all中编写相应的取消订阅代码 @self.bot.on(FriendMessage) async def on_friend_message(event: FriendMessage): - # 触发事件 - args = { - "launcher_type": "person", - "launcher_id": event.sender.id, - "sender_id": event.sender.id, - "message_chain": event.message_chain, - } - plugin_event = plugin_host.emit(plugin_models.PersonMessageReceived, **args) - if plugin_event.is_prevented_default(): - return + def friend_message_handler(event: FriendMessage): - go(self.on_person_message, (event,)) + # 触发事件 + args = { + "launcher_type": "person", + "launcher_id": event.sender.id, + "sender_id": event.sender.id, + "message_chain": event.message_chain, + } + plugin_event = plugin_host.emit(plugin_models.PersonMessageReceived, **args) + + if plugin_event.is_prevented_default(): + return + + self.on_person_message(event) + + go(friend_message_handler, (event,)) @self.bot.on(StrangerMessage) async def on_stranger_message(event: StrangerMessage): - # 触发事件 - args = { - "launcher_type": "person", - "launcher_id": event.sender.id, - "sender_id": event.sender.id, - "message_chain": event.message_chain, - } - plugin_event = plugin_host.emit(plugin_models.PersonMessageReceived, **args) - if plugin_event.is_prevented_default(): - return + def stranger_message_handler(event: StrangerMessage): + # 触发事件 + args = { + "launcher_type": "person", + "launcher_id": event.sender.id, + "sender_id": event.sender.id, + "message_chain": event.message_chain, + } + plugin_event = plugin_host.emit(plugin_models.PersonMessageReceived, **args) - go(self.on_person_message, (event,)) + if plugin_event.is_prevented_default(): + return + + self.on_person_message(event) + + go(stranger_message_handler, (event,)) @self.bot.on(GroupMessage) async def on_group_message(event: GroupMessage): - # 触发事件 - args = { - "launcher_type": "group", - "launcher_id": event.group.id, - "sender_id": event.sender.id, - "message_chain": event.message_chain, - } - plugin_event = plugin_host.emit(plugin_models.GroupMessageReceived, **args) - if plugin_event.is_prevented_default(): - return + def group_message_handler(event: GroupMessage): + # 触发事件 + args = { + "launcher_type": "group", + "launcher_id": event.group.id, + "sender_id": event.sender.id, + "message_chain": event.message_chain, + } + plugin_event = plugin_host.emit(plugin_models.GroupMessageReceived, **args) - go(self.on_group_message, (event,)) + if plugin_event.is_prevented_default(): + return + + self.on_group_message(event) + + go(group_message_handler, (event,)) def unsubscribe_all(): """取消所有订阅