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

Discord服务器批量修改全体成员昵称脚本报错问题问询

报错原因
  • 核心错误是你错误将members变量赋值为msg.guild.id,这是字符串类型的服务器ID,并非成员集合。你遍历字符串的单个字符调用setNickname方法,该方法不存在,因此抛出类型错误。
  • 次要问题1:await msg.guild.members.cache是无效写法,cache是本地已缓存的成员集合,默认只包含活跃/在线成员,要获取全量成员(含离线不活跃成员)需要调用members.fetch()接口拉取。
  • 次要问题2:你提前定义了指定ID的服务器变量guild但后续完全没有使用,逻辑不一致,如果你要固定修改指定ID服务器的昵称就使用该变量,修改消息所在服务器昵称可以删除冗余的guild定义。
修复后代码(适配discord.js v12/v13版本)
module.exports.run = async (client, msg, args, config) => {
    msg.delete();
    // 校验机器人是否有管理昵称权限
    if(!msg.guild.me.hasPermission("MANAGE_NICKNAMES")) return console.log('该命令需要管理昵称权限')
    const targetNick = args.join(" ")
    // 昵称长度校验
    if (targetNick.length > 32) return msg.reply('昵称不能超过32个字符')
    // 拉取全量服务器成员,解决仅能获取活跃成员的问题
    const allMembers = await msg.guild.members.fetch()
    console.log(`共需要修改 ${allMembers.size} 名成员的昵称,请稍候`)
    // 遍历所有成员修改昵称
    for (const member of allMembers.values()) {
        // 跳过服务器所有者,Discord限制无法修改所有者昵称
        if (member.id === msg.guild.ownerId) continue
        try {
            await member.setNickname(targetNick)
        } catch (err) {
            // 捕获权限不足的错误,避免脚本直接崩溃
            console.log(`修改成员 ${member.user.tag} 的昵称失败:`, err.message)
        }
    }
    console.log('  [+] 服务器内所有可修改的成员昵称已全部修改完成'.green)
}
额外注意事项
  • 需要前往Discord开发者后台对应应用的Bot设置页,开启Server Members Intent开关,否则无法拉取全量服务器成员。
  • 机器人的角色排序需要高于所有你要修改昵称的成员的角色排序,否则会触发权限不足修改失败,脚本已加错误捕获,失败会打印日志不会崩溃。
  • 若服务器成员数量较多,建议在循环中加入几十毫秒的延迟,避免短时间请求过多触发Discord速率限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:09:02