Appearance
SoruxBot 插件概述
SoruxBot 插件开发有两种模式:
- 基于框架使用C#接入开发
- 基于框架扩展使用第三方语言进行开发
SoruxBot插件的目录结构:
bash
Plugins ##表示Wrapper下插件的存储/运行/配置的目录
Bin ##表示插件的存储目录
Config ##表示插件的配置目录
Data ##表示插件的数据目录
基于C#接入开发
你也可以在此处查看一个插件的完整开发流程:Example
开始
- 下载SoruxBot.Interface的源码
- 建立你的工作区,并将SoruxBot.Interface添加到你的解决方案中
- 创建你的项目,并选型为C#类库
创建项目结构
插件应当包含一个Register类作为向框架注册信息的类,和多个请求事件的Controller类。
Register
在Register类中,通过引入命名空间using Sorux.Framework.Bot.Core.Interface.PluginsSDK.Register
并使类至少继承一个IBasicInformationRegister
接口
你的代码可能是这个样子:
csharp
using Sorux.Framework.Bot.Core.Interface.PluginsSDK.Register;
public class Register : IBasicInformationRegister
{
public string GetAuthor() => "SoruxBot";
public string GetDescription() => "SoruxBot框架调试插件";
public string GetName() => "SoruxBotDebugHelper";
public string GetVersion() => "1.0.0-release";
public string GetDLL() => "soruxbot.pluginshelper.debughelper.dll";
}
插件通过继承Interface.Register命名空间下的若干接口来向框架注册对应的服务,以下是这些接口的具体含义:
- IBasicInformationRegister:必须继承,表示注册插件的基本信息
- ICommandPermission:可选继承,表示是否请求权限托管服务,继承后可以使用权限管理特性
- IPluginsUUIDRegister:可选继承,表示插件是否向SoruxBot插件市场注册,并提供UUID
对于Register可选的接口,可详见Register页
WARNING
不经过继承对应的接口表明插件特性,可能会导致在使用接口提供的特性的时候出现无法预知的错误
Controller
在Controller类中: Controller类表示插件的控制类,表示插件某个命令集的类。在每一个Controller中应该尽可能的包含某类功能的全部命令。
Controller类并没有明确的命令或者是位置规范,你只需要继承BotController
父类即可向框架表明这是一个Controller类
TIP
最佳实践:Controller类虽然没有明确的限制,但是建议在开发时每个功能模块自成一个Controller
构造函数
Controller构造函数中可以使用Interface中提供的参数,以下有:
- ILoggerService:日志模块
- IBasicAPI:API实例
- BotContext:机器人上下文模块【部分安全模式下框架可能不允许插件获取此实例】
- ILongMessageCommunicate:长对话支持模块
- IPluginsDataStorage:插件配置持久化模块
TIP
最佳实践:Controller类一般需要获取日志模块进行信息输出和API实例进行消息输出
Action
以一段代码为例:
csharp
[Event(EventType.SoloMessage)]
[Command(CommandAttribute.Prefix.None,"debug [state]")]
public PluginFucFlag Debug(MessageContext context, string state)
{
switch (state)
{
case "on":
bot.SendPrivateMessage(context,"Debug Mode on");
return PluginFucFlag.MsgIntercepted;
case "off":
bot.SendPrivateMessage(context,"Debug Mode off");
return PluginFucFlag.MsgIntercepted;
default:
bot.SendPrivateMessage(context,"Error State,only be on/off but receive:" + state);
return PluginFucFlag.MsgIntercepted;
}
}
Action分为特性标记,处理内容和返回三部分。
Json
插件需要有一个 Json 文件来向插件提供用户可以根据实际情况自行更改的配置项。
WARNING
这并不是说明插件需要把初始化配置项写在此处,此Json文件旨在对插件进行说明,如果你需要配置用户可以修改的插件信息,那么也请写在这个地方,因为插件向框架申请的存储是被框架加密的。
Json文件应当被放置在Config下,且与插件名称相同,例如对于A.dll,他需要有A.json的配置文件。
WARNING
由于框架可以跨平台运行,所以请注意文件名的细节。在Linux平台中,操作系统对于文件名的大小写有严格的识别。因此可能出现你插件配置文件在Windows下可以运行,但在Linux下不可以,所以请严格控制大小写。
Json文件中的详细配置请见Json页
至此便是一个插件的基本构造,此外,你还可以使用特性页高级操作。
Nuget限制
特别的,当插件开发过程中使用了部分外置库,而这些外置库同时被SoruxBot使用,因此部分情况下可能出现库冲突导致插件加载失败的现象,因此我们推荐你首先检查SoruxBot是否使用了你使用的外置库,并核验版本是否正确。
以下列举了SoruxBot所使用的所有外置库,一般来说SoruxBot不会轻易更改使用的Nuget库,以确保与开发者保持一致,请确保插件开发过程中使用的版本(如果存在)与下面的版本相同:
Microsoft.Extensions.*
:版本为7.0.0Microsoft.Extensions.Configuration.Binder
:版本为7.0.1System.Configuration.ConfigurationManager
: 版本为7.0.0Newtonsoft.Json.Bson
:版本为1.0.3-beta1RestSharp
:版本为109.0.0-preview.1System.Data.SQLite.Core
:版本为1.0.117
一般情况下这些库不会与插件的开发起到冲突,且部分库在Interface也会开放部分的Utils以供插件开发者简化插件开发流程。例如,在SoruxBot中提供了供插件开发者使用的数据存储模块IPluginsDataStorage
,其为SQLite
模块的包装版本,那么插件开发者可以使用本模块以进行插件数据配置存储操作,而不是自己使用SQLite进行手动操作。
如有需要用到上述库,请先检查SoruxBot是否提供了相应的Utils,然后才使用版本相同的库。
基于其它语言接入开发
文档完善中...