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

Discord.js升级后报错TypeError: client.users.get不是函数求助

问题分析与解决办法

错误原因

你遇到的TypeError: client.users.get is not a function,是因为discord.js从v12版本开始重构了数据存储结构——所有用户、角色、成员等实体都被移到了对应的cache集合中,旧版v11直接调用client.users.get()的方式已被移除。

除了这个错误,你的代码里还有其他几处和版本升级不兼容的API用法,下面一并修正。

具体修正步骤

1. 替换client.users.get

将client.users.get('BOTSCLIENTID')改为client.users.cache.get('BOTSCLIENTID'),必须通过cache集合才能访问用户数据。

2. 替换废弃的message.isMentioned

message.isMentioned()方法在v12已被废弃,改用message.mentions.users.has()来检查是否提及了指定用户:

// 原代码
if (message.isMentioned(client.users.get('BOTSCLIENTID')))
// 替换为
if (message.mentions.users.has('BOTSCLIENTID'))

3. 修正角色查找逻辑

角色集合同样需要通过cache访问,把message.guild.roles.find改为message.guild.roles.cache.find。

4. 替换member.addRole

v12中添加角色的方法从member.addRole(role)改为member.roles.add(role),角色操作被整合到了member.roles对象下。

修正后的完整代码

// add and remove roles
if (msg.includes(prefix + 'SUBSCRIBE')) {
    if (message.mentions.users.has('BOTSCLIENTID')) {
        message.channel.send("I cannot subscribe to myself, but if I could I would.")
        return
    }
} else if (msg.startsWith(prefix + 'SUBSCRIBE')) {
    let role = message.guild.roles.cache.find(r => r.name === "subscriber");
    let member = message.mentions.members.first();

    // 提前判断角色和成员是否存在,避免无意义报错
    if (!role) return message.channel.send("未找到subscriber角色");
    if (!member) return message.channel.send("请提及要添加角色的成员");

    member.roles.add(role).catch(console.error);
    message.channel.send("You have successfully subscribed.");
}

版本变化关键点总结

  • 缓存系统重构:v12开始,discord.js引入缓存管理器,所有用户、角色、成员、频道等数据都需要通过对应实体的cache属性访问,比如client.users.cache、message.guild.roles.cache。
  • API方法迁移:很多实例方法被重构,比如角色添加/移除从member.addRole()/member.removeRole()迁移到member.roles.add()/member.roles.remove()。
  • 废弃方法移除:像message.isMentioned()这类旧方法被废弃,改用更精准的mentions集合的has()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:13:15