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

能否使用discord.js给Discord自机器人消息附加本地图片?

解决Discord自机器人本地图片附件发送失败的问题

你的代码核心问题是直接将二进制文件数据放在JSON请求体中——Discord的文件上传接口要求使用multipart/form-data格式提交数据,JSON无法正确处理二进制内容,导致图片附件被忽略,仅文本发送成功。

修改后的代码

首先安装依赖包:

npm install form-data

替换原有代码为:

const fetch = require('node-fetch')
const fs = require('fs');
const FormData = require('form-data');

(async () => {
    // 发送带本地文件的消息
    async function sendMessageWithFile(channelOrThreadId, message, filePath) {
        const formData = new FormData();
        
        // 添加文本内容
        formData.append('content', message);
        
        // 添加本地文件(用文件流更高效)
        const fileStream = fs.createReadStream(filePath);
        formData.append('files[0]', fileStream, { filename: 'chosen.png' }); // 请匹配实际文件扩展名

        // 调用Discord官方API发送消息
        const response = await fetch(`https://discord.com/api/v9/channels/${channelOrThreadId}/messages`, {
            method: 'POST',
            headers: {
                'Authorization': 'YOUR_AUTH_TOKEN', // 替换为你的Discord账号Token
                ...formData.getHeaders() // 自动生成multipart/form-data请求头
            },
            body: formData
        });

        if (!response.ok) {
            throw new Error(`请求失败: ${response.status} ${response.statusText}`);
        }

        return await response.json();
    }

    // 使用示例
    const channelId = '你的频道ID';
    const filePath = '本地图片的绝对/相对路径';
    sendMessageWithFile(channelId, '这是本地图片:', filePath)
        .then(sentMessage => console.log('消息发送成功:', sentMessage))
        .catch(error => console.error('发送失败:', error));
})()

关键修改说明

  • 用form-data包构建符合Discord要求的请求体,解决二进制文件传输的格式问题
  • 使用fs.createReadStream读取文件,比直接读二进制数据更高效且适配FormData规范
  • 直接调用Discord官方API,确保请求头和请求体格式完全符合要求(避免原有api.sendMessage的JSON请求限制)

注意事项

  • 替换代码中的YOUR_AUTH_TOKEN、频道ID和文件路径为实际值
  • 文件名要和实际文件类型匹配(如jpg/png等)
  • 再次提醒:Discord官方明确禁止自机器人使用,即使个人项目也存在账号永久封禁风险,请谨慎操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:08:23