utility: add jumbo
This commit is contained in:
		
							parent
							
								
									d3031ffa56
								
							
						
					
					
						commit
						be5e820807
					
				
					 1 changed files with 140 additions and 0 deletions
				
			
		| 
						 | 
					@ -5,6 +5,7 @@ const ICON_BASE = "https://cdn.discordapp.com/icons/";
 | 
				
			||||||
const AVATAR_BASE = "https://cdn.discordapp.com/avatars/";
 | 
					const AVATAR_BASE = "https://cdn.discordapp.com/avatars/";
 | 
				
			||||||
const SPLASH_BASE = "https://cdn.discordapp.com/splashes/";
 | 
					const SPLASH_BASE = "https://cdn.discordapp.com/splashes/";
 | 
				
			||||||
const BANNER_BASE = "https://cdn.discordapp.com/banners/";
 | 
					const BANNER_BASE = "https://cdn.discordapp.com/banners/";
 | 
				
			||||||
 | 
					const EMOTE_BASE = "https://cdn.discordapp.com/emojis/";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const STATUS_ICONS = {
 | 
					const STATUS_ICONS = {
 | 
				
			||||||
  online: "<:online:493173082421461002>",
 | 
					  online: "<:online:493173082421461002>",
 | 
				
			||||||
| 
						 | 
					@ -13,7 +14,54 @@ const STATUS_ICONS = {
 | 
				
			||||||
  offline: "<:offline:493173082253426688>",
 | 
					  offline: "<:offline:493173082253426688>",
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const EMOJI_SETS = {
 | 
				
			||||||
 | 
					  blobs: {
 | 
				
			||||||
 | 
					    prefix:
 | 
				
			||||||
 | 
					      "https://cdn.jsdelivr.net/gh/googlefonts/noto-emoji@e456654119cc3a5f9bebb7bbd00512456f983d2d/svg/emoji_u",
 | 
				
			||||||
 | 
					    sep: "_",
 | 
				
			||||||
 | 
					    suffix: ".svg",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  noto: {
 | 
				
			||||||
 | 
					    prefix: "gitcdn.xyz/repo/googlefonts/noto-emoji/master/svg/emoji_u",
 | 
				
			||||||
 | 
					    sep: "_",
 | 
				
			||||||
 | 
					    suffix: ".svg",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  twemoji: {
 | 
				
			||||||
 | 
					    prefix: "https://twemoji.maxcdn.com/v/latest/svg/",
 | 
				
			||||||
 | 
					    sep: "-",
 | 
				
			||||||
 | 
					    suffix: ".svg",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mustd: {
 | 
				
			||||||
 | 
					    prefix:
 | 
				
			||||||
 | 
					      "https://cdn.jsdelivr.net/gh/Mstrodl/mutant-standard-mirror@0435227d9d8c0d6a346c8ae4c12b08a5cdc37041/emoji/",
 | 
				
			||||||
 | 
					    sep: "-",
 | 
				
			||||||
 | 
					    suffix: ".svg",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  apple: {
 | 
				
			||||||
 | 
					    prefix: "https://intrnl.github.io/assetsEmoji/AppleColor/emoji_u",
 | 
				
			||||||
 | 
					    sep: "_",
 | 
				
			||||||
 | 
					    suffix: ".png",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  facebook: {
 | 
				
			||||||
 | 
					    prefix: "https://intrnl.github.io/assetsEmoji/facebook/emoji_u",
 | 
				
			||||||
 | 
					    sep: "_",
 | 
				
			||||||
 | 
					    suffix: ".png",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					EMOJI_SETS["noto-old"] = EMOJI_SETS.blobs;
 | 
				
			||||||
 | 
					EMOJI_SETS.mutant = EMOJI_SETS.mustd;
 | 
				
			||||||
 | 
					EMOJI_SETS.mutstd = EMOJI_SETS.mustd;
 | 
				
			||||||
 | 
					EMOJI_SETS.ms = EMOJI_SETS.mustd;
 | 
				
			||||||
 | 
					EMOJI_SETS.twitter = EMOJI_SETS.twemoji;
 | 
				
			||||||
 | 
					EMOJI_SETS.fb = EMOJI_SETS.facebook;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CUSTOM_EMOTE_REGEX = /^<(?:\u200b|&)?(a)?:(\w+):(\d+)>/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fetch = require("node-fetch");
 | 
				
			||||||
 | 
					const sharp = require("sharp");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const {lookupUser} = require("../lib/utils.js");
 | 
					const {lookupUser} = require("../lib/utils.js");
 | 
				
			||||||
 | 
					const {getNamesFromString} = require("../lib/unicode.js");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const avatar = new Command("avatar");
 | 
					const avatar = new Command("avatar");
 | 
				
			||||||
avatar.category = CATEGORY;
 | 
					avatar.category = CATEGORY;
 | 
				
			||||||
| 
						 | 
					@ -371,3 +419,95 @@ flagdump.callback = async function (msg, line) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
hf.registerCommand(flagdump);
 | 
					hf.registerCommand(flagdump);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const emojiNames = [];
 | 
				
			||||||
 | 
					fetch("https://unpkg.com/emoji.json/emoji.json")
 | 
				
			||||||
 | 
					  .then((res) => res.json())
 | 
				
			||||||
 | 
					  .then((body) =>
 | 
				
			||||||
 | 
					    body.map(
 | 
				
			||||||
 | 
					      (emoji) => (emojiNames[emoji.char] = emoji.name.replace(/ /g, "_"))
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const jumbo = new Command("jumbo");
 | 
				
			||||||
 | 
					jumbo.category = CATEGORY;
 | 
				
			||||||
 | 
					jumbo.helpText = "Gets the raw image of an emoji.";
 | 
				
			||||||
 | 
					jumbo.usage = "<emoji>";
 | 
				
			||||||
 | 
					jumbo.addAlias("e");
 | 
				
			||||||
 | 
					jumbo.addAlias("emote");
 | 
				
			||||||
 | 
					jumbo.addAlias("emoji");
 | 
				
			||||||
 | 
					jumbo.callback = async function (msg, line) {
 | 
				
			||||||
 | 
					  if (CUSTOM_EMOTE_REGEX.test(line)) {
 | 
				
			||||||
 | 
					    const [_, __, animatedFlag, name, id] = line.match(CUSTOM_EMOTE_REGEX);
 | 
				
			||||||
 | 
					    const animated = animatedFlag === "a";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      embed: {
 | 
				
			||||||
 | 
					        title: `:${name}: - \`${id}\``,
 | 
				
			||||||
 | 
					        url: `${EMOTE_BASE}${id}.${animated ? "gif" : "png"}?v=1`,
 | 
				
			||||||
 | 
					        image: {
 | 
				
			||||||
 | 
					          url: `${EMOTE_BASE}${id}.${animated ? "gif" : "png"}?v=1`,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    let setName = "twemoji";
 | 
				
			||||||
 | 
					    for (const set in EMOJI_SETS) {
 | 
				
			||||||
 | 
					      if (line.startsWith(`--${set} `)) {
 | 
				
			||||||
 | 
					        setName = set;
 | 
				
			||||||
 | 
					        line = line.replace(`--${set} `, "");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const set = EMOJI_SETS[setName];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const emoji = Array.from(line)
 | 
				
			||||||
 | 
					      .map((char) => char.codePointAt().toString(16))
 | 
				
			||||||
 | 
					      .join(set.sep);
 | 
				
			||||||
 | 
					    const url = set.prefix + emoji + set.suffix;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const name = emojiNames[line]
 | 
				
			||||||
 | 
					      ? `\\:${emojiNames[line]}\\:`
 | 
				
			||||||
 | 
					      : getNamesFromString(line)[0][1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const statusCode = await fetch(url, {method: "HEAD"}).then(
 | 
				
			||||||
 | 
					      (res) => res.status
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (statusCode !== 200) {
 | 
				
			||||||
 | 
					      return "Emoji not found. The emoji set chosen might not have this emote as an image.";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (set.suffix == ".svg") {
 | 
				
			||||||
 | 
					      const svg = await fetch(url).then((res) => res.buffer());
 | 
				
			||||||
 | 
					      const converted = await sharp(svg, {density: 2400})
 | 
				
			||||||
 | 
					        .resize(1024)
 | 
				
			||||||
 | 
					        .toBuffer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        embed: {
 | 
				
			||||||
 | 
					          title: `${name} (${emoji.toUpperCase().replace(/[-_]/g, ", ")})`,
 | 
				
			||||||
 | 
					          url,
 | 
				
			||||||
 | 
					          image: {
 | 
				
			||||||
 | 
					            url: "attachment://emoji.png",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        file: {
 | 
				
			||||||
 | 
					          file: converted,
 | 
				
			||||||
 | 
					          name: "emoji.png",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        embed: {
 | 
				
			||||||
 | 
					          title: `${name} (${emoji.toUpperCase().replace(/[-_]/g, ", ")})`,
 | 
				
			||||||
 | 
					          url,
 | 
				
			||||||
 | 
					          image: {
 | 
				
			||||||
 | 
					            url,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					hf.registerCommand(jumbo);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue