使用Discord.js v13.16.0发送Jimp生成图片失败,仅发送文本
Discord.js v13 成员欢迎图片发送失败解决方案
你遇到的问题是因为Discord.js v13的channel.send()参数格式使用错误,以下是两种正确的实现方式:
方法一:使用本地文件路径发送
直接将生成的图片路径放入files数组,与文本内容一起作为配置对象传入send():
client.on('guildMemberAdd', async (member) => { try { // ... 你的Jimp图片处理代码保持不变 ... await image.writeAsync('outimage.png'); const channel = member.guild.channels.cache.get('1040023057265348671'); // 正确的发送格式:传入包含content和files的对象 await channel.send({ content: `Bem vindo à **Comunidade Extra Life**, ${member}! Espero que gostes da nossa companhia!`, files: ['outimage.png'] }); } catch (error) { console.error('Error:', error); } });
方法二:直接使用Jimp Buffer发送(推荐)
无需保存图片到本地,直接将Jimp处理后的图片转为Buffer生成MessageAttachment,避免多成员同时加入时的文件覆盖问题:
const { MessageAttachment } = require('discord.js'); // 确保导入MessageAttachment client.on('guildMemberAdd', async (member) => { try { // ... 你的Jimp图片处理代码保持不变 ... // 不需要writeAsync保存到本地,直接获取Buffer const imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG); const attachment = new MessageAttachment(imageBuffer, 'welcome-image.png'); // 指定附件文件名 const channel = member.guild.channels.cache.get('1040023057265348671'); // 将Attachment放入files数组 await channel.send({ content: `Bem vindo à **Comunidade Extra Life**, ${member}! Espero que gostes da nossa companhia!`, files: [attachment] }); } catch (error) { console.error('Error:', error); } });
注意事项
- 确保机器人对当前目录有读写权限(方法一需要)
- 所有异步操作(
channel.send()、Jimp的方法)都要加await,避免Promise未处理导致的异常 - 方法二更高效,还能避免多个成员同时加入时,本地图片文件被覆盖的问题
内容的提问来源于stack exchange,提问作者Verygafanhot
相关产品推荐
相关产品推荐

