Как мне получить сообщение пользователя команды после того, как мой бот задаст вопрос?

#discord.py

Вопрос:

Я пытаюсь создать музыкального бота Discord. Когда кто-то это делает !воспроизведение (название песни), он будет искать название песни в Google и брать все ссылки с «youtube.com/watch» и скачай его. Прямо сейчас я понял, как сделать это локально в терминале. Проблема в том, что я не знаю, как спросить автора команды, какой выбор песни они хотят, если появится несколько ссылок с «youtube.com/watch» Вот мой код:

 ytlinks = searchForLink(link, 10)
# ask which link
if len(ytlinks) > 1:
    await ctx.send(str(ytlinks))
    await ctx.send("Which link do you want to use?")
    # want code here to take next message after the "Which link do you want to use?" and set to var "linkchoice"
    linkchoice = ''
    if (not int(linkchoice) <= 10) or (not int(linkchoice) >= 1):
        await ctx.send("Not an integer or not valid option")
    linkchoice = int(linkchoice) - 1
    ytlinks = ytlinks[int(linkchoice)]
 

Комментарии:

1. вы знаете об wait_for этом ? discordpy.readthedocs.io/en/master/ext/commands/…

2. @moinierer3000 Я довольно новичок в кодировании, поэтому я не уверен, как реализовать «wait_for» в команде. В документации он используется в событии on_message, как я могу использовать его в своем командном коде?

3. Конечно, я написал комментарий ниже с примером. Надеюсь, это поможет!

Ответ №1:

Как сказано в моем комментарии, вот базовый пример с вашим кодом о том, как вы можете реализовать wait_for .

 #just hardcoding some list for demonstration purposes
ytlinks = ["https://youtube.com/123", "https://youtube.com/456", "https://youtube.com/789"]

if len(ytlinks) > 1:
    await ctx.send(str(ytlinks))
    await ctx.send("Which link do you want to use?")

    def check(message):
        return message.author == ctx.author

    try:
        message = await self.bot.wait_for('message', timeout=60.0, check=check)
    except asyncio.TimeoutError:
        ctx.send("You took too long to respond!")
        return
    else:
        linkchoice = message.content
        if (not int(linkchoice) <= 10) or (not int(linkchoice) >= 1):
            await ctx.send("Not an integer or not valid option")
            return
        await ctx.send(f"You chose link #{linkchoice}:n{ytlinks[int(linkchoice)-1]}")