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

使用discord.js修改昵称时遇权限缺失及Promise拒绝错误

解决Discord.js机器人的权限错误与未处理Promise问题

我来帮你搞定这两个问题!你遇到的错误其实分为两类:权限不足和未处理的Promise拒绝,咱们一步步解决:

1. 解决「Missing Permissions」错误

这个错误的核心原因是机器人没有足够的权限修改成员昵称,或者角色层级不够:

  • 步骤1:赋予机器人正确权限
    进入你的Discord服务器设置 → 角色 → 找到机器人的角色,确保开启了「管理昵称(Manage Nicknames)」权限(这个权限允许机器人修改所有成员的昵称,完全适配你的场景)。
  • 步骤2:调整机器人角色层级
    机器人的角色必须高于你要修改昵称的成员的最高角色,不然Discord会阻止修改操作。把机器人的角色拖到服务器角色列表里的较高位置即可。

2. 解决「UnhandledPromiseRejectionWarning」错误

因为你用了async函数,但setNickname返回的Promise如果失败(比如权限不足),没有被捕获处理,导致警告。我们需要用try/catch来捕获错误:

修改后的完整代码

client.on("message", async (message) => {
  // 避免机器人自己触发消息,防止循环执行
  if (message.author.bot) return;

  const roles = {
    헢헪헡험헥: "Owner",
    ADMIN: "[ADM]",
    Moderador: "[MOD]",
    DcMod: "[DC]",
    Booster: "[BOOST]",
    Usuario: "[USER]"
  };

  // 判断用户的最高角色,无额外角色则默认用Usuario
  const nombrerol = message.member.roles.cache.size <= 1 ? "Usuario" : message.member.roles.highest.name;
  // 确保角色前缀存在,避免出现undefined
  const rolePrefix = roles[nombrerol] || roles.Usuario;
  const newNickname = `${rolePrefix} ${message.author.username}`;

  try {
    await message.member.setNickname(newNickname);
    console.log(`成功修改${message.author.tag}的昵称为:${newNickname}`);
  } catch (error) {
    console.error(`修改昵称失败:`, error);
    // 可选:给用户发送提示
    // message.reply("抱歉,我没有权限修改你的昵称,请检查我的角色权限和层级!");
  }
});

代码里的额外优化

  • 增加了if (message.author.bot) return;,避免机器人处理自己的消息导致无限循环。
  • 加了rolePrefix的默认值,防止用户的最高角色不在你的roles对象里时出现undefined前缀。
  • 用try/catch捕获所有修改昵称时的错误,同时在控制台打印错误信息,方便调试。

最后检查

  1. 重启机器人,确保权限和角色层级的修改生效。
  2. 测试时用一个角色层级低于机器人的普通用户发送消息,看昵称是否正常修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:45