mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-12-01 09:34:46 +08:00
2.4 KiB
2.4 KiB
添加计划任务
实际应用中还经常会有定时执行任务的需求,为了方便这类需求的开发,NoneBot 可选地包含了计划任务功能。
::: tip 提示 本章的完整代码可以在 awesome-bot-6 查看。 :::
安装 scheduler
可选功能
计划任务功能在 NoneBot 中是可选功能,只有当同时安装了 APScheduler 时,才会启用。
使用下面命令安装可选功能(会自动安装 APScheduler):
pip install none-bot[scheduler]
安装成功之后就可以通过 none.scheduler
访问 AsyncIOScheduler
对象。
定时发送消息
这里以一个整点报时的功能为例,来介绍定时任务的使用。
新建文件 awesome/plugins/scheduler.py
,编写代码如下:
from datetime import datetime
import none
import pytz
from aiocqhttp.exceptions import Error as CQHttpError
@none.scheduler.scheduled_job('cron', hour='*')
async def _():
bot = none.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
这里最主要的就是第 8 行,none.scheduler.scheduled_job()
是一个装饰器,第一个参数是触发器类型(这里是 cron
,表示使用 Cron 类型的触发参数)。这里 hour='*'
表示每小时都执行,minute
和 second
不填时默认为 0
,也就是说装饰器所装饰的这个函数会在每小时的第一秒被执行。
除了 cron
,还有两种触发器类型 interval
和 date
。例如,你可以使用 none.scheduler.scheduled_job('interval', minutes=10)
来每十分钟执行一次任务。
限于篇幅,这里无法给出太详细的接口介绍,none.scheduler
是一个 APScheduler 的 AsyncIOScheduler
对象,因此关于它的更多使用方法,可以参考 APScheduler 的官方文档。