mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-12-18 17:35:46 +08:00
5.2 KiB
5.2 KiB
计划任务
NoneBot 可选地内置了计划任务功能,在指南的 添加计划任务 已经进行了简单的介绍。这里列出更多常见的用法。
固定的计划任务
可以利用固定的触发器(trigger)来触发某些任务。
一次性任务
date
触发器 固定时间触发,仅触发一次:
from datetime import datetime
@nonebot.scheduler.scheduled_job(
'date',
run_date=datetime(2021, 1, 1, 0, 0),
# timezone=None,
)
async def _():
await bot.send_group_msg(group_id=123456,
message="2021,新年快乐!")
定期任务
cron
触发器 从 start_date
开始到 end_date
结束,根据类似 Cron 的规则触发任务:
@nonebot.scheduler.scheduled_job(
'cron',
# year=None,
# month=None,
# day=None,
# week=None,
day_of_week="mon,tue,wed,thu,fri",
hour=7,
# minute=None,
# second=None,
# start_date=None,
# end_date=None,
# timezone=None,
)
async def _():
await bot.send_group_msg(group_id=123456,
message="起床啦!")
间隔任务
interval
触发器 从 start_date
开始,每间隔一段时间触发,到 end_date
结束:
@nonebot.scheduler.scheduled_job(
'interval',
# weeks=0,
# days=0,
# hours=0,
minutes=5,
# seconds=0,
# start_date=time.now(),
# end_date=None,
)
async def _():
has_new_item = check_new_item()
if has_new_item:
await bot.send_group_msg(group_id=123456,
message="XX有更新啦!")
动态的计划任务
有时,我们需要机器人在运行的过程中,添加或删除计划任务,那么我们就需要 scheduler.add_job
来帮忙。这里,我们以一次性任务为例,其他类型的任务可以用相同的方法:
import datetime
from apscheduler.triggers.date import DateTrigger # 一次性触发器
# from apscheduler.triggers.cron import CronTrigger # 定期触发器
# from apscheduler.triggers.interval import IntervalTrigger # 间隔触发器
from nonebot import on_command, scheduler
@on_command('赖床')
async def _(session: CommandSession):
await session.send('我会在5分钟后再喊你')
# 制作一个“5分钟后”触发器
delta = datetime.timedelta(minutes=5)
trigger = DateTrigger(
run_date=datetime.datetime.now() + delta
)
# 添加任务
scheduler.add_job(
func=session.send, # 要添加任务的函数,不要带参数
trigger=trigger, # 触发器
args=('不要再赖床啦!',), # 函数的参数列表,注意:只有一个值时,不能省略末尾的逗号
# kwargs=None,
misfire_grace_time=60, # 允许的误差时间,建议不要省略
# jobstore='default', # 任务储存库,在下一小节中说明
)