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

Discord.js自动发送突发新闻更新功能故障求助

问题排查与修复方案

针对你的Discord.js机器人自动发送新闻失效的问题,结合代码分析出以下核心问题及修复方案:

核心问题分析

  1. 频道类型判断错误:Discord.js v14+中,文本频道的类型常量是ChannelType.GuildText,而非字符串'text',导致无法匹配到目标频道。
  2. 新闻数据未定时更新:fetchData()仅在机器人启动时执行一次,后续cron任务发送的始终是初始数据(可能为空)。
  3. 冗余的本地API调用:sendPromptNews中通过本地HTTP请求获取新闻完全没必要,直接使用全局变量即可,额外的请求环节增加了出错概率。
  4. 异步操作未正确处理:channel.send是异步函数,用forEach遍历发送会导致未捕获的Promise错误,无法及时发现问题。

具体修复步骤

1. 修正频道类型判断

首先导入ChannelType常量:

const { Client, GatewayIntentBits, ChannelType } = require('discord.js');

然后修改sendPromptNews中的频道查找逻辑(直接用ID查找比遍历更高效):

const channel = guild.channels.cache.get('1111638079103574159');
// 若需保留类型校验,改为:
// const channel = guild.channels.cache.find(channel => channel.type === ChannelType.GuildText && channel.id === '1111638079103574159');

2. 定时更新新闻数据

修改cron任务,每次执行时先重新抓取最新新闻,再执行发送逻辑:

cron.schedule('*/10 * * * * *', async () => {
  await fetchData(); // 先更新新闻数据
  sendPromptNews();
});

3. 移除冗余的本地API调用

直接使用全局promptNews变量,替代HTTP请求:

const sendPromptNews = async () => {
  if (!targetGuildId) return;

  const guild = bot.guilds.cache.get(targetGuildId);
  if (!guild) {
    console.log('目标服务器不存在');
    return;
  }

  const channel = guild.channels.cache.get('1111638079103574159');
  if (!channel) {
    console.log('目标频道不存在');
    return;
  }

  try {
    if (promptNews.length === 0) {
      console.log('暂无突发新闻');
      return;
    }
    const newsData = promptNews.map(item => `${item.title}\n${url}${item.link}`);
    // 用for...of处理异步发送,确保错误可捕获
    for (const data of newsData) {
      await channel.send(`Breaking Automatic News:\n\n${data}`);
    }
  } catch (error) {
    console.error('发送新闻失败:', error);
    await channel.send('获取或发送新闻时发生错误');
  }
};

4. 增加日志排查(可选)

在关键节点添加日志,方便快速定位问题:

const sendPromptNews = async () => {
  console.log('触发自动发送任务');
  if (!targetGuildId) {
    console.log('未设置目标服务器ID');
    return;
  }
  // 其他逻辑节点按需添加日志
};

5. 优化cron表达式(可选)

*/10 * * * * *表示每10秒执行一次,实际生产环境建议调整为更合理的间隔(比如每5分钟:*/5 * * * *),避免频繁请求目标网站触发反爬机制。

额外建议

  • 对抓取的新闻做去重处理,避免重复发送相同内容。
  • 给机器人配置完整的频道权限(SendMessages、EmbedLinks等),确保发送消息权限无遗漏。
  • 避免直接修改全局变量,可考虑用类封装新闻数据,提升代码可维护性。

内容的提问来源于stack exchange,提问作者SYED SAAD ALI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:23:09