This release is a pre-release and may not be stable for production use.
nonebot-plugin-aigfm-peer
跨 bot 通信代理插件,安装到其它 bot 上,配合主插件 nonebot-plugin-aigf-master 使用。
📖 介绍
- 捕获输出并推送:拦截本 bot 所有插件的输出(文本/图片等),通过 HTTP 推送给主 bot(aigf-master),进入其 LLM 上下文(标注
[bot名]) - 远程插件调用:提供
/peer/invoke端点,接收主 bot 的远程命令调用,用「复制真实事件」的方式执行本 bot 的本地插件 - 命令推送:启动时扫描本 bot 已注册的命令(
on_command与 alconna 响应器都支持,主名与别名各上报一条),随推送告知主 bot,让 LLM 了解可调用命令(受白名单控制)
💿 安装
0.4.0b0 是预发布(pre-release)版本,因此:
pip install nonebot-plugin-aigfm-peer装的仍是稳定版 0.3.xnb plugin install nonebot-plugin-aigfm-peer同样只装稳定版,而且 nb-cli 不支持指定版本,所以 beta 只能用 pip 装
要装 beta,必须显式写出版本号:
pip install nonebot-plugin-aigfm-peer==0.4.0b0
在 pyproject.toml 中添加:
[tool.nonebot]
plugins = ["nonebot-plugin-aigfm-peer"]
从 0.4 起还会自动装上 nonebot-plugin-alconna 与 nonebot-plugin-uninfo。
需要装 beta 分支上尚未发版的改动时,可以直接从分支安装:
pip install git+https://github.com/Funny1Potato/nonebot-plugin-aigfm-peer.git@beta
配置
在 .env 中添加:
# 主插件(Bot A)的 HTTP 端口
AIGFM_PEER_PUSH_PORT=14514
# 共享 token(与主插件 AIGFM_PEER_BOTS 中对应项一致)
AIGFM_PEER_TOKEN="shared_secret"
# 本 bot 名称(与主插件 AIGFM_PEER_BOTS 的 name 对应)
AIGFM_PEER_BOT_NAME="botB"
# 插件白名单:捕获输出 + 命令上报 + 调用核对 共用
# 非空=只捕获/上报这些插件的命令且只允许执行它们;空=捕获所有插件输出但不上报命令、调用不核对
AIGFM_PEER_CAPTURE_PLUGINS=[]
与主插件配合
- 在主插件
.env配置AIGFM_PEER_BOTS(含本 bot 的 name/port/token) - 两端 token 必须一致
- 主插件与 peer 插件的前缀(
COMMAND_START)各自独立配置,远程调用时按各 bot 的前缀自动适配 - 同一 bot 对同一会话(群/频道/私聊)才能被远程调用:peer 侧要"见过"该会话的一条真实用户消息(用来复制事件);没见过的会话只能在 OneBot V11 上用老的兜底事件
多适配器支持
- 捕获:
Bot.on_calling_api是 NoneBot 基类钩子(所有适配器都会触发),消息体用 uniseg 解析(文本/图片/@/合并转发/小程序/XML,以及 onebot 的分享/位置/音乐/骰子/群文件等未映射段)。会话取自当前事件(uninfo 优先,回落 alconna Target),因此推送里的session是适配器:会话id - 远程调用:按主 bot 传的
session找到本侧记住的真实事件,model_copy换消息体后分发(发送者、适配器字段都来自那条真实消息)。没有可复制事件时:OneBot V11 用手搓群事件兜底(老行为),其它适配器则记一条告警后跳过(不会假装执行成功) - 本项目自身的边界:两个 bot 之间的 HTTP 通道与
session互通需要主插件 2.0.0-beta+;主插件的群系统通知(戳一戳/禁言等)仍是 OneBot 专属
可捕获的消息类型
peer 会拦截本 bot 插件的 send_msg / send_group_msg / send_private_msg(不同适配器的发送接口参数名不同,实际按「参数里带消息体」判断),捕获以下内容推送给主 bot:
| 类型 | 推送方式 |
|---|---|
| 文本(含 @、QQ 表情、语音/视频/群文件占位文案) | text 字段 |
图片(url 字段,或 file 字段为 http:// / https://) |
以 url 形式推送(image_url) |
图片(base64:// 前缀或 base64 字段) |
直接 base64 推送(image_base64) |
图片(file:// 本地路径,如 MessageSegment.image(Path(...))) |
本地读取文件转 base64 后推送(image_base64) |
| 合并转发 / 小程序卡片 / XML | 渲染成文本占位(text 字段) |
受
AIGFM_PEER_CAPTURE_PLUGINS白名单过滤;主 bot 侧再按AIGFM_CAPTURE_IMAGES决定是否对图片做 VLM 描述。
License
MIT
Release files for nonebot-plugin-aigfm-peer 0.4.0b0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nonebot_plugin_aigfm_peer-0.4.0b0.tar.gz | 17.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nonebot_plugin_aigfm_peer-0.4.0b0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.8 kB
Release files / nonebot_plugin_aigfm_peer-0.4.0b0.tar.gz
| Download URL | nonebot_plugin_aigfm_peer-0.4.0b0.tar.gz |
|---|---|
| Size | 17.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5cd00f768359c099b2a58b2ed18ddc2552bde266dcdcb688ce3284c65bf3e407
|
|
BLAKE2b-256 checksum How to use checksums |
92277c49a86061f02dde1bd37152e98cca32338a60400851fcc898acc83f7605
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / nonebot_plugin_aigfm_peer-0.4.0b0-py3-none-any.whl
| Download URL | nonebot_plugin_aigfm_peer-0.4.0b0-py3-none-any.whl |
|---|---|
| Size | 16.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a07ad149a684fd3f089809532867657afd30a3273e635806d6b13b554e3a383e
|
|
BLAKE2b-256 checksum How to use checksums |
4a87ab51ee8a7eabd6f302a2f18a37f0a54a2c11203ac19f42853b1c51c5458e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|