Discord狼人杀机器人触发403权限缺失错误(50013)的修复
Discord狼人杀机器人权限错误(403 Forbidden/50013)修复方案
问题背景
开发《米勒山谷狼人》Discord机器人,通过9个专属角色(命名为1-9)实现玩家频道权限隔离。执行角色分配、频道权限覆盖操作时,尽管已配置正确Scopes、机器人拥有管理员权限且角色层级高于目标角色,仍触发403 Forbidden (error code: 50013): Missing Permissions错误。
报错日志
2024-10-25 00:03:37 INFO discord.client logging in using static token 2024-10-25 00:03:38 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: 9ffd92e484c54602bf4d2fcd50893267). Creating roles Deleting roles on users [<Role id=1195679159821799444 name='@everyone'>, <Role id=1239274286880133123 name='Machine_control'>, <Role id=1220862610266783806 name='9'>, <Role id=1220862606789836831 name='8'>, <Role id=1220862604390432778 name='7'>, <Role id=1220862584001925193 name='6'>, <Role id=1220862581753909288 name='5'>, <Role id=1220862578280890420 name='4'>, <Role id=1220862575957246072 name='3'>, <Role id=1220862573004460177 name='2'>, <Role id=1220862570022436914 name='1'>, <Role id=1299129640807432195 name='DisDawn'>] 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions 403 Forbidden (error code: 50013): Missing Permissions Attributing roles [<Role id=1195679159821799444 name='@everyone'>, <Role id=1239274286880133123 name='Machine_control'>, <Role id=1220862610266783806 name='9'>, <Role id=1220862606789836831 name='8'>, <Role id=1220862604390432778 name='7'>, <Role id=1220862584001925193 name='6'>, <Role id=1220862581753909288 name='5'>, <Role id=1220862578280890420 name='4'>, <Role id=1220862575957246072 name='3'>, <Role id=1220862573004460177 name='2'>, <Role id=1220862570022436914 name='1'>, <Role id=1299129640807432195 name='DisDawn'>] [<Role id=1220862610266783806 name='9'>, <Role id=1220862570022436914 name='1'>, <Role id=1220862581753909288 name='5'>, <Role id=1220862606789836831 name='8'>, <Role id=1220862578280890420 name='4'>, <Role id=1239274286880133123 name='Machine_control'>, <Role id=1220862584001925193 name='6'>, <Role id=1220862575957246072 name='3'>, <Role id=1220862604390432778 name='7'>, <Role id=1220862573004460177 name='2'>] ERROR:root: Traceback (most recent call last): File "c:\Users\stard\OneDrive\Documents\code\Digi\Discord bot\v2\BOT.py", line 128, in start_game await game.assign_roles(ctx) File "c:\Users\stard\OneDrive\Documents\code\Digi\Discord bot\v2\Werewolf_game.py", line 104, in assign_roles await player.discord.add_roles(r) File "C:\Users\stard\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\discord\member.py", line 1051, in add_roles await req(guild_id, user_id, role.id, reason=reason) File "C:\Users\stard\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\discord\http.py", line 739, in request raise Forbidden(response, data) discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
相关代码片段
reset函数
async def reset(self, ctx: discord.ext.commands.Context): print("Deleting roles on users") overwrite = discord.PermissionOverwrite() overwrite.view_channel = False roles = list(ctx.guild.roles) print(roles) for element in roles: if element.name not in ["1","2","3","4","5","6","7","8","9"]: roles.remove(element) for role in roles: await self.werewolf_channel.set_permissions(role, overwrite=overwrite) await self.specials_channel.set_permissions(role, overwrite=overwrite) for user in self.player_list: for role in roles: try: await user.discord.remove_roles(role) except Exception as error: print(error)
assign_roles函数
async def assign_roles(self, ctx: discord.ext.commands.Context): print("Attributing roles") werewolf_channel = self.werewolf_channel specials_channel = self.specials_channel roles = list(ctx.guild.roles) print(roles) for element in roles: if element.name not in ["1","2","3","4","5","6","7","8","9"]: roles.remove(element) random.shuffle(roles) print(roles) for index, player in enumerate(self.player_list): r = roles[index] if player.role == "werewolf": await player.discord.add_roles(r) overwrite = discord.PermissionOverwrite() overwrite.read_message_history = False await werewolf_channel.set_permissions(r, overwrite=overwrite) if player.role in ["president", "cupidon", "hunter", "witch", "stealer"]: await player.discord.add_roles(r) overwrite = discord.PermissionOverwrite() overwrite.read_message_history = False await specials_channel.set_permissions(r, overwrite=overwrite) else: await player.discord.add_roles(r)
权限配置说明
- 已确认Scopes配置正确,机器人拥有管理员及Manage Roles权限;
- 机器人角色DisDawn的层级高于所有目标角色;
- 代码中已配置必要的Intents:
intents = discord.Intents.default() intents.message_content = True intents.reactions = True intents.members = True overwrite = discord.PermissionOverwrite() overwrite.read_messages = False overwrite.manage_channels = True overwrite.manage_roles = True bot = commands.Bot(command_prefix="!", intents=intents, overwrite=overwrite)
修复方案
1. 修复角色筛选逻辑
遍历列表时直接调用remove()会导致列表索引混乱,跳过部分元素。从日志可见,筛选后的角色列表混入了Machine_control角色,机器人没有权限操作该角色,从而触发403错误。
将角色筛选代码替换为列表推导式,确保只保留目标角色:
# 替换原来的for循环删除逻辑 roles = [r for r in ctx.guild.roles if r.name in {"1","2","3","4","5","6","7","8","9"}]
2. 移除Bot初始化的无效参数
commands.Bot构造函数没有overwrite参数,该配置完全无效,直接删除相关代码:
intents = discord.Intents.default() intents.message_content = True intents.reactions = True intents.members = True # 删除以下无效代码块 # overwrite = discord.PermissionOverwrite() # overwrite.read_messages = False # overwrite.manage_channels = True # overwrite.manage_roles = True bot = commands.Bot(command_prefix="!", intents=intents)
3. 验证机器人角色层级
确保机器人角色DisDawn在服务器角色列表中位置高于所有1-9角色(Discord角色层级从上到下递减,上方角色权限优先级更高)。如果机器人角色在目标角色下方,即使拥有管理员权限,也无法操作这些角色。
4. 优化角色操作效率
批量操作角色减少API调用,比如删除用户角色时可以一次传入所有目标角色:
# 替换原来的嵌套循环删除 for user in self.player_list: await user.discord.remove_roles(*roles)
内容的提问来源于stack exchange,提问作者Stardaz
相关产品推荐
相关产品推荐

