feat: 在PluginHost中提供消息发送方法

This commit is contained in:
Rock Chin
2023-01-15 00:04:47 +08:00
parent 52d6721ae2
commit 023ed21363
2 changed files with 62 additions and 36 deletions
+16 -3
View File
@@ -1,11 +1,15 @@
# 插件管理模块 # 插件管理模块
import asyncio
import logging import logging
import importlib import importlib
import pkgutil import pkgutil
import sys import sys
import traceback
import pkg.utils.context as context import pkg.utils.context as context
from mirai import Mirai
__plugins__ = {} __plugins__ = {}
""" """
插件列表 插件列表
@@ -159,10 +163,18 @@ class PluginHost:
"""获取运行时上下文""" """获取运行时上下文"""
return context return context
def get_bot(self): def get_bot(self) -> Mirai:
"""获取机器人对象""" """获取机器人对象"""
return context.get_qqbot_manager().bot 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): def notify_admin(self, message):
"""通知管理员""" """通知管理员"""
context.get_qqbot_manager().notify_admin(message) context.get_qqbot_manager().notify_admin(message)
@@ -184,7 +196,8 @@ class PluginHost:
logging.debug("插件 {} 阻止了后序插件的执行".format(plugin['name'])) logging.debug("插件 {} 阻止了后序插件的执行".format(plugin['name']))
break break
except: except Exception as e:
logging.error("插件{}触发事件{}时发生错误: {}".format(plugin['name'], event_name, sys.exc_info())) logging.error("插件{}触发事件{}时发生错误".format(plugin['name'], event_name))
logging.error(traceback.format_exc())
return event_context return event_context
+46 -33
View File
@@ -98,51 +98,64 @@ class QQBotManager:
# Caution: 注册新的事件处理器之后,请务必在unsubscribe_all中编写相应的取消订阅代码 # Caution: 注册新的事件处理器之后,请务必在unsubscribe_all中编写相应的取消订阅代码
@self.bot.on(FriendMessage) @self.bot.on(FriendMessage)
async def on_friend_message(event: 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(): def friend_message_handler(event: FriendMessage):
return
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) @self.bot.on(StrangerMessage)
async def on_stranger_message(event: 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(): def stranger_message_handler(event: StrangerMessage):
return # 触发事件
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) @self.bot.on(GroupMessage)
async def on_group_message(event: 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(): def group_message_handler(event: GroupMessage):
return # 触发事件
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(): def unsubscribe_all():
"""取消所有订阅 """取消所有订阅