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

拥有管理员权限的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:31