【发布时间】:2020-11-23 03:57:20
【问题描述】:
我一直在尝试让我的 Discord 机器人在每天的特定时间运行一项功能。目前,机器人可以每 24 小时执行一次操作,所以我需要做的就是让它在特定时间启动。但是,我无法弄清楚为什么我不能让它工作。我尝试了多种解决方案,使用 schedule、aioscheduler 等。我尝试了其他时候提出这个问题的解决方案,但我无法让它们中的任何一个起作用。
目前,机器人运行,并且没有抛出任何错误,但函数 roletask() 似乎从未被调用。 ((出于测试目的,Roletask 设置为每 5 秒运行一次))
编辑:通过将“datetime.hour”和“Datetime.minute”更改为“now.hour”和“now.minute”,我能够修复它。此外,由于我导入内容的方式,“Datetime.datetime(...)”需要更改为“datetime(...)”
希望这可以帮助其他人在未来遇到这个问题!
import discord
import random
import asyncio
import schedule
import threading
import time
from datetime import datetime, timedelta
from discord.ext import commands, tasks
from discord.utils import get
bot = commands.Bot(command_prefix='[]')
bot.remove_command("help")
guild = bot.get_guild(607452358544195588)
role_id = 738129548805275710
ROLE_NAME1 = "q-and-a"
ROLE_NAME2 = "tunes"
@tasks.loop(seconds=5)
async def roletask():
print("ur bad")
channel = bot.get_channel(681179611253571688)
await channel.send('<@&738129548805275710> You are part of the test role!')
@roletask.before_loop
async def before_my_task():
hour = 23
minute = 23
await bot.wait_until_ready()
now = datetime.now()
future = datetime.datetime(now.year, now.month, now.day, hour, minute)
if datetime.hour >= hour and datetime.minute > minute:
future += timedelta(days=1)
await asyncio.sleep((future-now).seconds)
roletask.start()
@bot.event
async def on_ready():
await bot.change_presence(status=discord.Status.online, activity=discord.Game('[]help'))
print('We have logged in as {0.user}'.format(bot))
【问题讨论】:
标签: python discord discord.py