Skip to content

插件开发概述

选择你的语言

语言状态说明
Rust✅ 完整支持官方 SDK,文档完善
C++🔜 即将推出核心功能已实现,文档编写中
Python🔜 即将推出核心功能已实现,文档编写中

整体结构

洛玖的插件系统分三层:

┌─────────────────────────────────────────┐
│              你的插件                     │
├─────────────────────────────────────────┤
│              SDK                         │
├─────────────────────────────────────────┤
│              luo9_core(FFI 层)          │
├─────────────────────────────────────────┤
│              宿主(luo9_bot)             │
└─────────────────────────────────────────┘

宿主负责连接 Napcat、接收消息、分发给插件、发送回复。

核心库luo9_core是一个 C 动态库,提供消息总线和命令解析的底层函数。它不关心你用什么语言,只暴露 extern "C" 接口。

SDK 是核心库的语言封装。它把 C 接口包装成你熟悉的 API —— 在 Rust 里是 Bus::topic("luo9_message"),在 Python 里是 Bus.topic("luo9_message")

插件是你写的代码。它通过 SDK 订阅消息、处理逻辑、发送回复。

消息怎么流动

所有通信都通过**消息总线(Bus)**进行。你可以把它想象成一个邮局:

  • Topic 是信箱的名字,比如 luo9_messageluo9_send
  • Subscriber 是每个插件在每个信箱上的专属格子
  • Publish 是往信箱里投信
  • Pop 是从格子里取信

宿主收到 QQ 消息后,把它投进 luo9_message 信箱。插件从自己的格子里取出消息,处理后把回复投进 luo9_send 信箱。宿主再从 luo9_send 取出来发给 Napcat。

Topic 一览

Topic方向用途
luo9_message宿主 → 插件QQ 消息
luo9_meta_event宿主 → 插件心跳、生命周期
luo9_notice宿主 → 插件好友/群变动通知
luo9_request宿主 → 插件好友/群请求
luo9_task宿主 → 插件定时任务触发
luo9_task_miso插件 → 宿主创建/取消定时任务
luo9_send插件 → 宿主请求发送消息
luo9_version宿主 → 插件版本查询
luo9_version_reply插件 → 宿主版本响应

插件入口

每个插件必须导出一个 plugin_main 函数:

rust
#[unsafe(no_mangle)]
pub extern "C" fn plugin_main() {
    // 你的代码从这里开始
}

宿主会在独立线程里调用它。如果 panic 了,宿主会捕获,不会带崩整个机器人。

下一步

基于 GPLv3 许可发布