discord.js 获取画布附件的 URL

Posted

技术标签:

【中文标题】discord.js 获取画布附件的 URL【英文标题】:discord.js Getting the URL Of Canvas Attachment 【发布时间】:2021-10-28 23:46:30 【问题描述】:

我正在尝试获取附件的 URL 并将其发送到频道,我尝试使用 attachment.url 但我收到了 undefined 这是我的代码:

client.on('message', async message => 

            if (message.author.bot || message.channel.type === 'dm') return;
            if (message.content.toLowerCase().indexOf(prefix.toLowerCase()) !== 0) return;
            var args = message.content.slice(prefix.length).trim().split(/ +/g);
            var command = args.shift().toLowerCase();

            if(command =='image')
            let args = message.content.split(" ").slice(1).join(' ');
            const canvas = Canvas.createCanvas(400, 140);
            const ctx = canvas.getContext('2d')
         
     
                ctx.fillStyle = '#ffffff';
                ctx.font = '150px serif';
                ctx.shadowColor = 'black';
                ctx.shadowBlur = 5;
                ctx.fillText(`$args`, 0, 118);
                ctx.strokeStyle = '#000000';
                ctx.strokeText(`$args`, -1, 118);
                ctx.textAlign = "center";
               
               const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'image.png')
               
        message.channel.send(`\`$attachment.url\``)
        )

【问题讨论】:

【参考方案1】:

您确实只能在发送附件 之后获取附件的 Discord URL。一个简单的方法是使用async/await:

client.on('message', async message => 

  if (message.author.bot || message.channel.type === 'dm') return;
  if (message.content.toLowerCase().indexOf(prefix.toLowerCase()) !== 0) return;
  var args = message.content.slice(prefix.length).trim().split(/ +/g);
  var command = args.shift().toLowerCase();

  if (command === 'image') 
    const args = message.content.split(' ').slice(1).join(' ');
    const canvas = Canvas.createCanvas(400, 140);
    const ctx = canvas.getContext('2d');

    ctx.fillStyle = '#ffffff';
    ctx.font = '150px serif';
    ctx.shadowColor = 'black';
    ctx.shadowBlur = 5;
    ctx.fillText(`$args`, 0, 118);
    ctx.strokeStyle = '#000000';
    ctx.strokeText(`$args`, -1, 118);
    ctx.textAlign = 'center';
     
    const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'image.png');
     
    const reply = await message.channel.send( files: [attachment] );
    const attachmentURL = reply.attachments.first().url;
  

);

【讨论】:

【参考方案2】:

我很确定您在发送之前无法获取它的 url,您需要先发送附件,然后再尝试获取它的 url。

【讨论】:

以上是关于discord.js 获取画布附件的 URL的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 消息附件图片

DIScord.js 将附件放入嵌入的缩略图中不显示

读取文件附件(例如;.txt 文件)- Discord.JS

Discord.js 使用画布制作图像会引发错误 Canvas.createCanvas 不是函数

Discord JS - 从附件下载图像

Discord JS 欢迎消息画布问题