const { Command } = require('discord-akairo'); const { createCanvas, loadImage } = require('canvas'); const superagent = require('superagent'); const fs = require('fs'); const util = require('util'); const exec = util.promisify(require('child_process').exec); class nolightCommand extends Command { constructor() { super('nolight', { aliases: ['nolight', 'nl'], category: 'images', args: [ { id: 'text', type: 'string', match: 'rest', default: 'White theme user cant read this :^)' } ], description: { content: 'Send text in an image that light user can\'t read :^)', usage: '', examples: [''] } }); } async exec(message, args) { let text = args.text; message.channel.send('Processing ') .then(loadingmsg => loadingmsg.delete(2000)); const canvas = createCanvas(400, 400); const applyText = (canvas, text) => { const ctx = canvas.getContext('2d'); // Declare a base size of the font let fontSize = 70; do { // Assign the font to the context and decrement it so it can be measured again ctx.font = `${fontSize -= 10}px ubuntu`; } while (ctx.measureText(text).width > 700 - 300); // Return the result to use in the actual canvas return ctx.font; }; const ctx = canvas.getContext('2d'); const { body: buffer } = await superagent.get('https://cdn.discordapp.com/attachments/484013245158522909/551078672132734988/Untitled.png').catch(() => { return message.channel.send('An error as occured, please try again'); }); const bg = await loadImage(buffer); ctx.drawImage(bg, 0, 0, canvas.width, canvas.height); ctx.font = applyText(canvas, text); ctx.fillStyle = '#FFFFFF'; ctx.fillText(text, canvas.width / 10, canvas.height / 9.8); fs.writeFile('./img/frame001.png', canvas.toBuffer(), function (err) { if (err) { return console.error(err); } }); async function apng() { const { stdout, stderr } = await exec('apngasm -o img/nolight.png img/frame00*.png -s') .then(() => message.channel.send({files: ['./img/nolight.png']})); console.log(`stdout: ${stdout}`); console.log(`stderr: ${stderr}`); } apng(); return; } } module.exports = nolightCommand;