Discord.js v13 如何实现新成员加入服务器时自动分配Member角色
实现方案
你目前的代码仅适用于消息触发场景下给发信用户加角色,要实现新成员入群自动分配「Member」角色,需要监听专属的成员加入事件,且先完成前置配置:
- 前往Discord开发者平台的机器人设置页,开启服务器成员意图(Server Members Intent),否则机器人无法接收到成员入群事件
- 确保机器人在服务器中的角色排序高于「Member」角色,且已被授予「管理角色」权限
- 如果服务器开启了新成员验证流程,
guildMemberAdd事件会在用户完成验证后自动触发,无需额外适配
discord.js v14 示例代码
当前主流版本的实现方式:
// 客户端初始化时必须指定对应意图 const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers // 接收成员事件必须的意图 ] }); // 监听新成员加入事件 client.on('guildMemberAdd', async (member) => { try { // 查找目标角色,优先读缓存,缓存无则拉取服务器全量角色 const role = member.guild.roles.cache.find(r => r.name === 'Member') || await member.guild.roles.fetch().then(roles => roles.find(r => r.name === 'Member')); if (!role) return console.log('未找到名为Member的角色'); // 给新成员添加角色 await member.roles.add(role); } catch (err) { console.error('添加角色失败,请检查权限配置:', err); } }); client.login('替换为你的机器人Token');
旧版本(v11/v12/v13)兼容写法
如果使用的discord.js版本低于v14,可以用简化写法:
const Discord = require('discord.js'); const client = new Discord.Client({ intents: ['GUILDS', 'GUILD_MEMBERS'] // 低版本用字符串格式声明意图 }); client.on('guildMemberAdd', member => { const role = member.guild.roles.find(role => role.name === "Member"); if (role) { member.addRole(role).catch(err => console.error('添加失败:', err)); } }); client.login('替换为你的机器人Token');
内容的提问来源于stack exchange,提问作者some kid playing js
相关产品推荐
相关产品推荐

