utility: add decoration, fix snowflake parsing for appinfo/guildinfo

This commit is contained in:
Cynthia Foxwell 2023-11-20 12:07:35 -07:00
parent 43fac0f1de
commit 5fdcb094c6
1 changed files with 91 additions and 3 deletions

View File

@ -38,6 +38,7 @@ const CHANNEL_ICON_BASE = CDN + "channel-icons/";
const APP_ICON_BASE = CDN + "app-icons/"; const APP_ICON_BASE = CDN + "app-icons/";
const APP_ASSET_BASE = CDN + "app-assets/"; const APP_ASSET_BASE = CDN + "app-assets/";
const DISCOVERY_SPLASH_BASE = CDN + "discovery-splashes/"; const DISCOVERY_SPLASH_BASE = CDN + "discovery-splashes/";
const AVATAR_DECORATION_BASE = CDN + "avatar-decoration-presets/";
const DEFAULT_GROUP_DM_AVATARS = [ const DEFAULT_GROUP_DM_AVATARS = [
"/assets/ee9275c5a437f7dc7f9430ba95f12ebd.png", "/assets/ee9275c5a437f7dc7f9430ba95f12ebd.png",
@ -52,7 +53,7 @@ const DEFAULT_GROUP_DM_AVATARS = [
const CUSTOM_EMOTE_REGEX = /<(?:\u200b|&)?(a)?:(\w+):(\d+)>/; const CUSTOM_EMOTE_REGEX = /<(?:\u200b|&)?(a)?:(\w+):(\d+)>/;
const POMELO_REGEX = /^[a-z0-9._]{1,32}$/; 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; const NOWPLAYING_BAR_LENGTH = 30;
@ -667,11 +668,93 @@ banner.callback = async function (msg, line, [user], {server, guild}) {
}; };
hf.registerCommand(banner); 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"); const lookupinvite = new Command("lookupinvite");
lookupinvite.category = CATEGORY; lookupinvite.category = CATEGORY;
lookupinvite.helpText = "Lookup an invite"; lookupinvite.helpText = "Lookup an invite";
lookupinvite.usage = "<invite code>"; lookupinvite.usage = "<invite code>";
lookupinvite.addAlias("linvite"); lookupinvite.addAlias("linvite");
lookupinvite.addAlias("inviteinfo");
lookupinvite.addAlias("iinfo"); lookupinvite.addAlias("iinfo");
lookupinvite.addAlias("ii"); lookupinvite.addAlias("ii");
lookupinvite.callback = async function (msg, line) { lookupinvite.callback = async function (msg, line) {
@ -1445,10 +1528,12 @@ appinfo.callback = async function (msg, line) {
if (!line || line === "") return "Arguments required."; if (!line || line === "") return "Arguments required.";
if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake."; if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake.";
const snowflake = line.match(SNOWFLAKE_REGEX)[1];
try { try {
const _app = await hf.bot.requestHandler.request( const _app = await hf.bot.requestHandler.request(
"GET", "GET",
`/applications/${line}/rpc`, `/applications/${snowflake}/rpc`,
false false
); );
@ -1765,9 +1850,11 @@ const guildinfo = new Command("guildinfo");
guildinfo.category = CATEGORY; guildinfo.category = CATEGORY;
guildinfo.helpText = "Get information on a guild"; guildinfo.helpText = "Get information on a guild";
guildinfo.usage = "<guild id>"; guildinfo.usage = "<guild id>";
guildinfo.addAlias("guild");
guildinfo.addAlias("ginfo"); guildinfo.addAlias("ginfo");
guildinfo.addAlias("gi"); guildinfo.addAlias("gi");
guildinfo.addAlias("serverinfo"); guildinfo.addAlias("serverinfo");
guildinfo.addAlias("server");
guildinfo.addAlias("sinfo"); guildinfo.addAlias("sinfo");
guildinfo.addAlias("si"); guildinfo.addAlias("si");
guildinfo.callback = async function (msg, line) { guildinfo.callback = async function (msg, line) {
@ -1777,7 +1864,8 @@ guildinfo.callback = async function (msg, line) {
_guild = {source: "local", data: msg.channel.guild}; _guild = {source: "local", data: msg.channel.guild};
} else { } else {
if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake."; 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."; if (!_guild) return "Guild not found.";