python - 如何让机器人每天在 discord.py 中的特定时间运行定义的功能?
问题描述
我希望机器人每天运行定义的功能。我做了一些研究,然后我可以写这个:
def job():
print("task")
schedule.every().day.at("11:58").do(job)
while True:
schedule.run_pending()
time.sleep(1)
但是这段代码阻塞了所有其他功能,所以我从其他堆栈溢出答案中做了更多研究,然后我可以写这个:
def job():
print('hi task')
def threaded(func):
job_thread = threading.Thread(target=func)
job_thread.start()
if __name__=="__main__":
schedule.every().day.at("12:06").do(threaded,job)
while True:
schedule.run_pending()
不幸的是,这也阻止了我的整个代码。我需要一些不会阻止我的代码其他部分的东西。怎么做?
解决方案
您可以使用 asyncio 轻松设置它
def job():
print("task")
schedule.every().day.at("11:58").do(job)
async def task():
while True:
schedule.run_pending()
await asyncio.sleep(1)
而且你不应该忘记添加client.loop.create_task(task())
你的 on_ready 事件:
@client.event
async def on_ready():
client.loop.create_task(task())
推荐阅读
- arrays - 单行显示路径的数组
- ios - 是否可以在 SwiftUI 渐变中为颜色添加“权重”?
- javascript - Discord.js V(12) messageReactionAdd 监听器不工作
- go - 外键违规是否应该是客户端错误,如果是,应该如何处理?
- firebase - 使用 Firebase Cloud Function 的 POST 请求发送 SMS
- kotlin - Kotlin 版本中的“M”是什么意思?
- python - 如何将函数应用于列表中的每个元素,然后制作输出列表?
- python - 在列表中查找不共享元素(没有任何重叠)的 3 元素集组
- css - React Native - 如何重叠边距?
- javascript - 使多个 javascript 函数在同一个 HTML 页面上工作