跳到主要内容
版本:2.x

事件监听

监听

代码参考:src/Serein.Core/Models/Plugins/Net/PluginBase.Events.cs

在插件类内重载虚方法即可

示例
using Serein.Core.Models.Plugins.Net;
using System;
using System.Threading.Tasks;

namespace MyPlugin;

public class MainPlugin : PluginBase
{
public override void Dispose() { }

protected override Task OnPluginsLoaded()
{
Console.WriteLine("Loaded!");
return Task.CompletedTask;
}
}

拦截

对于可被拦截的事件,可以通过返回false来拦截事件,阻止其继续传递

例如,拦截ServerStarting将阻止服务器启动并阻止下一个事件ServerStarted的触发

using Serein.Core.Models.Plugins.Net;
using Serein.Core.Services.Servers;
using System;
using System.Threading.Tasks;

namespace MyPlugin;

public partial class MainPlugin : PluginBase
{
protected override Task<bool> OnServerStarting(ServerBase server)
{
Console.WriteLine("Intercepted!");
return Task.FromResult(false);
}
}
提示

当拦截事件时,你或许应该根据实际情况以合理的方式告诉用户,避免造成不必要的困扰

事件一览

事件名称是否可被拦截
ServerStarting
ServerStarted
ServerStopping
ServerExited
ServerRawOutput
ServerOutput
ServerInput
GroupMessageReceived
PrivateMessageReceived
WsDataReceived
PacketReceived
SereinClosed
SereinCrashed
PluginsLoaded
PluginsUnloading

ServerStarting

  • 触发时机:服务器启动前
  • 可被拦截:是
  • 函数参数:
参数类型说明
serverServerBase服务器对象

ServerStarted

  • 触发时机:服务器启动后
  • 可被拦截:否
  • 函数参数:
参数类型说明
serverServerBase服务器对象

ServerStopping

  • 触发时机:用户尝试手动停止服务器时
  • 可被拦截:是
  • 函数参数:
参数类型说明
serverServerBase服务器对象

ServerExited

  • 触发时机:服务器进程退出后
  • 可被拦截:否
  • 函数参数:
参数类型说明
serverServerBase服务器对象
exitCodeint/number退出代码
exitTimeDateTime/Date退出时间

ServerRawOutput

ServerOutput的区别

ServerRawOutput会在ServerOutput之前触发,且可能包含ANSI转义序列等特殊字符

  • 触发时机:服务器输出
  • 可被拦截:是
  • 函数参数:
参数类型说明
serverServerBase服务器对象
linestring输出行

ServerOutput

  • 触发时机:服务器输出
  • 可被拦截:是
  • 函数参数:
参数类型说明
serverServerBase服务器对象
linestring输出行

ServerInput

  • 触发时机:服务器输入
  • 可被拦截:否
  • 函数参数:
参数类型说明
serverServerBase服务器对象
linestring输入行

GroupMessageReceived

  • 触发时机:收到群聊消息
  • 可被拦截:是
  • 函数参数:
参数类型说明
messagePacketMessagePacket消息数据包

PrivateMessageReceived

  • 触发时机:收到私聊消息
  • 可被拦截:是
  • 函数参数:
参数类型说明
messagePacketMessagePacket消息数据包

WsDataReceived

触发顺序

WsDataReceived>PacketReceived>GroupMessageReceived/PrivateMessageReceived

  • 触发时机:收到WebSocket连接的数据文本
  • 可被拦截:是
  • 函数参数:
参数类型说明
datastring数据文本

PacketReceived

  • 触发时机:收到WebSocket连接的数据包
  • 可被拦截:是
  • 函数参数:
参数类型说明
packetJsonObject数据包

SereinClosed

提示

你可以通过此事件和PluginsUnloading事件来释放插件占用的资源,例如数据库连接、文件流等

  • 触发时机:程序即将退出前
  • 可被拦截:否
  • 函数参数:无

SereinCrashed

备注

不能保证总是能触发成功

  • 触发时机:程序崩溃后
  • 可被拦截:否
  • 函数参数:无

PluginsLoaded

  • 触发时机:插件加载完成后
  • 可被拦截:否
  • 函数参数:无

PluginsUnloading

  • 触发时机:插件卸载前
  • 可被拦截:否
  • 函数参数:无