Как установить иерархию для выдачи ролей в Discord?

Как создать команду для назначения роли и гарантировать, что пользователь не сможет назначить себе роль, находящуюся ниже его в иерархии? Вот часть кода, которую я использую.
  • 29 мая 2024 г. 17:01
Ответы на вопрос 2
Для того чтобы создать иерархию ролей в Discord и предотвратить назначение пользователем роли, находящейся ниже его в иерархии, вы можете использовать следующий код:

```javascript
// Команда для назначения роли
client.on('message', message => {
  if (message.content.startsWith('!role')) {
    // Проверяем, что пользователь имеет право назначать роли
    if (!message.member.hasPermission('MANAGE_ROLES')) {
      return message.reply('У вас недостаточно прав для назначения ролей.');
    }
    
    // Разбиваем сообщение на части, чтобы получить роль
    let args = message.content.split(' ');
    let roleName = args[1];
    
    // Получаем объект роли по имени
    let role = message.guild.roles.cache.find(role => role.name === roleName);
    
    // Проверяем, что роль найдена
    if (!role) {
      return message.reply('Роль не найдена.');
    }
    
    // Проверяем, что пользователь не пытается назначить роль ниже его в иерархии
    if (message.member.roles.highest.comparePositionTo(role) <= 0) {
      return message.reply('Вы не можете назначить эту роль.');
    }
    
    // Назначаем роль пользователю
    message.member.roles.add(role);
    message.reply(`Роль ${roleName} успешно назначена.`);
  }
});
```

Этот код проверяет разрешение пользователя на назначение ролей, находит роль по имени, проверяет её наличие, а также проверяет, что пользователь не пытается назначить себе роль ниже его в иерархии. Если условие выполняется, то роль успешно назначается пользователю.

Не забудьте добавить этот код в свой Discord-бот и настроить его работу с вашим сервером.
Сравните с top_role 

примерно так должно работать:
async def addrole(ctx, role: discord.Role, member: discord.Member):
    if role >= ctx.author.top_role:
...
Похожие вопросы