Skip to content
This repository was archived by the owner on Aug 11, 2025. It is now read-only.

maoxig/nonebot-plugin-ai-timetable

Repository files navigation

nonebot

nonebot-plugin-ai-timetable

基于Nonebot2的对接小爱课程表的插件

nonebot license pypi python

由于小爱课程表的导出链接已经较长时间无法使用,本仓库功能基本无法使用,因此归档

💿安装

  1. 通过pipnb安装;

    • 使用nb(推荐)

      在机器人目录下命令行使用nb plugin install nonebot_plugin_ai_timetable

    • 使用pip:

      pip plugin install nonebot_plugin_ai_timetable

      然后在机器人pyproject.toml里的plugins = []列表追加"nonebot_plugin_ai_timetable"

    • 使用其他包管理器:

      根据包管理器的指令安装插件

  2. 数据存储使用plugin-orm, 使用nb orm upgrade升级数据库

Warning

第一次使用plugin-orm,或者插件定义的模型有所更新时,需要用nb orm upgrade升级数据库

📖简介

  1. 傻瓜式一键导入小爱课表,让你的bot实现小爱课表的功能

  2. 用户课表数据隔离,基于plugin-rom, 接入数据库,无需担心课程时间冲突、不同学校课表不同等问题

  3. 适配多平台,即使是电报涩涩群也要好好学习!🥵🥵

⚙️插件配置

[!NOTE] 可选的插件配置 这些配置都已设好默认值,因此是可选的,如果想要修改配置,在机器人目录下的.env.*里面可以填写以下选项, 未来会考虑开放更多的配置项

config type default example usage
TIMETABLE_PIC bool true TIMETABLE_PIC=false 可选择某日课表以图片/文字发送,默认以图片发送(true)
TIMETABLE_ALOCK_SOMEDAY int 22 TIMETABLE_ALOCK_SOMEDAY=15 订阅某日课表的发送时间,必须是0-24的数字
TIMETABLE_ALOCK_8 int 21 TIMETABLE_ALOCK_8=16 订阅早八的发送时间,必须是0-24的数字.这里发送的都是第二天的,所以建议设置为18-23点
TIMETABLE_SEND_TIME float 0.5 TIMETABLE_SEND_TIME=1 订阅课程提前发送的时间,单位是小时,可以是整数也可以是小数,建议不要设的太大,避免出现无法预料的bug

💿依赖

Note

插件依赖会在安装时自动安装,如果安装失败,你可以按照以下指令手动再次安装

nb plugin install nonebot_plugin_htmlrender
nb plugin install nonebot_plugin_apscheduler
nb plugin install nonebot_plugin_alconna
nb plugin install nonebot_plugin_orm

🌙更新日志

点击展开
  • 0.4.1 / 2024-05-07:

    1. 修复定时提醒一直发送的问题
    2. 更新README.md
    3. 修复type hint错误
  • 0.4.0 / 2024-04-30:

    1. 重构完成,将所有数据迁移到官方数据库插件plugin-orm,之前的数据失效
    2. 修改了插件触发指令和相关逻辑
    3. 重构所有代码,优化处理逻辑

    该版本是破坏性更新,且仍在测试中,有任何疑问欢迎issue或pr

  • 0.3.8 / 2024-04-28:

    1. 修复设置错误
    2. 重构代码
  • 0.3.7 / 2024-04-24:

    1. 更新Nonebot2版本至2.2.0
    2. 基于 nonebot-plugin-alconna 适配多平台
    3. 放宽httpx限制,移除onebot依赖
  • 0.3.6 / 2023-09-02:

    1. 适配nonebot2.0.1版本:移除过时的RegexMatch方法

    如更新本插件后接受消息无响应,请更新你的nonebot版本或回退到旧版本使用

  • 0.3.5 / 2023-08-10:

    1. 格式化代码
    2. 优化配置读取
    3. 更新插件元数据
  • 0.3.5 / 2023-06-09:

    1. 更新httpx依赖版本
  • 0.3.3 / 2023-04-23:

    1. 修复定时提醒重复发送的bug
    2. 修改帮助
  • 0.3.2 / 2023-04-14:

    1. 删去了文本中所有奇怪的口癖喵
    2. 修复了订阅课程发送时间错误的bug
  • 0.3.0 / 2023-04-02:

    1. 修复bug
    2. 优化帮助图片
    3. 定时任务随机延后0-60s,防止风控
    4. 增加订阅指定课程的功能
  • 0.2.3 / 2023-03-29:

    1. 重构了代码,优化了许多地方真的累死了
    2. 修复了一些bug,优化了体验
    3. 增加了早八|明日早八的查询
    4. 更新版本后建议重新导入课表,避免出现某些bug
  • 0.2.1 / 2023-03-13:

    1. 修复订阅早八的一些bug
  • 0.2.0 / 2023-03-11:

    1. 修复了如果未登录小米账户就分享课表时的报错,增加错误提示
    2. 新增3项配置项,某日课表可选择以图片发送(默认为图片)
  • 0.1.8 / 2023-03-08:

    1. 修改部分代码,优化课表格式
    2. 修复了节数为11的课会排在节数为2的课程前面的bug(QAQ太蠢了别骂了别骂了)
  • 0.1.7 / 2023-03-07:

    1. 修复了时间不会自己改变的bug
    2. 新增了上课/下节课功能
    3. 优化了一些屎山代码
  • 0.1.5 / 2023-03-06:

    1. 新增了私聊订阅课表|早八的功能
  • 0.1.4 / 2023-03-05:

    1. 修复了无法取消订阅早八的bug

🎉命令

  • 课表帮助:获取本条帮助

  • 导入课表:需要有小爱课表分享出来的链接,打开小爱课程表,手动添加课程或从教务导入(已适配了大部分高校)课程后

    Image text

    在基本设置里把开始上课时间等调整好之后(尤其是时间、节数),把分享课表得到的链接发送给bot即可导入本地

Note

在分享前,你需要登录小米账户 #1

  • 更新课表;如果在小爱课程表里修改了课程,发送该条指令即可更新本地的课表,无需重新导入

  • 查询课表+[参数]:查询[参数]的课表,参数支持[本周/下周、周x、昨天/今天/明天/后天、早八、课程名、下节课]

  • 添加课程提醒+[参数]:参数支持[周x、早八、课程名]

  • 删除课程提醒+[参数]:参数支持[全部、周x、早八、课程名]

  • 查看课程提醒:查看当前已经添加的课程提醒

⭐效果图

Image text Image text Image text Image text Image text Image text Image text

😥我不知道怎么使用小爱课程表

如下图

  • 首先要登录上小米账户,否则可能获取到错误的课表信息 #1
  • 设置好开始上课时间
  • 设置好课程时间,可以修改每节课具体的时间,
  • 课表节数按自己需求调,一般教务导入的课表节数可能不符合实际,需要微调
  • 每周起始日建议默认的周一即可
  • 如果导入课表后在小爱课表内修改了课程,直接给bot发送更新课表即可更新本地课表
  • 当你主页的课表和学校课表基本一致时,那么小爱课程表就被设置好了,可以导入了

Image text

🐦计划

  • 查询下节课的信息

  • 可选择是否发送图片以避免风控

  • 增加更多的配置项

  • 重构代码

  • 订阅指定的课

  • 多平台适配, 基于 nonebot-plugin-alconna

  • 支持定时任务本地存储

  • 适配plugin-orm, 接入数据库

  • 适配更多课表、脱离小爱课表

  • 完善插件

🐛存在的问题

Note

在当前版本下,Bot重启后会失去之前创建过的任务,这个问题暂时无法解决

众所周知,使用apscheduler添加的定时任务,会在bot重启后丢失,这是因为使用nonebot-plugin-apscheduler创建出来的scheduler,默认使用的JobStore(即保存任务的方式),是MemoryJobStore,也就是存在内存中,因此会导致重启丢任务。

因此参考apscheduler,你可以在bot的配置文件中添加配置项,让nonebot-plugin-apscheduler创建出来的scheduler的默认 JobStore 改为使用数据库,这样就可以持久化存储任务,而不需要额外修改任何东西。

然而,很不幸的是,在apscheduler4.0版本之前,所支持的数据库类JobStore都是使用同步引擎的,不支持异步引擎,然而plugin-orm所采用的是异步引擎,因此你暂时还不能这样做。

所以,暂时还无法解决定时任务的持久化存储问题,除非apscheduler正式发版4.0(目前还是alpha版本),你可以再等待,本插件会持续跟进更新。

🎉致谢

✨喜欢的话就点个star吧

或者, 你也可以看我写的其他插件 nonebot-plugin-manga-translator一个支持多api(包括离线部署)、跨平台、方便好用的图片/漫画翻译插件

About

nonebot2插件,简单易上手,支持一键导入小爱课程表,查询、订阅课表

Resources

License

Stars

Watchers

Forks

Languages