Python Discord.py `time.sleep()` coroutine


import discord
import os
import random
import time
import math

client = discord.Client()
with open('admins.conf', 'r') as f:
for line in f.readlines():
exec(line)
with open('bans.conf', 'r') as f:
for line in f.readlines():
exec(line)
with open('coins.conf', 'r') as f:
for line in f.readlines():
exec(line)
random.seed(os.urandom(32))
searchusers = []
@client.event
async def on_ready():
'''Notification on ready.'''
print('Logged in! Bot running.')
await client.change_presence(activity=discord.Game(name='/help'))
def getcoins(uid):
'''Get the amount of coins, if nonexistent set to 0.'''
try:
return coins[uid][0]
except Exception:
coins[uid] = [0, time.time()+20]
return 0
def mention_to_uid(mention):
'''Extract UID from a mention'''
uid = mention[2:-1]
if uid[0] == '!':
uid = uid[1:]
return uid
def setcoins(uid, value):
'''Set the amount of coins someone has.'''
try:
coins[uid][0] = value
except Exception:
coins[uid] = [value, time.time()+20]
with open('coins.conf','w') as f:
f.write('coins = '+repr(coins))
@client.event
async def on_message(message):
'''Main bot code running on message.'''
if message.author == client.user:
return
if message.author.id in bans:
return
if message.content.startswith('/') or message.content.startswith('&'):
user = message.author.id
text = message.content[1:].strip()
command = text.split(' ')[0]
subcommand = text.split(' ')[1:]
if message.author.id in searchusers:
await message.channel.send('<@'+str(message.author.id)+'>, you cannot use bot commands while you are searching.')
return
-------------------- snip --------------------
if command == 'search':
await message.channel.send('<@'+str(user)+'>, you have begun searching! It will take 2 minutes.')
searchusers.append(user)
time.sleep(59.99)
await message.channel.send('<@'+str(user)+'>, there is 1 minute left.')
time.sleep(39.99)
await message.channel.send('<@'+str(user)+'>, there are 20 seconds left!')
time.sleep(14.99)
await message.channel.send('<@'+str(user)+'>, there are 5 seconds left!')
time.sleep(4.99)
found = random.randint(50, 120)
await message.channel.send('<@'+str(user)+'>, you are done searching! You found '+str(found)+' coins!')
setcoins(user, getcoins(user)+found)
searchusers.remove(user)

在time.sleep((事件期间,其他bot命令在sleep函数通过之前不会注册。例如,在执行/搜索后立即执行/help之类的命令,机器人直到一分钟后才会响应,此时它将响应/help,并在还剩1分钟时发送消息。我试过在每个睡眠函数之前都坚持"等待",但它只是向我发出运行时警告并停止执行(它只是说你开始搜索,然后什么都没发生(。

time.sleep()停止整个程序的执行。如果您只想延迟一个异步响应线程,请使用asyncio.sleep

示例:

import asyncio
async def wait():
await asyncio.sleep(5)
print('I waited 5 seconds')

最新更新