Команда присваивает роль бота

#discord #discord.js

#Discord #discord.js

Вопрос:

Я пытаюсь создать команду, которая дает пользователю роль. Раньше это работало, но не просто дает боту роль.

 module.exports = {
  name: "addevent",
  description: "Add the event ping role to a user",

  async run(client, message, args) {

    const { member } = message;

    if (message.member.roles.cache.has('793222158981529621')) {
      const { member } = message;
      message.channel.send(`${member} You already have this role.`)
    }

    if (message.channel.id !== '793224633759432755') return;    

    member.roles.add('793222158981529621')

    message.channel.send(`${member} Added the event ping role.`)
  }
}
 

Это также происходит с моей командой level, которая должна проверять уровень пользователя. Он проверяет уровень бота, а не пользователя.

Ответ №1:

     let role = message.guild.roles.cache.find(r => r.name === "Role Name Here");

    if (message.channel.id !== 'Channel ID Here') return;

    if (message.member.roles.cache.has(role.id)) {
      return message.channel.send(`${message.member} You already have this role.`)
    }

    message.member.roles.add(role);
    message.channel.send(`${message.member} Added the event ping role.`);
 

В моем примере есть переменная, role которая находит роль по ее имени, поэтому вы должны указать там имя роли. Ваш if-оператор с message.channel.id помощью был понятен и является хорошим способом получить роль только в одном канале. Второй оператор if просто спрашивает, есть ли у пользователя уже эта роль (не забывайте: в .has() вам нужно указать идентификатор, в этом случае это легко сделать role.id ). В любом случае, если у пользователя есть эта роль, он отправит сообщение и вернется. В противном случае он добавит роль пользователю, а также отправит сообщение.

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

1. > Я не знаю, почему вы хотели, чтобы участник был сообщением? const { member } = message; использует узел. Деконструкция Js. Это то же самое, что и в const member = message.member; противном случае хороший ответ.

2. О, это приятно знать, спасибо, я удалил это из своего ответа сейчас.

3. Я попробовал это, и это все еще дает боту роль.

4. В итоге я исправил ошибку, по-видимому, это было из-за одного из установленных мной пакетов.