discord.js модераторы могут неправильно использовать команду addrole

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Я создал команду add role для своего бота, проблема в том, что любой, у кого есть роль mod, может злоупотреблять ботом, чтобы получить более высокую роль, например, роли для владельца, можете ли вы, ребята, поделиться кодом для добавления к моей текущей?

 if (command === "addrole") {
  if (
    !message.member.roles.cache.some((r) =>
      ["Administrator", "Moderator"].includes(r.name)
    )
  )
    return message.reply("Sorry, you don't have permissions to add roles!");

  let member = message.mentions.members.first();
  let role = message.mentions.roles.first();
  if (!member)
    return message.reply("Please mention a valid member of this server");
  if (!role) return message.reply("please mention a valid role of this server");

  member.roles.add(role);
  return message.reply(
    ` ${role} has successfully been added to ${member.user.tag}`
  );
}
  

Ответ №1:

Вы можете использовать Role.comparePositionTo()

 const highest = member.roles.highest; // this is the members highest role

// if role is higher or equal to highest role
if(highest.comparePositionTo(role) <= 0)
  return message.channel.send('You cannot add roles equal/higher to that member's highest role')
  

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

1. отклонение необработанного обещания: роли не определены

2. Я думаю, это означает, что есть проблема с member переменной.

3. что вы предлагаете мне сделать?

4. @peter23 Я думаю, это потому, что вы скопировали код как raw и не внесли коррективы. member Свойство есть undefined , потому что это не defined . Я думаю, что вы хотели изменить member в этом ответе на message.member . Это должно устранить проблему.

5. На самом деле, они определили member в своем коде как message.mentions.members.first() .