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

Node.js Discord消息转HTML备份代码异常:莫名发送jpg文件求助

问题排查与解决方案

可能原因分析

你的代码本身仅生成并发送HTML格式的聊天备份文件,并未主动添加file.jpg附件。出现这个问题的大概率原因如下:

  • 目标频道内存在带有file.jpg附件的消息,且机器人的其他逻辑(你未提供的代码)触发了附件发送;
  • 你使用的discord-fetch-all第三方库存在异常行为,在获取消息时意外附加了附件;
  • Discord客户端的预览机制被误判,实际并未发送该文件(仅HTML链接触发了预览)。

具体排查与修复步骤

  1. 替换消息获取逻辑,排除第三方库干扰
    改用discord.js原生的消息获取方法,替代fetchAll.messages,避免第三方库的未知行为:

    // 替换原fetchAll.messages的代码
    const messages = [];
    let lastId;
    while (true) {
      const fetched = await interaction.channel.messages.fetch({ limit: 100, before: lastId });
      if (fetched.size === 0) break;
      messages.push(...fetched.values());
      lastId = fetched.last().id;
    }
    messages.reverse(); // 对应原代码的reverseArray: true
    
  2. 验证发送附件的唯一性
    在发送前打印files数组,确认仅包含你生成的HTML备份文件:

    // 在await interaction.reply前添加
    console.log(files);
    // 正常输出应为:[ AttachmentBuilder { ... filename: 'backup-xxx.html' ... } ]
    
  3. 排查机器人其他代码逻辑
    检查机器人是否有其他监听interactionCreate的代码块,或其他地方调用interaction.reply/interaction.followUp时附加了file.jpg。

  4. 添加HTML转义,避免XSS风险(可选优化)
    你的代码直接将用户输入插入HTML,存在XSS风险,建议添加转义函数:

    function escapeHtml(text) {
      return text.replace(/[&<>"']/g, char => ({
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
      }[char]));
    }
    

    生成HTML时使用escapeHtml(msg.author.username)、escapeHtml(msg.content)等包裹用户输入内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:43:18