添加计划任务
实际应用中还经常会有定时执行任务的需求,为了方便这类需求的开发,NoneBot 可选地包含了计划任务功能。
提示
本章的完整代码可以在 awesome-bot-6 (opens new window) 查看。
安装 scheduler 可选功能
计划任务功能在 NoneBot 中是可选功能,只有当同时安装了 APScheduler (opens new window) 时,才会启用。
使用下面命令安装可选功能(会自动安装 APScheduler):
pip install "nonebot[scheduler]"
安装成功之后就可以通过 nonebot.scheduler 访问 AsyncIOScheduler (opens new window) 对象。
定时发送消息
这里以一个整点报时的功能为例,来介绍定时任务的使用。
新建文件 awesome/plugins/scheduler.py,编写代码如下:
from datetime import datetime
import nonebot
import pytz
from aiocqhttp.exceptions import Error as CQHttpError
@nonebot.scheduler.scheduled_job('cron', hour='*')
async def _():
bot = nonebot.get_bot()
now = datetime.now(pytz.timezone('Asia/Shanghai'))
try:
await bot.send_group_msg(group_id=672076603,
message=f'现在{now.hour}点整啦!')
except CQHttpError:
pass
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
这里最主要的就是第 8 行,nonebot.scheduler.scheduled_job() 是一个装饰器,第一个参数是触发器类型(这里是 cron,表示使用 Cron (opens new window) 类型的触发参数)。这里 hour='*' 表示每小时都执行,minute 和 second 不填时默认为 0,也就是说装饰器所装饰的这个函数会在每小时的第一秒被执行。
除了 cron,还有两种触发器类型 interval 和 date。例如,你可以使用 nonebot.scheduler.scheduled_job('interval', minutes=10) 来每十分钟执行一次任务。
限于篇幅,这里无法给出太详细的接口介绍,nonebot.scheduler 是一个 APScheduler 的 AsyncIOScheduler 对象,因此关于它的更多使用方法,可以参考 APScheduler 的官方文档 (opens new window)。
← OneBot 事件和 API 编写使用帮助 →