python - 超时不适用于 Wait_For_Message Discord PY
问题描述
wait_for_message 的超时不起作用。我什至尝试使用timeout = time.time() + 60*15
elif time.time() > timeout:
而不是,elif guess is None:
它仍然不会在 15 分钟后超时。我想如果while循环被打破winner = guess.author
,它会超时并发送消息并将另一个消息发送safe_loop
到通道。有人有建议吗?
async def safe_loop():
await client.wait_until_ready()
channel = client.get_channel("538211206066995230")
while not client.is_closed:
x = client.get_all_members()
for member in x:
reset_guessesTaken(member, 0)
answer1 = random.randint(10, 99)
answer2 = random.randint(10, 99)
answer3 = random.randint(10, 99)
answer4 = random.randint(10, 99)
answer5 = random.randint(10, 99)
safedollars = random.randint(150, 300)
safetokens = random.randint(50, 100)
winner = ''
await client.send_message(channel, " CRACK THE SAFE \n {}, {}, {}, {}, ?\nWhat is the last number?".format(answer1, answer2, answer3, answer4))
print(answer5)
def guess_check(m):
return m.content.isdigit()
while winner == '':
guess = await client.wait_for_message(timeout=900, channel=channel, check=guess_check)
if get_guessesTaken(guess.author) == 5:
await client.send_message(channel, '{} you have already guessed 5 times! Try again in 15 minutes '.format(guess.author.mention))
elif int(guess.content) == answer5:
await client.send_message(channel, '{} cracks the safe and finds ${} and {} tokens inside! \nCheck back in 15 minutes to crack a new safe'.format(guess.author.mention, safedollars, safetokens))
add_dollars(guess.author, safedollars)
add_tokens(guess.author, safetokens)
for member in x:
reset_guessesTaken(member, 0)
winner = guess.author
elif get_guessesTaken(guess.author) < 5 and int(guess.content) > answer5:
add_guessesTaken(guess.author, 1)
await client.send_message(channel, 'That number is too high {}, try again '.format(guess.author.mention))
elif get_guessesTaken(guess.author) < 5 and int(guess.content) < answer5:
add_guessesTaken(guess.author, 1)
await client.send_message(channel, 'That guess is incorrect {}, try again '.format(guess.author.mention))
else:
if guess is None:
winner = guess.author
await client.send_message(channel, 'No one cracked the safe, the number was {}\nCheck back in 15 minutes for a new safe'.format(answer5))
for member in x:
reset_guessesTaken(member, 0)
await asyncio.sleep(450)
await client.send_message(channel, "7 more minutes until a new safe to crack ⏰")
await asyncio.sleep(450)
client.loop.create_task(safe_loop())
解决方案
你不能真的做elif int(guess.content) == answer5:
或者winner = guess.author
如果guess
是None
(如果消息超时,这就是Client.wait_for_message返回的 内容
在检查其他所有内容之前,您必须检查消息是否超时而没有任何人猜测
while winner == '':
guess = await client.wait_for_message(timeout=900, channel=channel, check=guess_check)
if guess is None:
#winner = guess.author #guess = None so you're trying to do None.author which doesn't work
await client.send_message(channel,
'No one cracked the safe, the number was {}\nCheck back in 15 minutes for a new safe'.format(
answer5))
for member in x:
reset_guessesTaken(member, 0)
elif get_guessesTaken(guess.author) == 5:
await client.send_message(channel, '{} you have already guessed 5 times! Try again in 15 minutes '.format(guess.author.mention))
#etc...
推荐阅读
- python - 如何将列表循环到 loc、isin 和 sum 函数中
- blueprism - 当我们从 BluePrism 工具调用 http 请求时,未将对象引用设置为对象的实例
- python - 查找列表中第 k 个最大的元素
- entity-framework - 具有不同名称的实体框架查询表
- postgresql - 如何修复konga_db
- angular - 如何为多个按钮创建 Angular 2+ 切换?
- python - 如何从列表中选择一个随机值?
- google-bigquery - Talend BigQuery - SQL
- python-3.x - 如何修复 Colaboratory 中的 zipfile 读取错误?
- android - 无法使用 com.android.billingclient:billing 获取 SkuDetail