Получение ошибки при передаче кавычек в качестве аргумента в discord.py

#python #discord.py

#python #discord.py

Вопрос:

У меня ошибка в моем боте Discord в настоящее время, когда кто-то использует кавычки в команде, я получаю следующую ошибку: discord.ext.commands.errors.ExpectedClosingQuoteError: Expected closing ". Похоже, что это открытая ошибка в, discord.py согласно этому отчету об ошибке, а также этому коду в discord.py . Немного раздражает, что это проблема, и мне было интересно, есть ли какое-либо исправление для этого в настоящее время. Вот мой код на данный момент:

 @bot.command()
async def f(ctx, *args):
hearts = (':heart:', ':orange_heart:', ':yellow_heart:', ':green_heart:', ':blue_heart:', ':purple_heart:')

if not args:
    response = '**{0}** has paid their respects {1}'.format(ctx.author.name,
                                                            hearts[random.randint(0, len(hearts) - 1)])
else:
    response = '**{0}** has paid their respects {1} {2}'.format(ctx.author.name, ' '.join(args),
                                                                hearts[random.randint(0, len(hearts) - 1)])
  

Когда пользователь вызывает эту функцию, набирая !f "The thing в Discord, я получаю команду, о которой упоминал выше. Могу ли я в любом случае потенциально обойти это? Я не думаю, что это возможно, поскольку в ту минуту, когда аргумент передается в функцию, выдается ошибка. Я полагаю, что могу отредактировать discord.py , чтобы исправить эту проблему, но это может привести к сбоям в других областях моего бота. Обычно я получаю эту ошибку, когда пользователи iOS используют кавычки на своей клавиатуре и вводят что-то вроде !f Josh's face . Есть ли какой-либо способ успешно передать все кавычки через эту функцию?

Спасибо!

Ответ №1:

Он принимает все после команды как args и установил значение по умолчанию None, чтобы вы не получили ошибку, если нет аргументов discord.ext.commands.errors.MissingRequiredArgument: args is a required argument that is missing.

также я изменил форматирование, чтобы использовать строку f, я считаю, что это проще. и в вашем случае лучше использовать random.choise()

пример из документов

 @bot.command()
async def f(ctx, *, args=None):
    hearts = (':heart:', ':orange_heart:', ':yellow_heart:',
              ':green_heart:', ':blue_heart:', ':purple_heart:')

    if not args:
        response = f'**{ctx.author.name}** has paid their respects {random.choice(hearts)}'
    else:
        response = f'**{ctx.author.name}** has paid their respects {args} {random.choice(hearts)}'

    await ctx.send(response)
  

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

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

1. Большое вам спасибо за исправление моего кода и ссылку на документацию. Действительно полезно! Очень признателен! <3