Skip to main content

添加计划任务

miraicle 提供了计划任务的功能,可以让 bot 定时执行任务。本节我们来编写一个功能,让 bot 每天早上 8:30 准时向你说“早上好”。

plugin 目录下新建 morning.py 文件:

miraicle-example├── config│   ├── group_switch.json│   └── blacklist.json├── database│   └── word_cloud.db├── plugins│   ├── __init__.py│   ├── repeat.py│   ├── hello.py│   ├── word_cloud.py│   ├── morning.py│   ├── group_switch.py│   └── blacklist.py└── bot.py

编写代码如下,把 my_qq 改为你的 QQ 号。

morning.py
import miraicle

my_qq = 987654321           # 你的 QQ 号

@miraicle.scheduled_job(miraicle.Scheduler.every().day.at('8:30'))def morning(bot: miraicle.Mirai):    bot.send_friend_msg(qq=my_qq, msg='早上好')

并把这个文件加入到 __init__.py

__init__.py
__all__ = ['hello', 'repeat', 'word_cloud', 'group_switch', 'blacklist', 'morning']

这个功能就完成了。注意到,和此前我们编写的插件相比,morning 函数缺少了 msg 参数。这样写的原因也显而易见,因为它不是由消息触发,而是由时间触发了。

更多用法如下:

@miraicle.scheduled_job(miraicle.Scheduler.every().second)                  # 每秒触发一次@miraicle.scheduled_job(miraicle.Scheduler.every(10).seconds)               # 每隔 10s 触发一次@miraicle.scheduled_job(miraicle.Scheduler.every(30).minutes)               # 每隔 30min 触发一次@miraicle.scheduled_job(miraicle.Scheduler.every().minute.at('::30'))       # 每分钟的 30s 触发 @miraicle.scheduled_job(miraicle.Scheduler.every().hour.at(':12:34'))       # 每小时的 12min 34s 触发@miraicle.scheduled_job(miraicle.Scheduler.every().day.at('20'))            # 每天 20 时触发@miraicle.scheduled_job(miraicle.Scheduler.every().sunday.at('11:45:14'))   # 每个星期天的 11:45:14 触发

你也可以把几个装饰器作用于同一个函数,该任务在这几个时间点均会触发。