Есть ли способ выполнить действие по истечении определенного времени, учитывая, что запрещающий фактор не срабатывает? discord.py переписать

discord.py #bots

#discord.py #боты

Вопрос:

Это немного запутанный вопрос, поэтому вот более подробное объяснение. Я пишу discord-бота и пытаюсь создать функцию, которая принимает ответ «да» или «нет» и удаляет сообщения через 20 секунд или после получения ответа. Код:

 class MyBot(commands.Bot):
    
    def __init__(self, command_prefix, self_bot):
        commands.Bot.__init__(self, command_prefix=command_prefix, self_bot=self_bot)
        self.add_commands()
        self.playinput = ""
        self.inputvalid = True
        self.playing = False
        self.replace = False

    
    def add_commands(self):
      @bot.command(name="play",help="Plays the first Youtube result from the input you give. Usage:   -play [search here]   Example:   -play Never Gonna Give You Up")
      async def play(cxt,*args):
        self.playinput = ""
        self.inputvalid = True
        if len(args) != 0:
          for i in args:
            self.playinput  = i
        else:
          message = await cxt.send("Invalid input.")
          asyncio.sleep(5)
          await bot.delete_message(message)
          inpvalid = False
    
        if inpvalid == True:
          if self.playing == True:
            cxt.send("Video already playing. Replace? y/n")
            
            #
            def check(msg):
              return msg.author == cxt.author and msg.channel == cxt.channel and 
              msg.content.lower() in ["y", "n"]
            replacemessage = await bot.wait_for("message", check=check)




        
    
bot = MyBot(command_prefix="-", self_bot=False)
bot.run(TOKEN)
 

В def check(msg): Я знаю, как удалять сообщения, мне просто нужен способ считать до 20, пока он проверяет сообщение.

Ответ №1:

Пожалуйста, ознакомьтесь со всей документацией и примерами проекта, над которым вы работаете,

https://discordpy.readthedocs.io/en/stable/ext/commands/api.html ?выделить=wait_for#discord.ext.commands.Bot.wait_for

Примечание: Не создавайте подкласс Bot, если вы не знаете, что вы на самом деле делаете, потому что это может повлиять на атрибуты и функции класса

 @bot.command(name="play", help="Plays the first YouTube result from the input you give. Usage:   -play [search here]   Example:   -play Never Gonna Give You Up")
async def play(cxt, *, args):
    #args is now a string of the query that follows ".play" in the command

    def check(msg):
        return msg.author == cxt.author and msg.channel == cxt.channel and ("y" in msg.content.lower() or "n" in message.content.lower())

    if self.playing == True:
        cxt.send("Video already playing. Replace? y/n")

    replacemessage = await bot.wait_for("message", check=check, timeout=20)