From 77e9a087e875a30a8d0cf52c4831d78fcc4e6b93 Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Sat, 18 Apr 2020 18:03:34 -0400 Subject: [PATCH] Friendship Command --- README.md | 4 +- assets/images/friendship.png | Bin 0 -> 12620 bytes commands/random-seed/friendship.js | 109 +++++++++++++++++++++++++++++ commands/random-seed/ship.js | 25 +------ package.json | 2 +- util/Util.js | 21 ++++++ 6 files changed, 137 insertions(+), 24 deletions(-) create mode 100644 assets/images/friendship.png create mode 100644 commands/random-seed/friendship.js diff --git a/README.md b/README.md index ccd3baed..8cd9778f 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ in the appropriate channel's topic to use it. ## Commands -Total: 384 +Total: 385 ### Utility: @@ -230,6 +230,7 @@ Total: 384 * **butt:** Determines a user's butt quality. * **coolness:** Determines a user's coolness. * **dick:** Determines your dick size. (NSFW) +* **friendship:** Determines how good friends two users are. * **guess-looks:** Guesses what a user looks like. * **iq:** Determines a user's IQ. * **psycho-pass:** Determines your Crime Coefficient. @@ -638,6 +639,7 @@ here. - [astrology.TV](https://astrology.tv/) * horoscope ([Horoscope Data](https://astrology.tv/horoscope/daily/)) - [Attype Studio](https://www.dafont.com/fadli-ramadhan-iskandar.d7339) + * friendship ([Pinky Cupid Font](https://www.dafont.com/pinky-cupid.font)) * ship ([Pinky Cupid Font](https://www.dafont.com/pinky-cupid.font)) - [Axis Order Bot](https://www.reddit.com/r/axisorderbot/wiki/index) * axis-cult (Prayer Data) diff --git a/assets/images/friendship.png b/assets/images/friendship.png new file mode 100644 index 0000000000000000000000000000000000000000..030927f6e90bf5b2f55597964299cdbdee838149 GIT binary patch literal 12620 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 msg.author + } + ] + }); + } + + async run(msg, { first, second }) { + if (first.id === second.id) return msg.reply('You should be good friends with yourself.'); + const calculated = -Math.abs(Number.parseInt(BigInt(first.id) - BigInt(second.id), 10)); + const random = MersenneTwister19937.seed(calculated); + const level = integer(0, 100)(random); + const firstAvatarURL = first.displayAvatarURL({ format: 'png', size: 512 }); + const secondAvatarURL = second.displayAvatarURL({ format: 'png', size: 512 }); + try { + const firstAvatarData = await request.get(firstAvatarURL); + const firstAvatar = await loadImage(firstAvatarData.body); + const secondAvatarData = await request.get(secondAvatarURL); + const secondAvatar = await loadImage(secondAvatarData.body); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'friendship.png')); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(firstAvatar, 70, 56, 400, 400); + ctx.drawImage(secondAvatar, 730, 56, 400, 400); + ctx.drawImage(base, 0, 0); + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + ctx.fillStyle = 'green'; + ctx.font = '40px Pinky Cupid'; + ctx.fillText('~Xiao\'s Friendship Meter~', 600, 15); + ctx.fillStyle = 'white'; + ctx.fillText(first.username, 270, 448); + ctx.fillText(second.username, 930, 448); + ctx.font = '60px Pinky Cupid'; + ctx.fillStyle = percentColor(level / 100, percentColors); + ctx.fillText(`~${level}%~`, 600, 230); + ctx.fillText(this.calculateLevelText(level), 600, 296); + ctx.font = '90px Pinky Cupid'; + ctx.fillText(level > 49 ? '👍' : '👎', 600, 100); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'friendship.png' }] }); + } catch (err) { + return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); + } + } + + calculateLevelText(level) { + if (level === 0) return 'Abysmal'; + if (level > 0 && level < 10) return 'Horrid'; + if (level > 9 && level < 20) return 'Awful'; + if (level > 19 && level < 30) return 'Very Bad'; + if (level > 29 && level < 40) return 'Bad'; + if (level > 39 && level < 50) return 'Poor'; + if (level > 49 && level < 60) return 'Average'; + if (level > 59 && level < 70) { + if (level === 69) return 'Nice'; + return 'Fine'; + } + if (level > 69 && level < 80) return 'Good'; + if (level > 79 && level < 90) return 'Great'; + if (level > 89 && level < 100) return 'Amazing'; + if (level === 100) return 'Best Friends'; + return '???'; + } +}; diff --git a/commands/random-seed/ship.js b/commands/random-seed/ship.js index 3b16ad1e..14cd93e2 100644 --- a/commands/random-seed/ship.js +++ b/commands/random-seed/ship.js @@ -3,6 +3,7 @@ const { MersenneTwister19937, integer } = require('random-js'); const { createCanvas, loadImage, registerFont } = require('canvas'); const request = require('node-superfetch'); const path = require('path'); +const { percentColor } = require('../../util/Util'); registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Pinky Cupid.otf'), { family: 'Pinky Cupid' }); const percentColors = [ { pct: 0.0, color: { r: 0, g: 0, b: 255 } }, @@ -14,6 +15,7 @@ module.exports = class ShipCommand extends Command { constructor(client) { super(client, { name: 'ship', + aliases: ['compatability-meter', 'compatability', 'love-tester', 'love-test'], group: 'random-seed', memberName: 'ship', description: 'Ships two users together.', @@ -75,7 +77,7 @@ module.exports = class ShipCommand extends Command { ctx.fillText(first.username, 270, 448); ctx.fillText(second.username, 930, 448); ctx.font = '60px Pinky Cupid'; - ctx.fillStyle = this.percentColor(level / 100); + ctx.fillStyle = percentColor(level / 100, percentColors); ctx.fillText(`~${level}%~`, 600, 230); ctx.fillText(this.calculateLevelText(level), 600, 296); ctx.font = '90px Pinky Cupid'; @@ -104,25 +106,4 @@ module.exports = class ShipCommand extends Command { if (level === 100) return 'Soulmates'; return '???'; } - - percentColor(pct) { - let i = 1; - for (i; i < percentColors.length - 1; i++) { - if (pct < percentColors[i].pct) { - break; - } - } - const lower = percentColors[i - 1]; - const upper = percentColors[i]; - const range = upper.pct - lower.pct; - const rangePct = (pct - lower.pct) / range; - const pctLower = 1 - rangePct; - const pctUpper = rangePct; - const color = { - r: Math.floor((lower.color.r * pctLower) + (upper.color.r * pctUpper)).toString(16).padStart(2, '0'), - g: Math.floor((lower.color.g * pctLower) + (upper.color.g * pctUpper)).toString(16).padStart(2, '0'), - b: Math.floor((lower.color.b * pctLower) + (upper.color.b * pctUpper)).toString(16).padStart(2, '0') - }; - return `#${color.r}${color.g}${color.b}`; - } }; diff --git a/package.json b/package.json index 44617db8..c33ef434 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "113.0.7", + "version": "113.1.0", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": { diff --git a/util/Util.js b/util/Util.js index 7f2d2cd1..671e3b0c 100644 --- a/util/Util.js +++ b/util/Util.js @@ -106,6 +106,27 @@ module.exports = class Util { }); } + static percentColor(pct, percentColors) { + let i = 1; + for (i; i < percentColors.length - 1; i++) { + if (pct < percentColors[i].pct) { + break; + } + } + const lower = percentColors[i - 1]; + const upper = percentColors[i]; + const range = upper.pct - lower.pct; + const rangePct = (pct - lower.pct) / range; + const pctLower = 1 - rangePct; + const pctUpper = rangePct; + const color = { + r: Math.floor((lower.color.r * pctLower) + (upper.color.r * pctUpper)).toString(16).padStart(2, '0'), + g: Math.floor((lower.color.g * pctLower) + (upper.color.g * pctUpper)).toString(16).padStart(2, '0'), + b: Math.floor((lower.color.b * pctLower) + (upper.color.b * pctUpper)).toString(16).padStart(2, '0') + }; + return `#${color.r}${color.g}${color.b}`; + } + static today(timeZone) { const now = new Date(); if (timeZone) now.setUTCHours(timeZone);