父类 API / 属性
以下成员在抽象父类 Plugin 中定义(plugins/_pluginBase.cs):
| 成员 | 类型/签名 | 说明 |
|---|---|---|
Logger | protected readonly ISimpleLogger | 日志记录器,由 PluginInterop 注入 |
Interop | protected readonly PluginInterop | 互操作性(查找插件、数据持久化、使用 Core 功能) |
Channel | protected readonly MessageChannel | 消息发送通道(内含日志,失败不抛出) |
GroupId | protected readonly IEnumerable<long> | 当前插件的工作范围(监听的 QQ 群列表) |
IsEnable | public bool { get; internal set; } = true | 是否启用;为假时 OnMessageAsync 不会被调用(当前恒为 true) |
OnMessageAsync(...) | public virtual Task | 收到新消息时的回调 |
OnLoaded() | public virtual Task | 全部插件加载完成后执行,可放互操作性的初始化代码 |
Dispose() | public virtual void | 插件卸载时的清理入口(Plugin : IDisposable) |
互操作性 - interop
PluginInterop(plugins/_interface.cs)在构造函数中注入,不要在构造函数中使用互操作成员(此时插件没有加载完),建议在 OnLoaded 函数中使用:
| 成员 | 类型/签名 | 说明 |
|---|---|---|
FindPlugin<T>() | internal T? | 查找类型为 T 的插件实例(返回 null 表示未找到);推荐直接在构造函数中注入其他插件实例 |
PluginInfoGetter | PluginInfoGetter | 获取所有插件的 PluginInfo |
PluginStorage | PluginStorage | 插件存储(object 级读写),见「存储与工具」 |
PathPrefix | string | 数据目录路径;文件型插件数据应放在其下 |
ClockService | ClockService | core 拥有的定时任务调度器(生命周期归宿主,插件不负责创建/释放) |
Interceptors | List<MessageInterceptor> | 拦截器列表,拦截特定消息被本插件处理 |
Lifecycle | IHostLifecycle | core 生命周期回调:检测更新 / 请求更新(fetch+merge+编译备用槽+切槽重启)/ 重启 / 重载 |
AuthorizedUser | long | 授权用户的 QQ 号 |
MessageService | IMessageService | 消息持久化与资源(图片/文件)读取 |
EventRegister | EventRegister | 通知类事件订阅(OnXxxReceived += handler),见下 |
Channel | MessageChannel | 当前插件的消息发送通道(基类也以 Channel 字段提供) |
定时任务执行器:通过 Interop.ClockService.Executor(DelegatingClockExecutor)注册——Agent 插件初始化时执行 Interop.ClockService.Executor.Inner = new AgentSessionClockExecutor(...) 接管定时任务投递。
Scoped 数据库:Interop.PluginStorage.PluginDatabaseScope 提供当前插件隔离的 LiteDB 集合视图,见「存储与工具」。
事件订阅 - EventRegister
Interop.EventRegister 提供通知类事件的订阅入口,通过 += 订阅、-= 退订,回调为同步执行:
Interop.EventRegister.OnPokeEventReceived += OnPoke;
可用事件(plugins/_interface.event.cs):OnNoticeEventReceived(基类,任意通知触发)、OnGroupUploadEventReceived、OnGroupAdminEventReceived、OnGroupDecreaseEventReceived、OnGroupIncreaseEventReceived、OnGroupBanEventReceived、OnFriendAddEventReceived、OnGroupRecallEventReceived、OnFriendRecallEventReceived、OnPokeEventReceived、OnLuckyKingEventReceived、OnHonorEventReceived、OnGroupMsgEmojiLikeEventReceived、OnEssenceEventReceived、OnGroupCardEventReceived。
拦截器 - Interceptors
方法签名:
public delegate bool MessageInterceptor(MessageContext context)
返回 true 拦截,false 不拦截。