Мне нужно, чтобы мой бот игнорировал сообщения пользователей с определенной ролью

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

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

Вопрос:

Моему боту нужно игнорировать сообщения людей с определенной ролью.

Я написал этот код, и он должен работать, но каждая команда в этом фрагменте кода не работает.

Я не получаю никаких сообщений об ошибках, и мой бот работает нормально над этим фрагментом кода. Что мне нужно изменить?

 client.on('message', message => {
    if (message.guild.roles.cache.find(r => r.name === "ROLE NAME")) {return;}
})
  

Любая помощь приветствуется.

Ответ №1:

Вы проверяете, есть ли у Guild него Role имя ROLE NAME , а не фактическое GuildMember .

GuildMember имеет свойство с именем roles , которое содержит все роли GuildMember .

 client.on("message", message => {
    if (message.member.roles.cache.find(role => role.name == "ROLE NAME")) return false;

    // Execute your commands here.
});
  

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

1. Я не знаю, что я делаю не так, но когда я изменил свой код на это, я начал получать ошибку TypeError: не удается прочитать свойство ‘роли’ null

2. Команда должна выполняться на сервере, а не в DMS.

3. бот выполняется на сервере, и я не уверен, что вызывает проблему, я запускаю бота на версии 12.3.1, если это поможет

4. Не могли бы вы предоставить весь свой код? Я не уверен, что вызывает проблему.

Ответ №2:

Вы должны проверять, имеет ли GuildMember Role , а не Guild .

 client.on("message", message => {
    if (message.member.roles.cache.some(role => role.name == "ROLE NAME")) return;

    // code...
});
  

Вы можете использовать .some() метод, который проверит, проходит ли какой-либо элемент в Collection (роли участника) заданный вами тест. В этом случае проверяется, равно ли имя роли ROLE NAME