utility: add decoration, fix snowflake parsing for appinfo/guildinfo
This commit is contained in:
		
							parent
							
								
									43fac0f1de
								
							
						
					
					
						commit
						5fdcb094c6
					
				
					 1 changed files with 91 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -38,6 +38,7 @@ const CHANNEL_ICON_BASE = CDN + "channel-icons/";
 | 
			
		|||
const APP_ICON_BASE = CDN + "app-icons/";
 | 
			
		||||
const APP_ASSET_BASE = CDN + "app-assets/";
 | 
			
		||||
const DISCOVERY_SPLASH_BASE = CDN + "discovery-splashes/";
 | 
			
		||||
const AVATAR_DECORATION_BASE = CDN + "avatar-decoration-presets/";
 | 
			
		||||
 | 
			
		||||
const DEFAULT_GROUP_DM_AVATARS = [
 | 
			
		||||
  "/assets/ee9275c5a437f7dc7f9430ba95f12ebd.png",
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +53,7 @@ const DEFAULT_GROUP_DM_AVATARS = [
 | 
			
		|||
 | 
			
		||||
const CUSTOM_EMOTE_REGEX = /<(?:\u200b|&)?(a)?:(\w+):(\d+)>/;
 | 
			
		||||
const POMELO_REGEX = /^[a-z0-9._]{1,32}$/;
 | 
			
		||||
const SNOWFLAKE_REGEX = /[0-9]{17,21}/;
 | 
			
		||||
const SNOWFLAKE_REGEX = /([0-9]{17,21})/;
 | 
			
		||||
 | 
			
		||||
const NOWPLAYING_BAR_LENGTH = 30;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -667,11 +668,93 @@ banner.callback = async function (msg, line, [user], {server, guild}) {
 | 
			
		|||
};
 | 
			
		||||
hf.registerCommand(banner);
 | 
			
		||||
 | 
			
		||||
const decoration = new Command("decoration");
 | 
			
		||||
decoration.category = CATEGORY;
 | 
			
		||||
decoration.helpText = "Get decoration of a user";
 | 
			
		||||
decoration.usage = "<user>";
 | 
			
		||||
decoration.addAlias("decor");
 | 
			
		||||
decoration.callback = async function (msg, line, [user]) {
 | 
			
		||||
  let id = msg.author.id;
 | 
			
		||||
 | 
			
		||||
  if (user) {
 | 
			
		||||
    const lookup = await lookupUser(msg, user);
 | 
			
		||||
    if (
 | 
			
		||||
      lookup == "No results" ||
 | 
			
		||||
      lookup == "Canceled" ||
 | 
			
		||||
      lookup == "Request timed out"
 | 
			
		||||
    ) {
 | 
			
		||||
      return lookup;
 | 
			
		||||
    } else {
 | 
			
		||||
      id = lookup.id;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const userObj = await hf.bot.requestHandler.request(
 | 
			
		||||
    "GET",
 | 
			
		||||
    "/users/" + id,
 | 
			
		||||
    true
 | 
			
		||||
  );
 | 
			
		||||
  let decor;
 | 
			
		||||
  try {
 | 
			
		||||
    const decorRes = await fetch(
 | 
			
		||||
      `https://decor.fieryflames.dev/api/users/${id}/decoration`,
 | 
			
		||||
      {
 | 
			
		||||
        headers: {
 | 
			
		||||
          "User-Agent":
 | 
			
		||||
            "HiddenPhox/decoration (https://gitdab.com/Cynosphere/HiddenPhox)",
 | 
			
		||||
        },
 | 
			
		||||
      }
 | 
			
		||||
    ).then((res) => res.json());
 | 
			
		||||
 | 
			
		||||
    decor = `https://decorcdn.fieryflames.dev/${decorRes.animated ? "a_" : ""}${
 | 
			
		||||
      decorRes.hash
 | 
			
		||||
    }.png`;
 | 
			
		||||
  } catch {
 | 
			
		||||
    // noop
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!userObj.avatar_decoration_data && !decor)
 | 
			
		||||
    return "This user does not have a decoration.";
 | 
			
		||||
 | 
			
		||||
  const normalUrl =
 | 
			
		||||
    userObj.avatar_decoration_data &&
 | 
			
		||||
    `${AVATAR_DECORATION_BASE}${userObj.avatar_decoration_data.asset}.png?size=4096&passthrough=true`;
 | 
			
		||||
 | 
			
		||||
  const baseEmbed = {
 | 
			
		||||
    title: `Decoration for \`${formatUsername(userObj)}\``,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  baseEmbed.description = (
 | 
			
		||||
    (normalUrl ? `[Normal decoration](${normalUrl})` : "") +
 | 
			
		||||
    (decor ? `\n[Decor decoration](${decor})` : "")
 | 
			
		||||
  ).trim();
 | 
			
		||||
 | 
			
		||||
  if (
 | 
			
		||||
    userObj.avatar_decoration_data?.asset.startsWith("a_") ||
 | 
			
		||||
    decor?.indexOf("/a_") > -1
 | 
			
		||||
  ) {
 | 
			
		||||
    baseEmbed.description += "\n(Animated decoration, open in browser to view)";
 | 
			
		||||
    baseEmbed.description = baseEmbed.description.trim();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  baseEmbed.url = normalUrl || decor;
 | 
			
		||||
 | 
			
		||||
  const decorEmbed = {...baseEmbed};
 | 
			
		||||
  baseEmbed.image = {url: normalUrl || decor};
 | 
			
		||||
  decorEmbed.image = {url: decor};
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    embeds: [baseEmbed, decor && decorEmbed].filter((x) => x != null),
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
hf.registerCommand(decoration);
 | 
			
		||||
 | 
			
		||||
const lookupinvite = new Command("lookupinvite");
 | 
			
		||||
lookupinvite.category = CATEGORY;
 | 
			
		||||
lookupinvite.helpText = "Lookup an invite";
 | 
			
		||||
lookupinvite.usage = "<invite code>";
 | 
			
		||||
lookupinvite.addAlias("linvite");
 | 
			
		||||
lookupinvite.addAlias("inviteinfo");
 | 
			
		||||
lookupinvite.addAlias("iinfo");
 | 
			
		||||
lookupinvite.addAlias("ii");
 | 
			
		||||
lookupinvite.callback = async function (msg, line) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1445,10 +1528,12 @@ appinfo.callback = async function (msg, line) {
 | 
			
		|||
  if (!line || line === "") return "Arguments required.";
 | 
			
		||||
  if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake.";
 | 
			
		||||
 | 
			
		||||
  const snowflake = line.match(SNOWFLAKE_REGEX)[1];
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const _app = await hf.bot.requestHandler.request(
 | 
			
		||||
      "GET",
 | 
			
		||||
      `/applications/${line}/rpc`,
 | 
			
		||||
      `/applications/${snowflake}/rpc`,
 | 
			
		||||
      false
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1765,9 +1850,11 @@ const guildinfo = new Command("guildinfo");
 | 
			
		|||
guildinfo.category = CATEGORY;
 | 
			
		||||
guildinfo.helpText = "Get information on a guild";
 | 
			
		||||
guildinfo.usage = "<guild id>";
 | 
			
		||||
guildinfo.addAlias("guild");
 | 
			
		||||
guildinfo.addAlias("ginfo");
 | 
			
		||||
guildinfo.addAlias("gi");
 | 
			
		||||
guildinfo.addAlias("serverinfo");
 | 
			
		||||
guildinfo.addAlias("server");
 | 
			
		||||
guildinfo.addAlias("sinfo");
 | 
			
		||||
guildinfo.addAlias("si");
 | 
			
		||||
guildinfo.callback = async function (msg, line) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1777,7 +1864,8 @@ guildinfo.callback = async function (msg, line) {
 | 
			
		|||
    _guild = {source: "local", data: msg.channel.guild};
 | 
			
		||||
  } else {
 | 
			
		||||
    if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake.";
 | 
			
		||||
    _guild = await getGuild(line);
 | 
			
		||||
    const snowflake = line.match(SNOWFLAKE_REGEX)[1];
 | 
			
		||||
    _guild = await getGuild(snowflake);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!_guild) return "Guild not found.";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue