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

Discord.js v13 无法通过URL发送PNG文件附件问题咨询

问题原因

Discord.js v13配套使用的Discord API v9有两个核心变更导致旧代码失效:

  1. 废弃了channel.send(content, options)的双参数传参方式,所有消息配置必须统一放在第一个入参对象中
  2. 禁止直接加载非HTTPS协议的外部媒体资源,你的测试链接是HTTP协议,会被直接拦截

可用解法

方案1:源站支持HTTPS时直接使用(推荐)

先将资源链接替换为HTTPS协议,显式构造MessageAttachment对象后发送,稳定性更高:

// 引入所需构造类
const { MessageAttachment } = require('discord.js');

const testchart = `https://jegin.net/testchart2.php?sysid=268.png`;
const chartAttachment = new MessageAttachment(testchart, 'file.png');

message.channel.send({
  content: `Last updated ${updatedAt.fromNow()}`,
  files: [chartAttachment]
});

方案2:源站不支持HTTPS时用中转方式

如果资源只能走HTTP获取,先拉取资源到内存Buffer后再发送:

const fetch = require('node-fetch');
const { MessageAttachment } = require('discord.js');

const testchart = `http://jegin.net/testchart2.php?sysid=268.png`;
// 先请求资源转成Buffer
const imgResponse = await fetch(testchart);
const imgBuffer = await imgResponse.buffer();
const chartAttachment = new MessageAttachment(imgBuffer, 'file.png');

message.channel.send({
  content: `Last updated ${updatedAt.fromNow()}`,
  files: [chartAttachment]
});

之前写法错误说明

  • 第一种、第二种写法保留了v12的双参数传参逻辑,属于已废弃的调用方式,不会被正常解析
  • 第三种写法虽然传参格式正确,但因为传入的是HTTP协议的URL,被Discord API直接拦截所以无法加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:07