Почему Canvas не работает внутри оператора If?

#javascript #canvas #discord.js #repl.it

Вопрос:

Я пытаюсь сделать так, чтобы в моем коде отображался только фрагмент текста, когда база данных дает определенное значение.

 const canvas = Canvas.createCanvas(250, 250);
const ctx = canvas.getContext('2d');

ctx.fillStyle = message.content;
ctx.fillRect(0, 0, canvas.height, canvas.width)

db.get("label" message.author.id).then(value => {
   console.log(value)
   if(value == 'on') {
     console.log('true')
       ctx.font = '40px Poppins';
       ctx.fillStyle = '#ffffff';
     ctx.strokeStyle = '#000000'
     ctx.lineWidth = 1; 
       ctx.fillText(message.content, canvas.width/10,       canvas.height / 2   20);
          ctx.strokeText(message.content, canvas.width/10, canvas.height / 2   20);
   }
})
       

Это то, что у меня есть до сих пор. К сожалению, независимо от значения в базе данных, он не добавит текст. Я протестировал его без этого материала, и он добавляет текст. Может кто-нибудь сказать мне, как это исправить?

Изменить: Вот мой полный и полный код для этой проблемы:

   if(message.content.startsWith('#') amp;amp; message.content.length == 7) {
      const canvas = Canvas.createCanvas(250, 250);
        const ctx = canvas.getContext('2d');

      ctx.fillStyle = message.content;
      ctx.fillRect(0, 0, canvas.height, canvas.width)

      db.get("label" message.author.id).then(value => {
        console.log(value)
        if(value == 'on') {
          console.log('true')
            ctx.font = '40px Poppins';
            ctx.fillStyle = '#ffffff';
          ctx.strokeStyle = '#000000'
          ctx.lineWidth = 1; 
            ctx.fillText(message.content, canvas.width/10, canvas.height / 2   20);
          ctx.strokeText(message.content, canvas.width/10, canvas.height / 2   20);
        }
      })
      

      
        
  const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'color.png');
  message.channel.send(attachment)
 } 

Комментарии:

1. Поддерживается ли холст в discord ? (Я предполагаю, что вы пишете своего рода бота). Я ничего не писал для discord, так что я действительно не знаю

2. Также, что вы получаете, когда выполняете console.log(значение);

Ответ №1:

Вы не отправляете изображение на холсте, вы просто создаете его. Когда вы закончите создавать изображение, вам следует использовать Canvas#toBuffer, чтобы сделать его совместимым с discordjs#MessageAttachment.

   const { MessageAttachment } = require('discord.js')
  const canvas = Canvas.createCanvas(250, 250);
  const ctx = canvas.getContext('2d');

  ctx.fillStyle = message.content
  ctx.fillRect(0, 0, canvas.height, canvas.width)

  db.get('label'   message.author.id).then(value => {
    console.log(value)
    if (value == 'on') {
      console.log('true')
      ctx.font = '40px Poppins'
      ctx.fillStyle = '#ffffff'
      ctx.strokeStyle = '#000000'
      ctx.lineWidth = 1
      ctx.fillText(message.content, canvas.width / 10, canvas.height / 2   20)
      ctx.strokeText(message.content, canvas.width / 10, canvas.height / 2   20)
      message.reply({
        files: [new MessageAttachment(canvas.toBuffer(), 'fileName.png')]
      })
    }
  })
 

Комментарии:

1. Да, я пропустил эту часть кода, но она у меня есть.