跳到主要内容
版本:🚧2.1.0

事件监听

监听

代码参考:

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

示例
using Serein.Core.Services.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.Services.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
ChannelMessageReceived
GroupMessageReceived
PrivateMessageReceived
OnConnectionDataReceived
PacketReceived
SereinClosed
SereinCrashed
PluginsLoaded
PluginsUnloading

ServerStarting

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

ServerStarted

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

ServerStopping

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

ServerExited

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

ServerRawOutput

ServerOutput 的区别

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

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

ServerOutput

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

ServerInput

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

GroupMessageReceived

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

PrivateMessageReceived

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

ChannelMessageReceived

  • 最低版本:v2.1.0
  • 触发时机:收到频道消息
  • 可被拦截:是
  • 函数参数:
参数类型说明
packetsPackets消息数据包

ConnectionDataReceived

触发顺序
  1. ConnectionDataReceived
  2. PacketReceived
  3. 以下事件
    • GroupMessageReceived
    • PrivateMessageReceived
    • ChannelMessageReceived
  • 最低版本:v2.1.0
  • 触发时机:收到 WebSocket 连接的数据文本
  • 可被拦截:是
  • 函数参数:
参数类型说明
datastring数据文本

PacketReceived

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

SereinClosed

提示

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

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

SereinCrashed

备注

不能保证总是能触发成功

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

PluginsLoaded

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

PluginsUnloading

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