Кто-нибудь может помочь мне с этой ошибкой, которую я получаю? discord.py

#python #discord.py

#python #discord.py

Вопрос:

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

 Traceback (most recent call last):
  File "C:Python38libsite-packagesdiscordclient.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:UserscuztoDesktopDiscordBot.-pycogsevents.py", line 106, in on_message
    if not message.author.permissions_in(message.channel).manage_messages:
  File "C:Python38libsite-packagesdiscorduser.py", line 232, in permissions_in
    return channel.permissions_for(self)
  File "C:Python38libsite-packagesdiscordchannel.py", line 146, in permissions_for
    base = super().permissions_for(member)
  File "C:Python38libsite-packagesdiscordabc.py", line 475, in permissions_for
    roles = member.roles
AttributeError: 'User' object has no attribute 'roles'
  

Это код:

     @commands.Cog.listener()
    async def on_message(self, message):
        if not message.author.permissions_in(message.channel).manage_messages:
            if "discord.gg" in message.content.lower():
                await message.delete()
                await message.channel.send(f"temp, <@{message.author.id}>")
  

Кто-нибудь скажет мне, как это исправить? Я перепробовал множество вещей, и я не уверен, что еще можно сделать

Ответ №1:

Сообщение отправляется в DM, а не на сервер.

Когда DM отправляется, message.author это будет объект пользователя, и, как вы знаете, в DM нет ролей, поэтому это ошибка.

Когда сообщение отправляется на сервер, message.author будет объектом-участником, пользователь в гильдии становится участником, поскольку на сервере есть роли, Member.roles будет действительным.

Проверьте, что если в сообщении нет атрибута гильдии, то верните

 @commands.Cog.listener()
async def on_message(self, message):
    if not message.guild: return
    if not message.author.permissions_in(message.channel).manage_messages:
        if "discord.gg" in message.content.lower():
            await message.delete()
            await message.channel.send(f"temp, <@{message.author.id}>")
  

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

1. Спасибо, чувак, это то, что я искал, Ты бог, посылающий

2. Ошибка все еще сохраняется, добавьте меня в discord, чтобы мы могли обсудить это проще Motzumoto #9773