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

升级discord.js v13后Discord机器人无法向频道发消息报错TypeError如何解决

问题原因及解决方案

核心原因

discord.js v13确实存在大量破坏性API调整,你的报错主要来自两个问题:

  • discclient.channels.fetch() 是异步方法,返回Promise对象,你没有等待异步返回就直接调用send方法,此时拿到的不是有效频道实例,自然会提示读取send属性失败
  • v13强制要求客户端初始化时声明网关意图,缺少必要意图会导致无法正常获取频道、发送消息

修复步骤

1. 处理异步调用,添加错误校验

优先使用async/await写法(需在外层函数添加async修饰):

try {
  // 等待异步获取频道完成
  const channel = await discclient.channels.fetch(item.channel[i]);
  // 校验频道存在且为可发送消息的文本类频道
  if (channel?.isText()) {
    await channel.send({ embeds: [msgembed] });
  }
} catch (err) {
  // 捕获频道不存在、无权限等异常
  console.error('操作失败:', err);
}

也可使用.then链式调用:

discclient.channels.fetch(item.channel[i])
  .then(channel => {
    if (channel?.isText()) {
      return channel.send({ embeds: [msgembed] });
    }
  })
  .catch(err => console.error('操作失败:', err));

2. 校验客户端初始化配置

v13要求运行环境Node.js版本 ≥ 16.6.0,且初始化Client时必须声明所需的网关意图,示例配置如下:

const { Client, Intents } = require('discord.js');
const discclient = new Client({
  intents: [
    Intents.FLAGS.Guilds, // 必须,用于获取服务器、频道相关数据
    Intents.FLAGS.GuildMessages, // 如需发送服务器频道消息需添加
    // 其他功能对应意图按需添加
  ]
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:05