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

如何使用discord.js给Discord服务器所有成员批量添加角色?

实现批量给Discord服务器所有用户添加角色的命令

嘿,这个需求我帮很多人解决过,刚好可以给你一套靠谱的实现方案~假设你用的是目前最流行的discord.py v2.x版本,下面一步步来:

前提准备

首先得确保你做了这两个关键设置:

  • 在Discord开发者后台的机器人页面,开启Server Members Intent和Message Content Intent(这俩属于特权意图,必须手动开,不然机器人拿不到成员列表和命令内容)
  • 机器人账号在服务器里有管理角色的权限,并且机器人的最高角色位置要比你要添加的Member角色高(不然没法给用户加这个角色)

完整代码实现

import discord
from discord.ext import commands

# 配置机器人的意图,必须开启成员和消息内容意图
intents = discord.Intents.default()
intents.members = True
intents.message_content = True

# 初始化机器人,命令前缀设为!
bot = commands.Bot(command_prefix="!", intents=intents)

# 批量添加角色的命令
@bot.command(name="giveallrole")
@commands.has_permissions(manage_roles=True)  # 只有能管理角色的用户才能触发这个命令
async def give_all_role(ctx, *, role: discord.Role):
    guild = ctx.guild
    
    # 先检查机器人自身的权限是否足够
    if not guild.me.guild_permissions.manage_roles:
        await ctx.send("哎呀,我没有管理角色的权限,没法完成这个操作哦😅")
        return
    if role.position >= guild.me.top_role.position:
        await ctx.send(f"我没法给用户添加{role.name}角色,因为这个角色的位置比我最高的角色还高!")
        return
    
    success_count = 0
    fail_count = 0
    
    # 遍历服务器所有成员(用fetch_members确保拿到全部用户,而不是仅缓存的活跃用户)
    async for member in guild.fetch_members(limit=None):
        # 跳过机器人用户和已经有该角色的用户
        if member.bot or role in member.roles:
            continue
        
        try:
            await member.add_roles(role)
            success_count += 1
        except Exception as e:
            fail_count += 1
            # 控制台打印失败原因,方便排查问题
            print(f"给用户 {member.name}#{member.discriminator} 添加角色失败: {str(e)}")
    
    # 给命令执行者反馈结果
    await ctx.send(f"批量添加角色完成!✅ 成功给{success_count}个用户添加了角色,❌ {fail_count}个用户添加失败(可能是对方是管理员、我权限不足或网络问题)")

# 运行机器人,替换成你的机器人令牌
bot.run("你的机器人令牌")

关键细节说明

  • guild.fetch_members(limit=None):这个方法会主动从Discord服务器拉取所有成员,而不是依赖本地缓存,适合你这种有近90个历史用户的场景,确保不会漏掉任何人
  • 权限双重检查:既限制了只有管理员能触发命令,也提前验证机器人的权限,避免执行到一半才报错
  • 跳过逻辑:自动跳过机器人和已经拥有目标角色的用户,减少不必要的操作和错误
  • 错误统计:执行完成后会告诉你成功和失败的数量,控制台还会打印具体失败原因,方便你排查问题

使用方式

直接在服务器里发送命令:!giveallrole Member(这里的Member可以是角色名称、角色ID或者直接@该角色,机器人会自动识别)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:29