discord.py on_message author возвращает none в приватном канале

#python #discord.py #discord.py-rewrite

#python #discord.py #discord.py-переписать

Вопрос:

Итак, у меня есть этот код

 @client.event
async def on_message(msg):
  bprole = msg.guild.get_role(773370896773021716)
  filter = [#a list of filtered word, in actual code this list have items]
  member = msg.guild.get_member(msg.author.id)

  for word in filter:
    if bprole not in member.roles:
      if msg.channel.id != 715097440369508484:
        if msg.content.count(word) > 0:
          print("%s Has said a bad word" % (msg.author.id))
          await msg.delete()
          await msg.channel.send("%s Mind your language. It is a blacklisted word" % (msg.author.mention))
  mention = msg.mentions #you may ignore this this is an afk system and its work just fine but incase this thing is the cause of the problem I included it
  for m in mention:
    try:
      val = db[m.id]
      await msg.channel.send(f"{m.name} is AFK: {val}")
    except:
      print()
  await client.process_commands(msg)
 

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

 Ignoring exception in on_message
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "main.py", line 54, in on_message
    if bprole not in member.roles:
AttributeError: 'NoneType' object has no attribute 'roles'
 

У меня включены все намерения.

 intents = discord.Intents.all()

client = commands.Bot(command_prefix=get_prefix,case_insensitive=True, intents=intents, help_command=None)
 

Я также попробовал msg.author вместо member = msg.guild.get_member(msg.author.id) too, но проблема все еще сохраняется

Как я могу это исправить?

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

1. в частном канале или в dm?

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

3. попробуйте распечатать переменную-член и посмотреть, пуста она или нет?

4. Я попытался это сделать, и его возврат отсутствует,

Ответ №1:

В личных сообщениях guild — None . Поэтому я бы рекомендовал просто отключить его, если это None

 if msg.guild is None:
    return
 

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

1. любая ссылка, которая сообщает, что личное сообщение не возвращает ничего для гильдии?

2. конечно

3. Могу ли я получить ссылку?

4. я дал это. Просто нажмите на предыдущий текст содержимого