Как я могу выполнить команду вопрос — ответ в discord.py

#python #discord.py

Вопрос:

В настоящее время я пытаюсь создать бота-викторину в discord, но, похоже, у меня ничего не получается. Я провел много исследований по этому поводу, но на самом деле не смог найти конкретного ответа. Я тоже прочитал документы, но, может быть, я что-то упускаю? Это мой код:

 @client.command()
async def ask(ctx):

    _list = [
        ('question_1') , 
        ('question_2')]

    list1 = random.choice(_list)

    def answer():
        if _list == list1[0]:
            answer == "1"
        else: 
            answer == "2"

    await ctx.send("What is the answer to this question?")
    await asyncio.sleep(1)
    await ctx.send(list1)
    msg = await client.wait_for('message')

    if msg.content == answer:
        await ctx.send("good")
    else:
        await ctx.send("no")
 

Это та концепция, которую я хочу использовать, чтобы задавать свои вопросы. Вопросы берутся из определенного списка, и ответ зависит от позиции вопроса. В результате бот всегда отвечает «нет». Я думаю, что неправильно использую оператор if, и я понятия не имею, как это исправить.

Извините, если ответ должен быть очевидным, и я недостаточно читал, или если это невозможно провернуть. Большое вам спасибо!

Ответ №1:

Я собираюсь обновить ваш код и объяснить, что произошло.

 @client.command()
async def ask(ctx):

        _list = [
        'question_1', 
        'question_2']

        list1 = random.choice(_list)

        def answer():
            answer = "-1"
            if _list[0] == list1:
                answer = "1"
            else: 
                answer = "2"
            return answer

        await ctx.send("What is the answer to this question?")
        await asyncio.sleep(1)
        await ctx.send(list1)
        def check(m): return m.author == ctx.author and m.channel == ctx.channel

        msg = await client.wait_for('message', check=check, timeout=None)

        if msg.content == answer():
            await ctx.send("good")
        else:
            await ctx.send("no")   
 

Вы можете попробовать это сейчас и посмотреть, что я обновил, особенно инструкции if else, когда вы проверяете, является ли элемент первым в списке или нет.

Вам также не нужно заключать question_1 и question_2 заключать скобки в _лист.

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

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

1. Во-первых, я хочу отметить , что в этой строке await ctx.send(questions) была допущена небольшая ошибка, так как она должна была быть list1 вместо questions . Мне плохо, но проблема была не в этом. Я попробовал ваш код, но результат, который отправил бот, все равно всегда был «нет». Казалось, это не решило проблему. Хотя спасибо, что уделили мне время. Я был бы очень рад, если бы вы нашли другое решение.

2. Еще раз привет @MarioArquette! Спасибо, что сообщили мне об этом. Я исправил это и обновил свой ответ. Дайте мне знать, если есть что-нибудь еще 🙂

3. Большое вам спасибо @Mr. Вредитель! Ваш код работает идеально, и бот теперь правильно реагирует. Спасибо за всю вашу помощь