DiscordJS Canvas 附件未完全发送?

Posted

技术标签:

【中文标题】DiscordJS Canvas 附件未完全发送?【英文标题】:DiscordJS Canvas attachments not being fully sent? 【发布时间】:2020-11-01 23:17:19 【问题描述】:

我目前正在为我的机器人使用 Discord.js 和 Node,它以设定的时间间隔发送附件。我遇到了一个问题,有时附件没有完全加载(它们无限期地加载,只有当我点击“打开原件”时,我才能看到图像的前几个像素)。为什么是这样?是不是发送附件时附件文件不完整?

将图像添加到文件中

async function makeCanvas(img, code, channel) 
  const canvas = createCanvas(900, 1375);
  const ctx = canvas.getContext("2d");
  ctx.fillStyle = "#000000";
  ctx.fillRect(0, 1255, 900, 120);
  let image = await loadImage(img);
  ctx.drawImage(image, 0, -40);
  ctx.font = "bold 100px sans-serif'";
  ctx.textAlign = "center";
  ctx.fillStyle = "#FFFFFF";
  ctx.fillText(`$code`, 435, 1350);
  const writeable = fs.createWriteStream(`./temp/$channel.id.png`);
  const readable = canvas.createPNGStream();
  const connection = readable.pipe(writeable);
  return connection.path;

发送附件

const imgCode = await applyCodeToImg(url, code, message.channel);
await message.channel.send("A new attachment has appeared!", new Discord.MessageAttachment(imgCode));

我对 javascript 和 Node 还是很陌生,请多多包涵!

【问题讨论】:

【参考方案1】:

你可以使用

message.channel.send("message",  files: [canvas.toBuffer()] );

const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'image.png');

message.channel.send("message", attachment);

要直接发送附件,而不使用 fs 保存它,请务必查看 Canvas#toBuffer() 了解有关 API 的更多信息,并查看 discordjs.guide 了解基本图像加载。

【讨论】:

【参考方案2】:
const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'image.png');

message.channel.send("A new attachment has appeared!", attachment);

【讨论】:

以上是关于DiscordJS Canvas 附件未完全发送?的主要内容,如果未能解决你的问题,请参考以下文章

DiscordJS Canvas 静默失败。为啥?

node-canvas 中的 registerFont() 未解析 Firebase Cloud Functions 上的字体

Discord JS 附件

PHP不发送带有附件的邮件

Discord JS - 从附件下载图像

Yagmail脚本未发送多个附件