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

Express开发Discord机器人报TypeError: botGuilds.find is not a function解决方案

问题原因

TypeError: botGuilds.find is not a function报错的核心是getMutualGuilds函数接收的botGuilds参数不是数组类型,因此不具备数组的find方法。


排查步骤

  • 先验证getBotGuilds()的返回值格式,在调用getMutualGuilds前添加打印语句:console.log(typeof guilds, Array.isArray(guilds), guilds),确认返回值是否为数组
  • 常见的botGuilds非数组场景:
    • 调用Discord接口请求失败,返回值为错误对象、null或undefined
    • 接口返回嵌套结构,guild列表被包裹在响应对象的data字段中,直接将整个响应对象传入了函数
    • 使用discord.js相关API时,返回的是GuildManager实例而非原始数组,需要额外转换为数组格式

修复方案

  1. 先给getMutualGuilds添加参数校验,避免异常场景下程序崩溃,同时去掉多余的await调用(该方法是同步方法,不需要await):
// utils.js修改后代码
function getMutualGuilds(userGuilds, botGuilds) {
    if (!Array.isArray(userGuilds) || !Array.isArray(botGuilds)) return []
    return userGuilds.filter((guild) => botGuilds.find((botGuild) => (botGuild.id === guild.id) && (guild.permissions & 0x20) === 0x20))
}

// 路由调用处去掉await
const mutualguilds = getMutualGuilds(userGuilds, guilds);
  1. 根据getBotGuilds的实现逻辑调整返回值格式:
    • 如果是用axios等请求库调用Discord开放接口,取响应的data字段:const guilds = (await getBotGuilds()).data
    • 如果是用discord.js的客户端实例获取guild列表,转换为数组:const guilds = client.guilds.cache.map(g => g.toJSON())

内容的提问来源于stack exchange,提问作者musicas e fabulas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:36:03