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

Discord机器人重置昵称遇403权限错误(50013)求助

问题

开发了一款用于重置服务器成员昵称的Discord机器人,运行时触发discord.errors.Forbidden: 403 FORBIDDEN (error code: 50013): Missing Permissions错误。机器人已配置管理员权限,但无法完成所有成员的昵称重置,推测是因为无法修改服务器所有者(本人)的昵称导致的。询问该功能是否可行及解决办法。

代码示例

@bot.command()
@commands.has_permissions(change_nickname=True)
async def reset(ctx):
    for member in ctx.guild.members:
        await member.edit(nick=None)

完整回溯信息

Traceback (most recent call last):
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 229, in wrapped
    ret = await coro(*args, **kwargs)
  File "A:\Py_bot\main.py", line 21, in reset
    await member.edit(nick='Боб') # reset their nickname
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\member.py", line 880, in edit
    data = await http.edit_member(guild_id, self.id, reason=reason, **payload)
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\http.py", line 738, in request
    raise Forbidden(response, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 1349, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 1023, in invoke
    await injected(*ctx.args, **ctx.kwargs)  # type: ignore
  File "C:\Users\Maxos\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 238, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

解决方案

功能可行性说明

Discord内置权限规则明确:服务器所有者的昵称无法被任何机器人(即使拥有管理员权限)修改,你的推测完全正确。此外,机器人也无法修改角色层级高于自身的成员昵称。

具体解决步骤

  • 跳过服务器所有者:遍历成员时加入判断,直接跳过服务器所有者账号,避免触发权限错误。
  • 添加错误捕获:用try-except包裹昵称修改操作,即使遇到其他无法修改的成员(如角色层级更高的用户),机器人也能继续运行,不会直接崩溃。

修改后的代码示例

@bot.command()
@commands.has_permissions(change_nickname=True)
async def reset(ctx):
    for member in ctx.guild.members:
        # 跳过服务器所有者
        if member.id == ctx.guild.owner_id:
            continue
        # 捕获权限错误,避免机器人崩溃
        try:
            await member.edit(nick=None)
        except discord.Forbidden:
            print(f"无法修改成员 {member.name} 的昵称:权限不足")

内容的提问来源于stack exchange,提问作者Noani61

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:50:18