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

如何用JS机器人将无角色(@everyone)Discord用户移至已有角色?

解决机器人重启后补加离线期间新成员角色的问题

这个场景我之前处理过,核心思路就是在机器人启动完成的ready事件里,批量检查服务器内的所有成员,把那些只有默认@everyone角色的用户自动补上「Visitors」角色。

具体实现代码

你可以在现有代码基础上,添加如下的ready事件处理逻辑:

client.on("ready", async () => {
  console.log(`Logged in as ${client.user.tag}!`);
  
  // 遍历机器人所在的所有服务器(如果只针对特定服务器,可以改成指定 guild ID)
  for (const guild of client.guilds.cache.values()) {
    // 先获取目标角色,避免每次循环重复查找
    const visitorsRole = guild.roles.cache.find(role => role.name === "Visitors");
    if (!visitorsRole) {
      console.log(`服务器 ${guild.name} 中未找到「Visitors」角色,跳过处理`);
      continue;
    }

    // 获取服务器所有成员(注意:需要机器人有「服务器成员列表」权限)
    const members = await guild.members.fetch();
    
    // 筛选出只有@everyone角色的成员(角色数量为1,因为@everyone是默认自带的)
    const membersToUpdate = members.filter(member => member.roles.cache.size === 1);
    
    if (membersToUpdate.size === 0) {
      console.log(`服务器 ${guild.name} 没有需要补加角色的成员`);
      continue;
    }

    console.log(`服务器 ${guild.name} 找到 ${membersToUpdate.size} 名需要补加角色的成员,开始处理`);
    
    // 批量给这些成员添加角色
    for (const member of membersToUpdate.values()) {
      try {
        await member.roles.add(visitorsRole, "机器人重启后补加默认角色");
        console.log(`已给成员 ${member.user.tag} 添加「Visitors」角色`);
      } catch (error) {
        console.error(`给成员 ${member.user.tag} 添加角色失败:`, error);
      }
    }
  }
});

关键细节说明

  • 角色筛选逻辑:用member.roles.cache.size === 1判断,因为每个用户都会默认拥有@everyone角色,所以角色数量为1就意味着没有其他自定义角色,符合你说的“离线期间加入的无角色用户”。
  • 权限要求:确保机器人拥有「管理角色」和「服务器成员列表」的权限,否则无法获取成员列表或添加角色。另外,「Visitors」角色的位置必须在机器人角色的下方(服务器设置→角色排序),不然机器人没有权限给用户添加这个角色。
  • 速率限制处理:如果你的服务器成员很多(比如上千人),直接循环添加可能触发Discord的API速率限制,这时可以给每个添加操作加个小延迟,比如await new Promise(resolve => setTimeout(resolve, 1000));,或者使用批量添加的方法(不过Discord的批量添加角色接口一次最多处理100个成员)。

结合你原有的代码

把这段ready事件代码和你之前的guildMemberAdd事件代码放在一起,就能实现实时添加+重启补加的完整逻辑了。

内容的提问来源于stack exchange,提问作者DLS93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:18:15