Как исправить «discord.ext.commands.errors.MissingRequiredArgument: автор - обязательный аргумент, который отсутствует».в discord.py - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь создать команду для своего бота, которая позволяет пользователям создавать отчеты об ошибках, но я продолжаю получать сообщение об ошибке при попытке запустить код.

@client.command()
async def bug(ctx, author, message, m):
    await ctx.send("Greetings! What would you like to report?")
    return m.author == message.author and m.channel == message.channel
    msg = await client.wait_for('message', check=bug)
    bugReport = msg[2:]
    await ctx.send("Thank you for your help. This bug has been reported to the server admins.")
    channel = client.get_channel(private)
    await channel.send(bugReport + " was reported by " + author)

Предполагается, что программаспросить пользователя о том, что он хотел бы сообщить, прежде чем принять сообщение об ошибке и затем переключиться на канал сообщения об ошибке, чтобы сообщить о проблеме, но вместо этого я получаю только ошибку:

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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы повторно используете имя bug для ссылки как на саму команду, так и на проверку для wait_for.Также похоже, что вы пытаетесь определить проверку в функции, но вам не хватает строки определения.

Вы, кажется, ожидаете author и messagem, что бы это ни былоis) для передачи сопрограмме при вызове команды.Вместо этого они объединены в один объект Context, который является первым аргументом.

Ниже я изменил ваш код, чтобы он мог взять report из первоначального вызова или запросить его.

@client.command()
async def bug(ctx, *, report):
    def check(message):
        return ctx.author == message.author and ctx.channel == message.channel

    if not report:
        await ctx.send("Greetings! What would you like to report?")
        msg = await client.wait_for('message', check=check)
        report = msg.content[2:]  # This doesn't look right to me, will remove 2 characters
    await ctx.send("Thank you for your help. This bug has been reported to the server admins.")
    channel = client.get_channel(private)
    await channel.send(report + " was reported by " + author)
0 голосов
/ 22 сентября 2019

Ошибка говорит о том, что обязательный параметр author отсутствует.

В вашем коде 3 author параметров:

  1. В функции def bug(ctx, author, message, m)
  2. В параметре m.author
  3. В параметре message.author

Добавьте в свой код несколько операторов if author is not None:, чтобы проверить, существует ли параметр author иустановите его на None по умолчанию, если это не требуется:

def bug(ctx, author=None, message, m):
    # Some code here...
    if author is not None:
        await channel.send(bugReport + " was reported by " + author)
    else:
        await channel.send(bugReport)  # without author

PS После return оператора:

return m.author == message.author and m.channel == message.channel

остальная функция bug не будетказненный (бесполезный).

...