首页 > 解决方案 > 如何让机器人每天在 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()

不幸的是,这也阻止了我的整个代码。我需要一些不会阻止我的代码其他部分的东西。怎么做?

标签: pythondiscorddiscord.pyschedule

解决方案


您可以使用 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())

推荐阅读