拥有管理员权限的Discord机器人仍无法删除角色?求助排查
Discord机器人on_guild_join事件角色删除权限异常问题
问题描述
机器人为服务器管理员账号,权限检查显示manage_roles权限正常(值为True),且在普通命令或on_ready事件中能正常增删角色,但在on_guild_join事件内执行角色删除操作时,触发403权限错误:
await test_role.delete() raise Forbidden(response, data) discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
权限验证结果
执行以下代码验证机器人权限,确认manage_roles权限存在:
for _ in guild.me.guild_permissions: print(_) >>> ... >>> ('manage_roles', True) >>> ...
触发问题的代码片段
@bot.event async def on_guild_join(guild): test_role = discord.utils.get(guild.roles, name='test-role') if test_role: await test_role.delete() else: test_role = await guild.create_role(name='test-role')
解决方法
- 检查角色层级:Discord规则是机器人无法删除层级高于自身的角色。查看服务器角色列表,确认
test-role的位置是否在机器人角色之上,若如此,将机器人角色拖动到该角色上方即可解决。 - 刷新服务器缓存:机器人刚加入服务器时,
guild.me的权限缓存可能未完全加载,通过fetch_me()强制刷新后再执行操作:
@bot.event async def on_guild_join(guild): # 强制刷新机器人在服务器的信息 await guild.fetch_me() test_role = discord.utils.get(guild.roles, name='test-role') if test_role: await test_role.delete() else: test_role = await guild.create_role(name='test-role')
- 添加操作延迟:部分服务器会对新加入的机器人有短暂权限生效延迟,通过延迟执行操作规避:
import asyncio @bot.event async def on_guild_join(guild): await asyncio.sleep(5) # 延迟5秒等待权限完全生效 test_role = discord.utils.get(guild.roles, name='test-role') if test_role: await test_role.delete() else: test_role = await guild.create_role(name='test-role')
内容的提问来源于stack exchange,提问作者hwhat
相关产品推荐
相关产品推荐

