discord.js Событие ‘guildMemberAdd’ не работает, несмотря на включение Намерений

#javascript #discord #bots

#javascript #Discord #боты

Вопрос:

Это мой первый вопрос здесь, поэтому я заранее приношу извинения, если я делаю что-то не так.

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

Мой бот находится на одном сервере, поэтому я предоставил ему как НАМЕРЕНИЕ ПРИСУТСТВИЯ, так и НАМЕРЕНИЕ УЧАСТНИКОВ СЕРВЕРА. У меня сложилось впечатление, что этого должно быть достаточно, чтобы бот снова начал работать в обычном режиме, но, к сожалению, он по-прежнему не приветствует новых участников и не присваивает им их пользовательскую роль. Все остальное работает как обычно (он реагирует на !nameofthebot), и бот подключен к сети. Я также вручную дал ему все необходимые разрешения в каналах, где я хочу, чтобы они были активны.

Я не очень разбираюсь в коде, и я создал этого бота благодаря чтению обсуждений здесь и на других сайтах. Поэтому мне интересно, может быть, есть что-то, что тоже нуждается в обновлении на этом уровне. Вот код, о котором идет речь:

 require('dotenv').config()

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});


client.on('guildMemberAdd', function(member) {
  member.guild.channels.get("539191415624826903").send(`Welcome to our server <@${member.user.id}>. Please do not forget to read the rules, and if you have time, don't hesitate to tell us a little about yourself.<:__:551298213622317066>`)
 var role = member.guild.roles.get("549670094079524867");
 member.addRole(role)
});

client.login(process.env.BOT_TOKEN);  

Я дважды проверил идентификаторы канала и участника, и они должны быть в порядке. На всякий случай, если это может помочь, код размещен на GitHub, а бот работает благодаря Heroku.

Заранее благодарю всех, кто, возможно, сможет помочь мне понять, чего мне не хватает.

Ответ №1:

Для событий guildMemberAdd, guildMemberRemove, guildMemberUpdate вам необходимо включить намерение «GUILD_MEMBERS»

Пожалуйста, проверьте эту ссылку

вот как я создаю свой бот-клиент:

 const Discord = require("discord.js");  
const { Client, Intents } = require("discord.js");

client = new BotClient({
  ws: { intents: [Intents.NON_PRIVILEGED, "GUILD_MEMBERS"] },
});
  

или

 const Discord = require("discord.js");  
const { Client, Intents } = require("discord.js");

client = new BotClient({
  ws: { intents: Intents.ALL },
});
  

Пожалуйста, также убедитесь, что вы включили ПРИВИЛЕГИРОВАННЫЕ намерения на своем портале разработчика Discord

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

1. Спасибо вам за это! Я включил все привилегированные намерения на портале разработчика, но когда я пробую ваш код, он сообщает мне «ReferenceError: намерения не определены».

2. Я попытался определить намерения, но бот по-прежнему не реагирует на присоединение новых участников. Вот мой новый код:

3. const Discord = require("discord.js"); const { Client, Intents } = require("discord.js"); const client = new Client({ ws: { intents: Intents.ALL }}); client.on("ready", () => { console.log("I am ready"); }); client.on('guildMemberAdd', function(member) { member.guild.channels.get("636919952787374092").send( Добро пожаловать на наш сервер <@${member.user.id }>. ) var role = member.guild.roles.get("637288616057503749"); member.addRole(role) });