使用提示:本插件不依赖用户上传课表文件。只需把
.ics课表文件放入指定文件夹,发送/绑定课表选择文件即可;文件名以用户 ID 开头时无需绑定、自动匹配。
本插件大量使用AI
- 本地文件夹课表:直接读取本地文件夹中的
.ics文件(可在插件配置中指定路径),放入新文件即刻生效,无需重载插件;也支持在绑定流程中直接上传.ics文件,下载到文件夹并自动绑定。 - 3:4 比例课表图片:今日/明日/本周/下周课表渲染为 3:4 比例的竖屏图片。画布尺寸随渲染环境自适应——兼容本地 Playwright 与远程 t2i 渲染服务的任意 viewport;内容自适应缩放,课少时字体自动放大填满画布,课多时自动缩小保证完整、不丢课程;未安装 Playwright 时自动降级为文本。
- 按周次显示课程:自动识别课表中的周次信息(如「2-16周」「4-5周,7-12周」「单周」「双周」),第 N 周只显示当周实际有课的课程;插件配置
term_start_date可设置学期开始日期(留空自动推断),周课表副标题显示「第N周」。 - 日期倒计时:设置考研、期末等日期倒计时,支持每日通知或每周通知(每周一),并显示在课表图片上。
- 调休课表映射:把某天的课调为另一天的课表(如
/设置调休 09-27=10-07),或直接设为放假;查询、推送、课前提醒全部按调休后的课表执行。 - 课前提醒:每 60 秒扫描课表,开课前
N分钟(默认 15,可配置 1-120)自动推送提醒,同一节课只提醒一次。提醒只在绑定课表的群聊中推送(私聊绑定则推送到私聊,群聊绑定则推送到对应群聊)。 - 每日定时推送:每天指定时间(如 07:00)自动推送当日课表;定时任务持久化,插件重启后自动恢复。推送只在绑定课表的群聊中生效。
- 自动匹配绑定:文件名以用户 ID 开头的课表文件(如
123456.ics)自动匹配用户,无需手动绑定。 - 示例课表:一键生成示例课表(含一节 20 分钟后开始的测试课),快速体验提醒与推送功能。
- ICS 兼容:支持重复课程(RRULE)展开、EXDATE 排除、东八区时间换算;重复事件解析失败时自动降级为单次事件,不丢课。
- AstrBot >= 4.19.4
- Python 3.9+
- 可选:Playwright 渲染环境(用于输出竖屏课表图片;未安装时自动降级为文本消息,功能不受影响)
从文件安装:在插件界面右下角点击加号,选择「从文件安装」,上传本仓库 Releases 中的 astrbot_plugin_coursebell.zip。
链接安装:在插件界面右下角点击加号,选择「从链接安装」,输入:
https://github.com/Lillna-Rina/astrbot_plugin_coursebell
依赖会按 requirements.txt 自动安装(icalendar、python-dateutil、tzdata)。
插件配置中可设置:
ics_dir:本地课表文件夹路径(支持绝对路径如D:/课表、~/开头路径,或相对 AstrBot 运行目录的路径);- 留空时使用插件数据目录下的
ics文件夹(data/plugin_data/astrbot_plugin_coursebell/ics/),直接把.ics文件放进去即可; - 文件夹无法创建或写入时会自动回退到默认目录,并在
/课表文件中显示警告。 term_start_date:学期开始日期(校历第一周周一,格式YYYY-MM-DD,如2026-08-31)。设置后插件按周次过滤课程(课表中的「2-16周」「单周」等标注生效),周课表显示「第N周」;留空时自动以课表文件中最早课程的所在周作为第一周。
常用入口:
课表绑定是按用户在特定会话中绑定的:
- 在群聊中使用
/绑定课表→ 绑定该群聊,课前提醒、每日推送、倒计时通知只会推送到该群聊 - 在私聊中使用
/绑定课表→ 绑定私聊,推送只发到私聊 - 同一个用户可以在不同群聊中绑定不同的课表文件,互不影响
/今日课表等查询命令在任何会话中都可使用(只要该用户已在某处绑定过课表)- 个人建议:只在私聊使用,群聊可能会有bug
推送不会全局广播:如果你在 A 群绑定了课表,只有 A 群会收到推送,B 群不会收到。
| 命令 | 说明 | 示例 |
|---|---|---|
/绑定课表 |
列出文件夹中的课表文件并绑定 | /绑定课表 后回复文件名 |
/绑定课表 [文件名] |
直接绑定指定文件 | /绑定课表 我的课表.ics |
/课表文件 |
查看文件夹中的所有 .ics 文件 | /课表文件 |
/删除课表 |
解除绑定(不删除本地文件) | /删除课表 |
/今日课表 |
输出今日课表 | /今日课表 |
/明日课表 |
输出明日课表 | /明日课表 |
/本周课表 |
输出本周课表 | /本周课表 |
/下周课表 |
输出下周课表 | /下周课表 |
/设置提醒时间 |
设置课前提醒提前分钟数 | /设置提醒时间 后回复 15 |
/设置每日推送 |
设置每日定时推送课表 | /设置每日推送 后回复 开启 07:00 或 关闭 |
/设置倒计时 |
设置日期倒计时(支持每日/每周通知) | /设置倒计时 考研 2026-12-26 每日 08:00 |
/倒计时 |
查看全部倒计时与剩余天数 | /倒计时 |
/删除倒计时 |
删除指定倒计时 | /删除倒计时 考研 |
/设置调休 |
把某天调为另一天的课表,或设为放假 | /设置调休 09-27=10-07、/设置调休 10-07=放假 |
/查看调休 |
查看全部调休规则 | /查看调休 |
/删除调休 |
删除某天的调休规则 | /删除调休 09-27 |
/清空调休 |
清空全部调休规则 | /清空调休 |
/查看设置 |
查看当前绑定与配置 | /查看设置 |
/示例课表 |
生成示例课表并绑定 | /示例课表 |
/课表帮助 |
查看指令列表 | /课表帮助 |
所有指令均支持简短别名:
/today、/tomorrow、/week、/nextweek、/bind、/unbind、/files、/sample、/settings、/help。
/设置倒计时 考研 2026-12-26 # 默认每日通知(08:00)
/设置倒计时 考研 2026-12-26 每周 # 每周一通知
/设置倒计时 期末 2027-01-10 每日 20:00 # 指定通知时间
/设置倒计时 考研 2026-12-26 关闭 # 只记录不通知
/倒计时 # 查看全部(含剩余天数)
/删除倒计时 考研
- 日期支持
2026-12-26、2026/12/26、12-26(只写月日时自动判断年份) - 通知任务持久化保存,插件重启后自动恢复
- 「今日课表」图片顶部会显示最近一个倒计时
- 倒计时通知只在绑定课表的群聊中推送(私聊绑定推送到私聊,群聊绑定推送到对应群聊)
/设置调休 09-27=10-07 # 9月27日按 10月7日 的课表上课(补课)
/设置调休 10-07=放假 # 10月7日放假无课
/查看调休
/删除调休 09-27
/清空调休
规则生效后:
| 场景 | 行为 |
|---|---|
| 查询 9月27日课表 | 显示 10月7日 的课程(日期平移到当天,上课时刻不变) |
| 查询 10月7日课表 | 显示「🚫 放假」,无课 |
| 每日推送 | 按调休后的课表推送;放假日推送空课表 |
| 课前提醒 | 调休日的课正常提醒;放假日不提醒 |
| 周课表 | 对应日期标注「🔄 调休」/「🚫 放假」 |
设计说明:采用单向映射 + 显式放假(而非 A↔B 双向交换)——补课日上被调那天的课、放假日休息, 符合真实调休语义,也避免了双向映射时的循环歧义。如需两天互换,分别设置两条规则即可。
- 课表文件:你指定的本地文件夹(插件只读);
- 绑定信息与设置:
data/plugin_data/astrbot_plugin_coursebell/bindings.json(插件重装/更新不会丢失); - 文件变更自动检测:每次读取前对比文件修改时间与大小,替换文件后无需任何操作即生效。
astrbot_plugin_coursebell/
├── main.py # 插件主入口(命令、提醒循环、每日推送、倒计时)
├── ics_parser.py # ICS 解析(RRULE 展开、周次过滤、EXDATE、时区换算)
├── schedule_engine.py # 课表查询、调休映射与提醒命中引擎
├── command_parsers.py # 指令参数解析(倒计时 / 调休)
├── storage.py # 绑定信息与本地文件管理
├── render_templates.py # 竖屏课表图片 HTML 模板
├── sample_ics.py # 示例课表生成器
├── course_types.py # 数据模型
├── _conf_schema.json # 配置 Schema(ics_dir、term_start_date)
├── metadata.yaml # 插件元数据
├── requirements.txt # 依赖清单
└── logo.png # 插件图标
欢迎提交 Issue 和 Pull Request。
MIT License - 详见 LICENSE。
- 课表输出为文本而不是图片:AstrBot 未安装 Playwright 渲染环境,功能不受影响;安装 Playwright 后即可获得竖屏图片。
- 文件夹中没有文件:确认
.ics文件已放入配置的文件夹(可在 WebUI 插件配置中查看路径),并发送/绑定课表。 - 示例课表失败:查看
/课表文件是否提示目录回退;插件会自动回退到数据目录并继续生成。 - 时区:插件固定按东八区(Asia/Shanghai)计算日期与提醒时间。