#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. я дал это. Просто нажмите на предыдущий текст содержимого