You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:57:03