#python #discord.py
Вопрос:
Я создаю функцию автоматического удаления сообщений в своем боте discord и сел на мель, когда добрался до команды удалить слова из списка цензоров. потому что слово, которое я хочу удалить из списка, находится в списке, который бот удаляет msg. Я хочу обойти это, добавив дополнительное событие if внутри моего сообщения об удалении сообщения, которое проверяет, имеет ли пользователь роль администратора или роль Мод. мой желаемый результат заключается в том, что если у них действительно есть роль, она вернется, и msg delete никогда не будет выполняться
if any(word in message.content for word in censorlist):
if message.author == client.user:
return
elif
return
else:
await message.delete()
await client.process_commands(message)```
Ответ №1:
Есть в основном 2 способа, которыми вы можете получить роль discord.utils.get
, и они есть guild.get_role
. В любом случае, вот примеры для обоих
get_role (Требуется идентификатор)
# Somewhere above all the if statements
admin_role = message.guild.get_role(id_here)
mod_role = message.guild.get_role(id_here)
# And then in your elif
elif mod_role in message.author.roles or admin_role in message.author.roles:
Это получает роли с помощью идентификатора и проверяет, есть ли у участника роли
utils.get (требуется имя)
# Somewhere above all the if statements
admin_role = discord.utils.get(message.guild.roles, name="Admin")
mod_role =
# And then in your elif
elif mod_role in message.author.roles or admin_role in message.author.roles:
Это получает роли по имени и проверяет, есть ли у участника эта роль
Или это тоже можно сделать в одной строке (выглядит плохо)
elif discord.utils.get(message.author.roles, name="Mod") or discord.utils.get(messages.author.roles, name="Admin"):
Это использует тот факт, что utils.get не возвращает ничего, если вещь не найдена. Таким образом, он ищет роли участника для роли с именем Admin/Mod, если она не найдена, то у участника нет роли
Какой-нибудь еще более короткий путь, который не рекомендуется
elif any(role.id in [mod_role_id, admin_role_id] for role in message.author.roles):
Это сравнивает роль идентификатора каждой роли, которую имеет участник, с идентификаторами ролей модов и администраторов