添加计划任务

实际应用中还经常会有定时执行任务的需求,为了方便这类需求的开发,NoneBot 可选地包含了计划任务功能。

提示

本章的完整代码可以在 awesome-bot-6 (opens new window) 查看。

安装 scheduler 可选功能

计划任务功能在 NoneBot 中是可选功能,只有当同时安装了 APScheduler (opens new window) 时,才会启用。

使用下面命令安装可选功能(会自动安装 APScheduler):

pip install "nonebot[scheduler]"
1

安装成功之后就可以通过 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
1
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='*' 表示每小时都执行,minutesecond 不填时默认为 0,也就是说装饰器所装饰的这个函数会在每小时的第一秒被执行。

除了 cron,还有两种触发器类型 intervaldate。例如,你可以使用 nonebot.scheduler.scheduled_job('interval', minutes=10) 来每十分钟执行一次任务。

限于篇幅,这里无法给出太详细的接口介绍,nonebot.scheduler 是一个 APScheduler 的 AsyncIOScheduler 对象,因此关于它的更多使用方法,可以参考 APScheduler 的官方文档 (opens new window)