Встроить в винтики (discord.py)

#python #discord.py

Вопрос:

Я попытался внедрить сообщение в свой файл cogs. Когда я пытаюсь использовать команду, на моей консоли появляется эта ошибка.

 An exception has occurred while executing command `cal`:
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord_slash/client.py", line 1352, in invoke_command
    await func.invoke(ctx, **args)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord_slash/model.py", line 209, in invoke
    return await self.func(self.cog, *args, **kwargs)
  File "/home/runner/calculator/cogs/update.py", line 16, in cal
    self.username = ctx.message.author.display_name
AttributeError: 'NoneType' object has no attribute 'author'
 

Ошибка указывает на то, что автор не возвращает ничего (насколько я понимаю). Вот мой фрагмент кода :

 @ cog_ext.cog_slash(description = "Calculate your math's query.")
  async def cal(self,ctx,query : str) :
    self.operation = ("").join(query)
    self.evaluate = eval(self.operation)
    self.username = ctx.message.author.display_name
    self.embed = discord.Embed(title = "/Cal", description = "Calculate your math queries.", colour = discord.Color.blurple())
    self.embed.set_footer(text = f"{self.username}'s query evaluated.")
    self.embed.set_author(name = f"{self.username}'s' query.", icon_url = ctx.message.author.avatar_url)
    self.embed.add_field(value = f"{self.operation}", inline = False)
    self.embed.add_field(value = "After evaluated, the result is :", inline = True)
    self.embed.add_field(value = f"{self.evaluate}", inline = True)
    await ctx.send(embed = self.embed)
 

Исходя из моего инстинкта, я думаю, что в файле cogs автор представлен с использованием разных ключевых слов. Может быть, с моим кодом что-то не так. Заранее спасибо.

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

1. Какую библиотеку вы используете для команд косой черты?

2. команда discord_ слэш или команда discord-py-слэш

3. Ну , ошибка говорит , что message это None так, а не .author так, так что ваш инстинкт здесь не прав. Я ничего не знаю об этой библиотеке, поэтому не могу указать, откуда взялась реальная проблема.

Ответ №1:

Проблема здесь в том, что команды discord-py-slash (или discord-взаимодействия, как они были переименованы) возвращают SlashContext объект вместо обычного объекта контекста, который использовался discord.py. И, поскольку команда косой черты не вызывается с сообщением, объект сообщения есть None , что подтверждается ошибкой.

Чтобы решить эту проблему, вы должны иметь возможность заменить ctx.message.author на ctx.author , что должно работать, как указано в их документации.

Ответ №2:

Я не знаю , какую библиотеку вы используете или как она работает, так как это не похоже на просто discord.py , но вы пробовали делать ctx.author.display_name вместо ctx.message.author.display_name этого .

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

1. Да, я пытался, но это все равно не сработало. Но спасибо за вашу помощь.