Discord机器人新用户入群自动分配身份组实现及权限报错解决
问题解决方案
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions 错误由机器人权限不足、角色层级不够、必要网关意图未开启三类原因导致,按以下步骤排查即可解决:
1. 开启必要网关意图
最新版Discord.py要求监听成员加入事件必须开启成员相关意图:
- 进入Discord开发者平台对应Bot的设置页,找到
Privileged Gateway Intents分区,开启Server Members Intent开关 - 代码初始化Client时必须显式声明开启成员意图,示例如下:
import discord # 显式配置intents intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents)
2. 开启角色管理权限
给机器人在服务器中的对应角色开启Manage Roles(管理角色)权限,这是机器人分配/移除角色的基础权限。
3. 调整角色层级(核心问题)
Discord角色权限规则为:角色仅可管理层级低于自身的角色。进入服务器角色管理页,将机器人对应的角色拖拽到所有你需要它分配的目标角色的上方,即可解决层级不足的问题。
4. 代码优化
你提供的getGuild方法存在缩进错误,同时缺少空值判断容易触发异常,优化后参考代码如下:
GUILD_NAME = "替换为你的服务器名称" TARGET_ROLE_NAME = "ExampleRole" def getGuild(): for guild in client.guilds: if guild.name == GUILD_NAME: return guild return None @client.event async def on_member_join(member): guild = getGuild() if not guild: return role = discord.utils.get(guild.roles, name=TARGET_ROLE_NAME) if not role: return try: await member.add_roles(role) except discord.Forbidden: print(f"分配角色失败,请检查机器人权限与角色层级")
内容的提问来源于stack exchange,提问作者Wolfsurge
相关产品推荐
相关产品推荐

