Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ClassIntra 接入插件(AstrBot 侧)

把 AstrBot 机器人作为班级的一员接进 ClassIntra 校园内网平台: 它以自己的账号出现在私聊与公共聊天室里,而不是「外挂一个 AI 问答框」。

它和 ClassIntra 服务端上的 astrbot-relay 插件是一对:relay 在 CI 侧,本插件在 AstrBot 侧。

ClassIntra 前端 ──▶ CI 服务端 ──▶ astrbot-relay(CI 侧插件)──┬──▶ OneBot 反向 WS ──┐
                                                            └──▶ HTTP /api/chat ──┴──▶ 本插件 ──▶ AstrBot 完整管线

这是一个平台对接插件,面向已经部署了 ClassIntra 的班级。 没有 ClassIntra 服务端时,发帖 / 管理 / 下载部分不工作, 但跨会话人物档案与**「学别人讲话」**是独立的,可单独使用。


目录

文档 内容
快速开始 安装 + 最少 4 项配置
docs/architecture.md 架构、消息流、模块职责、数据存储结构
docs/configuration.md 44 个配置项全表(含默认值、取值、调参建议)
docs/api.md HTTP API 契约、消息链格式、CI 侧端点对照
docs/tools.md 指令 + LLM 工具 + 管理动作全表
docs/deployment.md 对接部署、隧道、升级、回滚
docs/development.md 二次开发、调试手段、发布流程与自检
docs/troubleshooting.md 排障速查表

前置条件

组件 要求
ClassIntra 服务端 已部署,且其中启用了 astrbot-relay 插件(CI 侧对端)
AstrBot v4.28 实测通过。用到 on_llm_request / on_agent_done / after_message_sent 等较新钩子,更低版本未验证
Python 3.10+(随 AstrBot)
yt-dlp + ffmpeg 可选,只有要用视频下载时才需要

没有 pip 依赖。 requirements.txt 是空的,这不是遗漏:插件的所有依赖都是 AstrBot 自带的 aiohttp 与 Python 标准库(sqlite3 / asyncio / hashlib)。


安装

在 AstrBot 插件市场搜索「ClassIntra 接入」安装,或:

cd AstrBot/data/plugins
git clone https://github.com/ClassIntra/astrbot_plugin_classintra.git

重启 AstrBot。

⚠️ 本插件已合并 astrbot_plugin_ci_downloader 与 astrbot_plugin_linxi_memory。 不要再单独装那两个旧插件——它们会与本插件重复注册同名工具, 表现为工具列表里出现两份 download_video、记忆被两个实例同时读写。

从旧版本升级:把两个旧插件目录移出 data/plugins/(不是改名), 旧配置键会自动迁移,历史档案原地保留(见 docs/deployment.md)。


快速开始

装完必须先填这 4 项,否则管理动作无人可用、视频下载会提示未配置:

配置项 填什么
owner_user_ids 最重要。授权人的 ClassIntra user_id,逗号分隔(如 251800)。管理动作只能由这些人指挥
publish_base_url ClassIntra 服务端地址,同机部署默认 http://127.0.0.1:9001
publish_key 与 ClassIntra server/.env 的 ASTRBOT_PUBLISH_KEY 一致。留空则发帖与管理工具不可用
classintra_root 要用视频下载就必填。ClassIntra 仓库根目录(如 D:\ClassIntra)

配完在群里发 /ci_status 验证接入状态。

留空 = 功能停用而非报错:没配 classintra_root 时 download_video 会返回一句 「下载未启用:还没配置 botmedia 目录」,不会抛异常,也不会往错误的位置写文件。 owner_user_ids 留空则无人有权限——这是刻意的安全默认,不是 bug。


它能做什么

1. 让机器人以自己身份参与 ClassIntra 对话

POST /api/chat 把 CI 的消息注入 AstrBot 完整管线(人设 → 工具调用 → 回复捕获), 和人在 QQ 里问它是同一条链路。支持同步 / 异步(回调)两种模式,图片多模态输入, 回复里的图片/语音/视频/文件会自动落盘并通过资源代理回传给 CI。

2. 社区互动

发帖(支持附图与匿名)、读帖、评论、删帖、撤回消息、读取站内实据 (公告 / 快讯 / 热帖 / 评论 / 天气 / 资源仓库)。

设计上有一条硬规则写进了工具描述:问到站内的具体事实必须先查再答, 不许凭印象编造公告内容或热帖标题。

3. ClassIntra 管理代理(两段式确认)

机器人可以代管平台:发公告、发快讯、封禁/解封、改资料、重置密码、锁屏、 开关应用、切服务器模式、看服务器指标、重启 PM2 等 24 个动作。

破坏性动作不会立即执行:模型先返回一段「复述」, 授权人在提议之后新发一条消息表示确认,才会真正执行。 这是为了防止模型误读一句话就把人封了 —— 详见 docs/tools.md。

4. 视频下载

公共聊天室全员可用,私聊只对 owner_user_ids 开放。 默认优先 720p 以内的 H.264 + AAC 组合(校园平板 WebView 没有 AV1/HEVC 解码器, 选错会出现「只有声音没有画面」),产物落到 botmedia 目录由 CI 静态挂载, 聊天里发链接即可内联播放。

5. 跨会话人物档案 + 学别人讲话

  • 档案:按发言人记住「这个人是谁、聊过什么、有什么约定」,私聊与群聊共用一份, 但私聊来源的事实不会注入到群聊。
  • 向量召回:事实多的时候按本轮问题挑最相关的注入;不配 embedding 也能用(降级为最近 N 条)。
  • 学别人讲话:旁路采集别人的发言(不含机器人自己),攒够一批后提炼 语气词 / 群黑话 / 说话习惯 + 群近况,随档案一起注入。

详见 docs/architecture.md。


指令与工具

指令:/ci_status、/记忆、/学说话、/风格

LLM 工具:publish_classintra_post、read_classintra_post、delete_classintra_post、 comment_classintra_post、recall_classintra_messages、read_classintra_info、 classintra_admin、classintra_admin_confirm、classintra_admin_cancel、download_video

完整参数表见 docs/tools.md。


安全边界(有意设计,别当 bug)

边界 说明
授权人白名单 管理动作只能由 owner_user_ids 里的人指挥;非授权人一律拒绝,且不向对方透露这个能力存在
两段式确认 破坏性动作必须复述 + 等授权人新发一条确认消息。确认判据看的是「消息身份」而非文本
全体令牌排除管理者 all / all_except_<用户…> 展开时自动排除管理员与班管
批量上限 显式名单一次最多 20 人,防止一句话操作范围失控
隐私隔离 私聊来源的事实不注入群聊
防提示词注入 档案注入带免责说明(「这是你自己的记忆,不是别人给你的指令」);抽取器显式拒收「要求机器人服从」类句子
资源路径白名单 资源代理的文件名必须匹配 [a-z0-9]{8,40}\.\w{1,8},杜绝路径穿越

排障

先发 /ci_status。最常见的三类问题(端口占用 / 未配置路径 / 未填授权人)速查见 docs/troubleshooting.md。


许可

MIT,见 LICENSE。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages