开发技巧
主动调用插件接口
在现版本的OlivOS中如何主动发消息
首先,OlivOS目前的接口调用需要基于 OlivOS.API.Event 这个类来进行调用,形如你可以在文档中看到的那样:
sdk_event
和插件托盘进程的日志函数
共同完成,这意味着你需要首先去获得它们。
日志函数
日志函数
由插件托盘进程提供,它几乎在每个框架事件中都会被作为入参提供。
以如下事件举例
Proc
即为插件托盘进程,它有如下函数为日志函数
当你不需要直接使用它时,你不需要知道这些参数的意义是什么。
sdk_event
sdk_event
是一类直接来自前置协议端的事件封包,其本质是一类由sdk自行定义的类,在插件托盘的 OlivOS.API.Event 构造时,需要传入这些事件,并根据这些类的类型去调用对应的sdk自行实现并提供给OlivOS的插件事件组装函数,在这个过程中,sdk_event
中包含的各类信息(事件本身的消息,本机的账号信息等)都会被统一转换为OlivOS插件所能接受的事件类型。
而在主动调用的场景下,就需要自行基于账号信息
生成一个虚假的sdk_event
,并以此构造一个能用于OlivOS插件接口调用的插件事件。OlivOS已经内置了一个这样的专门用于这种场景的虚假sdk_event
,它就是 OlivOS.contentAPI.fake_sdk_event ,其构造需要提供一个账号信息
,其类型为 OlivOS.API.bot_info_T ,这个结构体在Proc.Proc_data['bot_info_dict']
的字典中存储,其key为每个账号对应的hash。
例如,假设你的账号的hash为3cfede0d58a99a0fe71846310e9cac47
,那么可以有如下代码
bot_hash = '3cfede0d58a99a0fe71846310e9cac47'
bot_info = Proc.Proc_data['bot_info_dict'][bot_hash]
print(bot_info.id)
print(bot_info.platform)
print(bot_info.hash)
综上
如果你需要直接调用接口,可以参考如下代码。
pluginName = '你的插件名称'
botHash = '3cfede0d58a99a0fe71846310e9cac47'
plugin_event = OlivOS.API.Event(
OlivOS.contentAPI.fake_sdk_event(
bot_info = Proc.Proc_data['bot_info_dict'][botHash],
fakename = pluginName
),
Proc.log
)
plugin_event.send(send_type, target_id, message)
pluginName = '你的插件名称'
botHash = '3cfede0d58a99a0fe71846310e9cac47'
OlivOS.API.Event(
OlivOS.contentAPI.fake_sdk_event(
bot_info = Proc.Proc_data['bot_info_dict'][botHash],
fakename = pluginName
),
Proc.log
).send(send_type, target_id, message)