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
相关产品推荐
相关产品推荐

