Skip to content

上架插件:老师消息通知 (com.jingh.teacher-notifier) - #208

Open
jinghengsun wants to merge 3 commits into
ClassIsland:mainfrom
jinghengsun:add-com.jingh.teacher-notifier
Open

jinghengsun wants to merge 3 commits into
ClassIsland:mainfrom
jinghengsun:add-com.jingh.teacher-notifier

Conversation

@jinghengsun

@jinghengsun jinghengsun commented Oct 3, 2026 •

Copy link
Copy Markdown

插件信息

项 值
插件 ID com.jingh.teacher-notifier
插件名称 老师消息通知
作者 洋葱Onions
版本 1.2.0.0
最低插件加载器版本 2.0.0.0(实测 ClassIsland 2.0.4+)
仓库 https://github.com/jinghengsun/TeacherNotifier
许可证 MIT
支持平台 Windows

插件简介

通过 NapCat 或 SnowLuma 接收老师 QQ 消息,并在 ClassIsland 上以提醒方式通知。适用于教室电脑挂 ClassIsland、机器人小号接收老师通知的场景。

  • 双连接模式:HTTP POST 上报 / 反向 WebSocket,设置界面一键切换,改完自动重载监听,无需重启 ClassIsland。
  • Token 鉴权:HTTP 模式校验 x-signature(HMAC-SHA1),WebSocket 模式校验 Authorization: Bearer <token>。
  • 白名单过滤:老师 QQ 白名单、群号白名单,留空表示不限制。
  • 备注显示:{name} 优先显示机器人给老师留的备注,解析链为 手动映射 → 好友列表备注 → 群名片 → 陌生人信息 → 昵称。
  • 自定义通知:标题模板、正文滚动重复次数、显示时长、语音朗读开关与模板。

本次改动

新增 index/plugins-v2/com.jingh.teacher-notifier.yml,清单包含 repoOwner / repoName / assetsRoot / artifactName 等插件市场所需字段。

插件包已在仓库 Release 1.2.0.0 发布,Release 说明中已按规范附带 MD5 校验信息。

版本兼容性说明

插件用 ClassIsland.PluginSdk 2.0.4 编译,Avalonia 引用锁在 11.3.13,因此 apiVersion 声明为 2.0.0.0。

之所以按较低的 2.0.4 而不是最新的 2.1.x 编译:.NET 的程序集绑定要求「运行时版本 ≥ 引用版本」,而 ClassIsland 2.0.4 与 2.1.x 提供的依赖版本并不相同(Avalonia 11.3.13 vs 11.3.17、DI/Logging 抽象 8.0.0.0 vs 10.0.0.0)。同一个构建在数学上无法同时满足两边,按 2.0.4 编译可以覆盖 2.0.x 与 2.1.x 两个分支。

已实测:

ClassIsland 版本 结果
2.0.4.0 加载成功,提醒提供方注册,监听启动
2.1.0.1 加载成功,无回退

1.1.0.0 起修复的问题

1. HTTP 上报鉴权算法错误(会导致完全收不到消息)

原实现按 SHA1(token + body) 计算 x-signature,而 NapCat(http-client.ts)与 SnowLuma(http-post-adapter.ts)用的都是 HMAC-SHA1(key = token, data = body)。只要框架侧配置了 access token,签名校验必然失败、上报被 401 拒绝。现已与两个框架的实现一致。

2. 备注获取不到

原实现调用 get_stranger_info,该接口按官方描述是「获取指定非好友用户的信息」,对好友经常返回空备注。现改为从 get_friend_list 读取好友备注,并按 手动映射 → 好友列表 → 群名片 → 陌生人信息 → 昵称 逐级回退。

3. 其他修复

  • 事件 JSON 中 card 等字段为 null 时不再抛异常导致整条消息被丢弃;
  • 查不到备注时不再把空结果写入缓存(此前该 QQ 的备注将永远不再重试),备注缓存 30 分钟、好友列表缓存 10 分钟;
  • 检查 OneBot 的 status / retcode,API 失败不再被静默吞掉;
  • 修复设置页缺少公共构造函数导致的 Avalonia 告警 AVLN3001。

4. 新增 SnowLuma 支持

已核对 SnowLuma 的 OneBot 11 实现与 NapCat 契约一致(同样的 HMAC-SHA1 上报签名、同样的反向 WS Authorization: Bearer 握手),两个框架均可直接使用。同时识别 SnowLuma 的 post_type: message_sent,正确忽略机器人自己发送的消息。

验证方式

  • 使用 ClassIsland.PluginIndexGenerator 1.1.1.0 以 -v true 在本地校验,插件条目生成成功,DownloadMd5 与实际资产 MD5 一致(8b1a403cd6238c85d21cdd9cac04e6a2)。
  • 使用端到端测试台(真实 HttpListener + 模拟 OneBot HTTP API)验证 20 项行为,全部通过,覆盖:正确 HMAC-SHA1 签名被接受、旧的错误签名被 401 拒绝、好友备注优先、昵称/群名片回退、card: null 不丢消息、自消息过滤、空结果不缓存。
  • 在真实 ClassIsland 2.0.4.0 与 2.1.0.1 两个实例上分别加载成功。

自查

  • 插件内容符合相关法律法规
  • 插件为开源项目,使用 MIT 许可证
  • 代码存储库托管于 GitHub
  • Release Tag 符合 a.b.c.d 格式(1.2.0.0)
  • Release 中包含 .cipx 插件包资产,且包内 manifest 与索引清单一致
  • 已使用 ClassIsland.PluginIndexGenerator 在本地校验通过
  • 已在真实 ClassIsland 实例(2.0.4.0 / 2.1.0.1)上验证插件可正常加载

@jinghengsun
jinghengsun force-pushed the add-com.jingh.teacher-notifier branch from fd973c6 to 600a7d1 Compare October 3, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant