Я пытаюсь создать команду для брака для Discord Bot (не спрашивайте меня, почему), и я не могу понять, как заставить его отсчитывать 30 секунд, чтобы получить информацию от упомянутого человека.Обобщение того, что я хочу:
Пользователь вводит! Чат в чате и упоминает о человеке, за которого он хочет "жениться".
Команда больше не может использоваться кем-либо еще, пока не будет инициированаТаймер 30 секунд заканчивается.
Упомянутое лицо должно либо набрать «y», либо «n», чтобы принять предложение, либо отклонить его в течение 30 секунд. Обратный отсчет.
Если указанное лицо выполнит одно из следующих действий:после этого обратный отсчет прекратится, появится сообщение, и команда снова станет доступной.
Если указанный человек не ответит в течение этих 30 секунд, появится сообщение и команда пригодна для использования.
Я уже справился с большей частью этого, но я все еще новичок в Python, и я просто не могу заставить это работать, и я чувствую, что написанный мной код утомителен и небрежен.Вот оно:
import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time
Client = discord.Client()
client = commands.Bot(command_prefix="!")
@client.event
async def on_message(message):
author = message.author.mention
user_mentioned = message.mentions
if message.content == '!marriage':
await client.send_message(message.channel, author + " you must tag another user!")
if message.content.startswith('!marriage '):
if message.channel.name == "restricted-area":
if len(user_mentioned) == 1:
if message.mentions[0].mention == author:
await client.send_message(message.channel, author + " you cannot tag yourself!")
else:
# if time_up + 30.0 <= time.time() or marriage_active == 1:
global marriage_active
marriage_active = 1
if marriage_active == 1:
global marriage_mention
global marriage_author
marriage_mention = message.mentions[0].id[:]
marriage_author = message.author.id[:]
msg = await client.send_message(message.channel, author + " has asked for " + message.mentions[0].mention + "'s hand in marriage!")
time.sleep(0.3)
await client.edit_message(msg, author + " has asked for " + message.mentions[0].mention + "'s hand in marriage!\n" + message.mentions[0].mention + " if you wish to either accept or deny the request, simply type 'y' for yes or 'n' for no!")
time.sleep(0.3)
await client.edit_message(msg, author + " has asked for " + message.mentions[0].mention + "'s hand in marriage!\n" + message.mentions[0].mention + " if you wish to either accept or deny the request, simply type 'y' for yes or 'n' for no!\n You have 30 seconds to reply...")
marriage_active = 0
global time_up
time_up = time.time()
else:
await client.send_message(message.channel, author + " please wait until the current request is finished!")
else:
await client.send_message(message.channel, author + " this command is currently in the works!")
if message.content == "y":
if message.author.id == marriage_author and marriage_active == 0:
if time_up + 30.0 > time.time():
await client.send_message(message.channel, author + " said yes! :heart:")
marriage_active = 1
else:
marriage_active = 1
if message.content == "n":
if message.author.id == marriage_author and marriage_active == 0:
if time_up + 30.0 > time.time():
await client.send_message(message.channel, author + " denied <@" + marriage_author + ">'s proposal. :cry:")
marriage_active = 1
else:
marriage_active = 1
Я не могу использовать цикл while в команде! Wedding, потому что она никогда не покинет команду, пока не истечет 30 секунд, и я не могу поставить "y"«или» n команд в! браке либо потому, что они не будут приняты упомянутым человеком, только автором, который первоначально инициировал команду.
Если есть намного лучший способ сделать это или простойисправить мою проблему, любая помощь с благодарностью!: -)