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

discord.js已更新仍报错msg.guild.roles.find不是函数,求排查原因

解决discord.js中TypeError: msg.guild.roles.find is not a function的问题

嘿,我来帮你搞定这个报错!这个问题其实是discord.js版本更新后API结构变化导致的,很常见,别慌。

问题原因

从discord.js v13版本开始,msg.guild.roles不再是直接的角色集合(Collection),而是变成了GuildRoleManager管理对象——这个管理器本身并没有.find()方法,所以你直接调用就会抛出类型错误。

解决方案

你只需要调整一下调用方式,先获取角色缓存或者拉取最新角色数据:

1. 使用缓存查找(最常用,性能好)

如果你的角色数据已经同步到本地缓存,直接通过cache属性获取角色集合后再调用.find():

// 示例:按角色名称查找
const targetRole = msg.guild.roles.cache.find(role => role.name === "管理员");

2. 实时拉取角色数据(适合刚创建/修改的角色)

如果需要确保拿到最新的角色数据(比如缓存还没同步),可以先用fetch()方法拉取全量角色,再进行查找:

// 注意要使用async/await或者Promise链式调用
const roles = await msg.guild.roles.fetch();
const targetRole = roles.find(role => role.name === "新创建的角色");

额外注意事项

别忘了在初始化客户端时启用必要的intents权限,否则可能无法正常获取角色数据:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds, // 必须启用的服务器基础权限
    GatewayIntentBits.GuildRoles // 获取角色数据需要的权限
  ]
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:47:40