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…
Reference in a new issue