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

View File

@@ -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

View File

@@ -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():
"""取消所有订阅