Files
Mofox-Core/plugins/napcat_adapter_plugin/todo.md
Windpicker-owo 84ea2c41de 接入event
2025-08-27 01:55:14 +08:00

3.6 KiB
Raw Blame History

TODO List:

[x] logger使用主程序的 [ ] 使用插件系统的config系统 [ ] 接收从napcat传递的所有信息 [ ] 优化架构,各模块解耦,暴露关键方法用于提供接口 [ ] 单独一个模块负责与主程序通信 [ ] 使用event系统完善接口api


Event分为两种一种是对外输出的event由napcat插件自主触发并传递参数另一种是接收外界输入的event由外部插件触发并向napcat传递参数

例如,

对外输出的event

napcat_on_received_text -> (message_seg: Seg) 接受到qq的文字消息,会向handler传递一个Seg napcat_on_received_face -> (message_seg: Seg) 接受到qq的表情消息,会向handler传递一个Seg napcat_on_received_reply -> (message_seg: Seg) 接受到qq的回复消息,会向handler传递一个Seg napcat_on_received_image -> (message_seg: Seg) 接受到qq的图片消息,会向handler传递一个Seg napcat_on_received_image -> (message_seg: Seg) 接受到qq的图片消息,会向handler传递一个Seg napcat_on_received_record -> (message_seg: Seg) 接受到qq的语音消息,会向handler传递一个Seg napcat_on_received_rps -> (message_seg: Seg) 接受到qq的猜拳魔法表情,会向handler传递一个Seg napcat_on_received_friend_invitation -> (user_id: str) 接受到qq的好友请求,会向handler传递一个user_id ...

此类event不接受外部插件的触发只能由napcat插件统一触发。

外部插件需要编写handler并订阅此类事件。

from src.plugin_system.core.event_manager import event_manager
from src.plugin_system.base.base_event import HandlerResult

class MyEventHandler(BaseEventHandler):
    handler_name = "my_handler"
    handler_description = "我的自定义事件处理器"
    weight = 10  # 权重,越大越先执行
    intercept_message = False  # 是否拦截消息
    init_subscribe = ["napcat_on_received_text"]  # 初始订阅的事件

    async def execute(self, params: dict) -> HandlerResult:
        """处理事件"""
        try:
            message = params.get("message_seg")
            print(f"收到消息: {message.data}")
            
            # 业务逻辑处理
            # ...
            
            return HandlerResult(
                success=True,
                continue_process=True,  # 是否继续让其他处理器处理
                message="处理成功",
                handler_name=self.handler_name
            )
        except Exception as e:
            return HandlerResult(
                success=False,
                continue_process=True,
                message=f"处理失败: {str(e)}",
                handler_name=self.handler_name
            )

接收外界输入的event

napcat_kick_group <- (user_id, group_id) 踢出某个群组中的某个用户 napcat_mute_user <- (user_id, group_id, time) 禁言某个群组中的某个用户 napcat_unmute_user <- (user_id, group_id) 取消禁言某个群组中的某个用户 napcat_mute_group <- (user_id, group_id) 禁言某个群组 napcat_unmute_group <- (user_id, group_id) 取消禁言某个群组 napcat_add_friend <- (user_id) 向某个用户发出好友请求 napcat_accept_friend <- (user_id) 接收某个用户的好友请求 napcat_reject_friend <- (user_id) 拒绝某个用户的好友请求 ... 此类事件只由外部插件触发并传递参数由napcat完成请求任务。

外部插件需要触发此类的event并传递正确的参数。

from src.plugin_system.core.event_manager import event_manager

# 触发事件
await event_manager.trigger_event("napcat_accept_friend", user_id = 1234123)