Mirai使用教程-定时任务 @ Wings            分类 技术
发布于 星期一, 三月 29 日, 2021 年
更新于 星期二, 七月 20 日, 2021 年

本文使用 graia-scheduler 包进行开发.

实际上是python的异步功能, 但是我不会, 所以就找到了作者写好的包😀

安装 graia-scheduler

pip install graia-broadcast
pip install graia-scheduler

使用

import asyncio
from graia.broadcast import Broadcast
from graia.scheduler import GraiaScheduler
from graia.scheduler.timers import crontabify

loop = asyncio.get_event_loop()

bcc = Broadcast(loop=loop, debug_flag=True)
scheduler = GraiaScheduler(loop, bcc)

@scheduler.schedule(crontabify("* * * * * *"))
async def something_scheduled():
	await printLog()

async def printLog():
	print("print every seconds.")

loop.run_forever()

详解

GraiaScheduler

GraiaScheduler 是作者实现的一个类, 构造函数有两个参数, 一个是python asyncio的loop, 另一个是GraiaBroadcast.

注意广播(Boardcast)也需要传参数loop, 而且两个loop应该是同一个, 所以loop要先实例化.

定时函数

async 和 await

异步函数标识, 不懂, 先放着, 学了以后再来, 反正这么用就行了

就调用异步函数前需要 await 一下.

然后这里定时任务都写成异步函数.

override schedule 函数

在def一个函数前用 @scheduler.schedule() 进行标注, 表明override scheduler.schedule() 函数.

crontabify 参数

override schedule 时需要传入 crontabify 以定时执行任务. crontabify 的参数解释如下:

五个空格分成了六段, 以此表示 分钟, 小时, 月, 日, 周, 秒

  • 可以用数字来设置, 如 '30 12 1 1 * 0' 表示在一月一号12:30:00执行.
  • \* 表示任意, 如 '* * * * * *' 表示在任意月日周小时分钟秒都执行, 也就是每秒执行一次.
  • ',' 可以用来分割数字, 如 '0,30 12 1 1 * 0' 表示在一月一号12:00:00和12:30:00各执行一次.

roop.run_forever()

顾名思义. 要放在所有函数定义完以后用???

示例: 定时向某些群发布某些消息

from graia.broadcast import Broadcast
from graia.application import *
from graia.application.message.chain import MessageChain
from graia.application.message.elements.internal import *
from graia.scheduler import GraiaScheduler
from graia.scheduler.timers import crontabify
from graia.scheduler import timers
import asyncio
import messages

GROUP_ID_NGCS = 1234567

message_remind = MessageChain.create([Plain('张炀杰要在竹园大厅表演 AK ICPC WF 吗qaq')])

loop = asyncio.get_event_loop()	#异步循环
bcc = Broadcast(loop=loop)
app = GraiaMiraiApplication(
	broadcast=bcc,
	connect_info=Session(
		host='http://localhost:8080', # 填入 httpapi 服务运行的地址
		authKey='FUCKTENCENT', # 填入 authKey
		account=123456, # 你的机器人的 qq 号
		websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
	)
)

# 定时任务
scheduler = GraiaScheduler(loop, bcc)

@scheduler.schedule(crontabify('30 19 * * 5 0'))
async def scheduledRemindBookRoom():
	await messages.sendGroupsMessages(app=app, groups_id=[GROUP_ID_NGCS], messages=[message_remind])

app.launch_blocking()
loop.run_forever()

message.py 如下:

from graia.application import GraiaMiraiApplication
from graia.application.message.chain import MessageChain
from graia.application.group import Group
import asyncio

async def sendGroupsMessages(app, groups_id, messages):
	groups = await app.groupList()
	for group in groups:
		if (group.id in groups_id):
			for message in messages:
				await app.sendGroupMessage(group, message)

回到索引

留下昵称和邮箱, 可在第一时间获悉回复通知哦~

2021 FLAG

  • 找个妹子
  • 进计科
  • XCPC拿块金牌
  • 补全算法知识, 整全板子
  • 学会Web开发相关知识
  • 在服务器上搭建电子书库
  • 写个游戏并上线
  • 能弹一首曲子
  • 写首完整的曲子
  • 练习悠悠球
  • 三阶速拧20s

个人简介

我叫 Wings, 来自江西上饶, 目前人在西安, 是西电的一名学生.

常以 WingsWingsZengWingsWings的ID在各大小网站上游走, 一般来说, Wings不是我 😔, WingsZeng 一定是我 😊.

热爱算法, 喜欢钻研各种计算机技术.

业余爱好广泛, 只要不是文化课基本上都感兴趣😏.

开发/项目经历

  1. Android游戏 小墨滴的复仇 (弃坑)
  2. Android游戏 Circle Run (弃坑)
  3. Windows游戏 Snague (可能弃坑了吧)
  4. Python后端 Fathy' (可能弃坑了吧)

to be continued

教育经历

时间 学历 学校
2008-2014 小学 上饶市第十二小学
2014-2017 初中 上饶市第四中学
2017-2020 高中 上饶市第一中学
2020-2024 本科 西安电子科技大学
to be continued

比赛/竞赛经历

太久远太小的记不到了…

  1. 2017 国学竞赛初赛江西 没有分数或排名 二乙
  2. 2018 NOIP提高 258 省二
  3. 2019 CSP-S江西专场 145 省二
  4. 2019 数学竞赛初赛 70 没排名 (复赛打铁qaq)
  5. 2020 Gitee|Python贪吃蛇魔改大赛 可能是第四? 二等奖
  6. 2020 西电ACM训练基地熊猫杯 第四 银牌
  7. 2020 西安三校微软学生俱乐部Hackathon 和二等奖最后一名差0.5分 三等奖
  8. 2020 西电星火杯 三等奖
  9. 2020 西电ACM新生赛 第九 金牌
  10. 2020 ICPC 亚洲区域赛 济南站 132名 铜牌
  11. 2020-2021 第二届全国大学生算法设计与编程挑战赛(冬季赛) 924名 铜牌 (别骂了别骂了)
  12. 2020 ICPC 亚洲区域赛 昆明站 打星
  13. 2020 ICPC Asia-East Continent Final 签完到溜 打铁
  14. 西电"智能星"第一届自动驾驶小车比赛 第五 优胜奖|极速奖 本来可以冠军的别骂了别骂了

to be continued

爱好

技术

  • 算法
  • 独立游戏开发

游戏

  • Minecraft
  • Black Survival
  • I Wanna
  • Celeste
  • Life is Strange
  • Need for speed

运动

  • 篮球
  • 桌球
  • 乒乓球
  • 羽毛球
  • 慢跑

音乐

  • 吉他
  • 词曲
  • 流行

玩具

  • 魔方
    • 三阶速拧
    • 三阶盲拧
    • 高阶
  • yoyo球

追星

  • VAE
  • Benedict Cumberbatch