discord.ext.commands.errors.CommandInvokeError: Команда вызвала исключение: ошибка типа: add_reaction() отсутствует 1 требуемый позиционный аргумент: ‘self’

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py

Вопрос:

В принципе, я пытаюсь создать команду опроса / голосования, которая позволяет добавлять реакции «:thumbsup:» для согласия и «:thumbsdown:» для несогласия. Например:

User: Am I male?

Reactions: :thumbsup:, :thumbsdown:

Meaning of Reactions: [yes:no]

Это мой полный код:

 @client.command()
async def poll(ctx, *, message):
    await ctx.send(f"{message}")
    await Message.add_reaction(emoji=u"U0001F44D")
  

Всякий раз, когда я вызываю команду, сообщение отправляется, но реакция не добавляется. Вместо этого появляется эта ошибка

 discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: add_reaction() missing 1 required positional argument: 'self'
  

Полная ошибка здесь:

 Ignoring exception in on_command_error
Traceback (most recent call last):
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:UsersdanieDocumentsScriptsBotsDiscordBotskybot.py", line 53, in poll
    await discord.Message.add_reaction(emoji=u"U0001F44D")
TypeError: add_reaction() missing 1 required positional argument: 'self'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordclient.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:UsersdanieDocumentsScriptsBotsDiscordBotskybot.py", line 189, in on_command_error
    raise error
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandsbot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 855, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: add_reaction() missing 1 required positional argument: 'self'
Ignoring exception in on_command_error
Traceback (most recent call last):
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:UsersdanieDocumentsScriptsBotsDiscordBotskybot.py", line 53, in poll
    await discord.Message.add_reaction(emoji=u"U0001F44D")
TypeError: add_reaction() missing 1 required positional argument: 'self'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordclient.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:UsersdanieDocumentsScriptsBotsDiscordBotskybot.py", line 189, in on_command_error
    raise error
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandsbot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 855, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:UsersdanieAppDataLocalProgramsPythonPython38libsite-packagesdiscordextcommandscore.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: add_reaction() missing 1 required positional argument: 'self'
  

Это мой источник для эмодзи в юникоде

Ответ №1:

В discord.py send() функция возвращает сообщение, поэтому все, что вам нужно сделать, это установить для вашей функции отправки значение переменной.

 @client.command()
async def poll(ctx, *, message):
    message = await ctx.send(message)
    await message.add_reaction(u"U0001F44D")
  

Ответ №2:

Вам нужен экземпляр сообщения, а не класс, сохраните ваше сообщение в переменной. В этом случае переменная является msg :

 @client.command()
async def poll(ctx, *, message):
    msg = await ctx.send(f"{message}")
    await msg.add_reaction(emoji=u"U0001F44D")
  

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

1. Спасибо за ответ, действительно ценю это. Я принял другого парня, поскольку у него была более низкая репутация. Надеюсь, вы понимаете. 🙂

2. Нет проблем, рад, что вы нашли свой ответ!