From 4bb88b8296ad3e044ba97c24190e373e45b2f169 Mon Sep 17 00:00:00 2001 From: CBenni Date: Sun, 10 Dec 2017 15:03:09 +0100 Subject: [PATCH] Added turtles --- TurtleTemplate.png | Bin 0 -> 46547 bytes index.js | 152 +++++++++++++++++++++++++-------------------- 2 files changed, 86 insertions(+), 66 deletions(-) create mode 100644 TurtleTemplate.png diff --git a/TurtleTemplate.png b/TurtleTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..ba669e4ffeaa228fdf385134c76bfdc2450270e9 GIT binary patch literal 46547 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 - console.log("Getting "+url); - if(url) { - request.get({url:url, encoding: null}, function(e, r, data) { - if(e) { - reject({status: (r && r.statusCode || 500), error: e}); - return; +function render(template, url, size) { + return new Promise((resolve, reject) => { + console.log("Getting " + url); + if (url) { + request.get({ url: url, encoding: null }, function (e, r, data) { + if (e) { + reject({ status: (r && r.statusCode || 500), error: e }); + return; } var img = new Image(); img.src = data; console.log("image loaded"); var width = img.width; var height = img.height; - if(size && size.height) { + if (size && size.height) { height = size.height; - if(!size.width) width = width * size.height / img.height; + if (!size.width) width = width * size.height / img.height; } - if(size && size.width) { + if (size && size.width) { width = size.width; - if(!size.height) height = height * size.width / img.width; + if (!size.height) height = height * size.width / img.width; } - const leftOffset = 475.0; // relative to bee template width - const widthTarget = 600.0; // relative to bee template width - const bottomTarget = 530; // relative to bee template height + const templateScale = width / template.widthTarget; // scale the template to fit the image - const beeScale = width / widthTarget; // scale the bee to fit the image - - const resultingWidth = beeTemplate.width * beeScale; - let resultingHeight = beeTemplate.height * beeScale; + let resultingWidth = template.image.width * templateScale; + let resultingHeight = template.image.height * templateScale; - let imgTop = bottomTarget * beeScale - height; // naive top center position + let imgTop = template.bottomTarget * templateScale - height; // naive top center position - if(imgTop < 0) { + if (imgTop < 0) { resultingHeight -= imgTop; imgTop = 0; } const resultingImgTop = imgTop; - const resultingImgLeft = leftOffset * beeScale - width / 2.0; + const resultingImgLeft = template.leftOffset * templateScale - width / 2.0; - const resultingBeeTop = resultingHeight - beeTemplate.height * beeScale; - const resultingBeeLeft = 0.0; + if(resultingImgLeft + width > resultingWidth) { + resultingWidth = resultingImgLeft + width; + } + + const resultingTemplateTop = resultingHeight - template.image.height * templateScale; + const resultingTemplateLeft = 0.0; var canvas = new Canvas(resultingWidth, resultingHeight); var ctx = canvas.getContext("2d"); - console.log("Drawing first image") + console.log("Drawing template") try { - ctx.drawImage(beeTemplate, resultingBeeLeft, resultingBeeTop, resultingWidth, beeTemplate.height * beeScale); + ctx.drawImage(template.image, resultingTemplateLeft, resultingTemplateTop, template.image.width * templateScale, template.image.height * templateScale); console.log("Drawing done.") - } catch(err) { - reject({status: 400, error: "Invalid template"}) + } catch (err) { + reject({ status: 400, error: "Invalid template" }) } - console.log("Drawing second image") + console.log("Drawing image") try { ctx.drawImage(img, resultingImgLeft, resultingImgTop, width, height); console.log("Drawing done.") - } catch(err) { + } catch (err) { console.error(err); - reject({status: 400, error: "Invalid image"}) + reject({ status: 400, error: "Invalid image" }) } - + // return the image and cache it resolve(canvas); }); } else { - reject({status: 400, error: "No url specified"}); + reject({ status: 400, error: "No url specified" }); } }); } const circleScale = 0.4; const lineWidthScale = 0.2; -const lowerRightFactor = 0.5 + 0.7071*circleScale; // %-ual location of the lower right end of the strikethrough line -const upperLeftFactor = 0.5 - 0.7071*circleScale; // %-ual location of the upper left end of the strikethrough line +const lowerRightFactor = 0.5 + 0.7071 * circleScale; // %-ual location of the lower right end of the strikethrough line +const upperLeftFactor = 0.5 - 0.7071 * circleScale; // %-ual location of the upper left end of the strikethrough line -app.get("/bee/", function(req, res) { - bee(req.query.url).then((canvas)=>{ +app.get("/:templateName/", function (req, res) { + if(!templates[req.params.templateName]) return res.status(404).end(); + render(templates[req.params.templateName], req.query.url).then((canvas) => { console.log(canvas) res.setHeader('Content-Type', 'image/png'); canvas.pngStream().pipe(res); - }).catch((err)=>{ + }).catch((err) => { res.status(err.status).end(err.error); }) }); app.listen(3002, function () { - console.log('Beebot app listening on port 3002!') + console.log('Beebot app listening on port 3002!') }) @@ -114,26 +133,26 @@ app.listen(3002, function () { var client = new Discord.Client({ - autoReconnect: true + autoReconnect: true }); // manage roles permission is required const invitelink = 'https://discordapp.com/oauth2/authorize?client_id=' - + config.discord.client_id + '&scope=bot&permissions=0'; + + config.discord.client_id + '&scope=bot&permissions=0'; const authlink = 'https://discordapp.com/oauth2/authorize?client_id=' - + config.discord.client_id + '&scope=email'; -console.log("Bot invite link: "+invitelink); + + config.discord.client_id + '&scope=email'; +console.log("Bot invite link: " + invitelink); client.login(config.discord.token).catch(function (error) { - if (error) { - console.error("Couldn't login: ", error); - process.exit(15); - } + if (error) { + console.error("Couldn't login: ", error); + process.exit(15); + } }); function findEmoji(str) { const discordEmote = /<:(\w+):(\d+)>/g.exec(str) - if(discordEmote) { + if (discordEmote) { return { name: discordEmote[1], id: discordEmote[2], @@ -142,10 +161,10 @@ function findEmoji(str) { } let unicodeEmoji; - twemoji.parse(str, (name, emoji) =>{ - if(unicodeEmoji) return false; + twemoji.parse(str, (name, emoji) => { + if (unicodeEmoji) return false; unicodeEmoji = { - name, + name, id: name, url: emoji.base + emoji.size + "/" + name + emoji.ext } @@ -156,16 +175,17 @@ function findEmoji(str) { client.on('message', function (message) { console.log(message.cleanContent); - if (message.cleanContent.startsWith("/bee")) { - // get emoji from message - const emoji = findEmoji(message.cleanContent); - if(emoji) bee(emoji.url).then(canvas => { - var messageOptions = { - files: [ - {attachment: canvas.toBuffer(), name: emoji.name.toUpperCase()+"DETECTED.png"} - ] - } - message.channel.send("", messageOptions); - }); - } + const commandParsed = /^\/(\w+)\b/.exec(message.cleanContent); + if (commandParsed && templates[commandParsed[1]]) { + // get emoji from message + const emoji = findEmoji(message.cleanContent); + if (emoji) render(templates[commandParsed[1]], emoji.url).then(canvas => { + var messageOptions = { + files: [ + { attachment: canvas.toBuffer(), name: emoji.name + commandParsed[1] + ".png" } + ] + } + message.channel.send("", messageOptions); + }); + } }); \ No newline at end of file