软件会启动多个虚拟机处理数据,一旦相应的虚拟机新建完毕,除非手动重载,不会再重启改虚拟机:
虚拟机名称 | 启动条件 | 会处理的事件 |
---|---|---|
main | 软件启动、虚拟机重载后 | 处理启动事件、好友请求、群邀请等无法归属的事件 |
private | 私聊 | 处理所有私聊消息 |
各个群号 | 群消息等 | 处理所有与群相关的消息、事件 |
MQTT | 收到mqtt事件 | 收到mqtt事件 |
tcp | 收到tcp消息 | 收到tcp消息 |
所有lua虚拟机皆由LuaTask框架进行管理,各自均为单线程运行。分为多个虚拟机是为了提高效率,防止群数量太多,互相阻塞。
每个虚拟机生成后,都会直接运行main.lua
。脚本需要在其中注册好需要的事件、定时器任务。
触发接口见LuaTask-csharp
基本代码如下:
--lua里注册触发应对事件
sys.tiggerRegister('事件',function(data)
print('触发',data.xxxxx)
end)
//C#里触发事件
LuaEnv.LuaStates.Run("虚拟机名称", "事件", 触发数据);
所有事件均可在Ws.cs的Events函数找到,并且可以轻松地看出传入lua的数据内容
http的原始接口文档可在onebot-事件查看
http返回的原视json数据
将原封不动地存放在传给lua数据的raw
键下,方便按需调用
该部分直接由lua脚本实现
lua脚本构造请求数据,直接通过Http.cs来与http接口进行交互。
http接口文档见onebot-公开API
该部分可翻阅lua脚本,全部逻辑均由lua实现。
请参考Nlua关于import
函数的使用说明
上面描述的主动接口
基本都是调用C#接口进行发送。如果还看不懂调用方法,请参考现有Lua脚本依葫芦画瓢。