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

discord.py 给指定user ID成员添加role的实现方法咨询

实现方案(默认基于discord.py v2.x 版本)

你需要先拿到对应服务器的成员对象和目标角色对象,再执行添加角色操作,完整修改后的代码如下:

# 初始化bot时记得开启members intent,否则无法获取成员信息
import discord
from discord.ext import tasks

intents = discord.Intents.default()
intents.members = True # 必须开启,否则无法拉取成员数据
bot = discord.Bot(intents=intents) # 如果你用的是前缀命令bot,改成commands.Bot(command_prefix="!", intents=intents)

# 替换成你自己的服务器ID、目标角色ID
TARGET_GUILD_ID = 1234567890 # 你的服务器ID,整型
TARGET_ROLE_ID = 9876543210 # 你要添加的角色ID,整型

@tasks.loop(seconds=5)
async def change_status():
    # 先拿到公会对象
    guild = bot.get_guild(TARGET_GUILD_ID)
    if not guild:
        return
    # 拿到目标角色对象
    target_role = guild.get_role(TARGET_ROLE_ID)
    if not target_role:
        return
    
    for number in range(len(data_dict["username"]) - 1):
        if data_dict["year_start"][number] == year_now and data_dict["month_start"][number] == month_now and data_dict["date_start"][number] == date_now:
            userid = int(data_dict["username"][number])
            try:
                # 获取成员对象
                member = await guild.fetch_member(userid)
                # 给成员添加角色
                await member.add_roles(target_role)
            # 捕获常见异常,可按需扩展处理逻辑
            except discord.NotFound:
                # 该用户不在当前服务器中
                pass
            except discord.Forbidden:
                # bot没有管理角色权限,或者bot角色等级低于目标角色
                pass
            except Exception as e:
                # 其他错误
                print(f"给用户{userid}添加角色失败:{str(e)}")

注意事项

  • 你需要提前在Discord开发者后台的bot设置页开启Server Members Intent权限,否则无法拉取成员数据
  • 你的bot必须拥有Manage Roles(管理角色)权限,且bot自身的角色在服务器角色列表中的位置,要高于你要分配的目标角色,否则会触发权限不足错误
  • 你当前的定时任务每5秒执行一次,频繁调用fetch_member可能触发速率限制,建议优先用guild.get_member(userid)走本地缓存获取,缓存找不到再调用fetch_member拉取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:06:05