我有一个我正在练习的不和谐机器人,在一定时间后用dm提醒用户。我的问题是我使用time.sleep()
来处理延迟。这将阻止其他用户设置提醒,因为它正在等待前一个time.sleep()
结束。我想让多个提醒请求同时发生,而不是等到每个请求结束后才开始下一个请求。下面是我的代码。我的不和令牌托管在一个单独的.env
文件中。
# bot 2
import os
import discord
import time
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN2')
client = discord.Client()
@client.event
async def on_ready():
print(
f'{client.user} has connected to Discord!')
@client.event
async def on_message(message):
if message.author == client.user:
return
remind_me = 'You will be reminded '
if 'remindme!' in message.content.lower():
if message.content[-1] == 'h' or
message.content[-1] == 's' or
message.content[-1] == 'm':
response = remind_me + ''' + message.content[10:-3] + '' in' + message.content[-3::]
await message.channel.send(response)
else:
await message.channel.send('I don't understand.')
if message.content[-1] == 'h':
time.sleep(3600 * int(message.content[-2]))
await message.author.send('Reminder! n' + message.content[10:-3])
if message.content[-1] == 's':
time.sleep(int(message.content[-2]))
await message.author.send('Reminder! n' + message.content[10:-3])
if message.content[-1] == 'm':
time.sleep(int(message.content[-2])*60)
await message.author.send('Reminder! n' + message.content[10:-3])
client.run(TOKEN)
我知道我可以清理if
语句,所以不用担心。
用asyncio.sleep
代替time.sleep
。
import asyncio
[...]
if message.content[-1] == 'h':
asyncio.sleep(3600 * int(message.content[-2]))
await message.author.send('Reminder! n' + message.content[10:-3])
[...]