Node.js Discord消息转HTML备份代码异常:莫名发送jpg文件求助
问题排查与解决方案
可能原因分析
你的代码本身仅生成并发送HTML格式的聊天备份文件,并未主动添加file.jpg附件。出现这个问题的大概率原因如下:
- 目标频道内存在带有
file.jpg附件的消息,且机器人的其他逻辑(你未提供的代码)触发了附件发送; - 你使用的
discord-fetch-all第三方库存在异常行为,在获取消息时意外附加了附件; - Discord客户端的预览机制被误判,实际并未发送该文件(仅HTML链接触发了预览)。
具体排查与修复步骤
替换消息获取逻辑,排除第三方库干扰
改用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验证发送附件的唯一性
在发送前打印files数组,确认仅包含你生成的HTML备份文件:// 在await interaction.reply前添加 console.log(files); // 正常输出应为:[ AttachmentBuilder { ... filename: 'backup-xxx.html' ... } ]排查机器人其他代码逻辑
检查机器人是否有其他监听interactionCreate的代码块,或其他地方调用interaction.reply/interaction.followUp时附加了file.jpg。添加HTML转义,避免XSS风险(可选优化)
你的代码直接将用户输入插入HTML,存在XSS风险,建议添加转义函数:function escapeHtml(text) { return text.replace(/[&<>"']/g, char => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[char])); }生成HTML时使用
escapeHtml(msg.author.username)、escapeHtml(msg.content)等包裹用户输入内容。
内容的提问来源于stack exchange,提问作者Hosein Fi
相关产品推荐
相关产品推荐

