diff --git a/commands/images/nolight.js b/commands/images/nolight.js new file mode 100644 index 0000000..9165769 --- /dev/null +++ b/commands/images/nolight.js @@ -0,0 +1,80 @@ +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 img/nolight.png img/frame00*.png /f'); + console.log(`stdout: ${stdout}`); + console.log(`stderr: ${stderr}`); + if (stdout.includes('all done')) { + return message.channel.send({files: ['./img/nolight.png']}); + } else { + return message.channel.send('An error has occured :(('); + } + } + apng(); + } +} + +module.exports = nolightCommand; \ No newline at end of file