Discord bot ctx отображается как аргумент - PullRequest
1 голос
/ 28 мая 2020

Это тестовый код, в котором я пытаюсь работать в классах. Даже в командах он отображает ctx как требуемый аргумент вместо этого, и он работает, только если я помещаю его перед self.

class Quiz:
    def __init__(self, question, answer):
        self.question = question
        self.answer = answer



    @bot.command(pass_context=True)
    async def quiz(self, ctx):
        fido = Quiz("Starter mass?", "yeah")
        nope = Quiz("WHAT?", "lel")
        await ctx.send(fido.question)

        def check(m):
            return m.content == 'heh'

        msg = await bot.wait_for('message', check=check)
        await ctx.send('Right {.author}!'.format(msg))

Ошибка:

discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.

Как я могу это исправить?

1 Ответ

1 голос
/ 29 мая 2020

Как бы безумно это ни звучало, удалите аргумент self из вашего метода. Об этом позаботится декоратор команд. (Вы также можете использовать команду cog)

class Quiz:
    def __init__(self, question, answer):
        self.question = question
        self.answer = answer

    @bot.command(pass_context=True)
    async def quiz(ctx):
        fido = Quiz("Starter mass?", "yeah")
        nope = Quiz("WHAT?", "lel")
        await ctx.send(fido.question)

        def check(m):
            return m.content == 'heh'

        msg = await bot.wait_for('message', check=check)
        await ctx.send('Right {.author}!'.format(msg))

Также ваша функция проверки работает некорректно. Он всегда использует вопрос fido и говорит, что вы правы, только после ответа 'heh'.

    @bot.command(pass_context=True)
    async def quiz(ctx):
        fido = Quiz("Starter mass?", "yeah")
        nope = Quiz("WHAT?", "lel")
        question = random.choice((fido, nope))
        await ctx.send(question.question)

        check = lambda m: m.content.lower() == question.answer
        msg = await bot.wait_for('message', check=check)
        await ctx.send(f'Right **{msg.author.name}**!')
...