userinfo: resolve quest decorations from mirrored quest data

This commit is contained in:
Cynthia Foxwell 2025-07-09 12:57:44 -06:00
parent 060db79507
commit aafcda393b
Signed by: Cynosphere
SSH key fingerprint: SHA256:H3SM8ufP/uxqLwKSH7xY89TDnbR9uOHzjLoBr0tlajk

View file

@ -22,6 +22,9 @@ let vencordFetch = 0;
const vencordBadges = new Map(); const vencordBadges = new Map();
const vencordContributors = new Set(); const vencordContributors = new Set();
let questsFetch = 0;
let questData = [];
const REGEX_DEVS = /id: (\d+)n(,\n\s+badge: false)?/; const REGEX_DEVS = /id: (\d+)n(,\n\s+badge: false)?/;
const REGEX_DEVS_GLOBAL = new RegExp(REGEX_DEVS.source, "g"); const REGEX_DEVS_GLOBAL = new RegExp(REGEX_DEVS.source, "g");
@ -53,6 +56,12 @@ async function fetchVencordData() {
vencordFetch = Date.now() + 60 * 60 * 1000; vencordFetch = Date.now() + 60 * 60 * 1000;
} }
async function fetchQuestData() {
questData = await fetch("https://raw.githubusercontent.com/aamiaa/discord-api-diff/refs/heads/main/quests.json").then(
(res) => res.json()
);
questsFetch = Date.now() + 60 * 60 * 1000;
}
const userinfo = new Command("userinfo"); const userinfo = new Command("userinfo");
userinfo.category = "utility"; userinfo.category = "utility";
@ -104,6 +113,13 @@ userinfo.callback = async function (msg, line) {
// noop // noop
} }
} }
if (Date.now() > questsFetch) {
try {
fetchQuestData();
} catch {
// noop
}
}
// FIXME: horrible, probably needs to be moved out of this command for later // FIXME: horrible, probably needs to be moved out of this command for later
const badges = []; const badges = [];
@ -222,7 +238,27 @@ userinfo.callback = async function (msg, line) {
} }
} }
if (user.avatar_decoration_data?.expires_at || user.avatar_decoration_data?.sku_id == "1226939756617793606") { let questDecorationName;
if (user.avatar_decoration_data?.sku_id != null) {
let questDecoration;
for (const quest of questData) {
questDecoration =
quest.config.rewards_config?.rewards?.find(
(reward) => reward.type === 3 && reward.sku_id === user.avatar_decoration_data.sku_id
) ??
quest.config.rewards?.find(
(reward) => reward.type === 3 && reward.sku_id === user.avatar_decoration_data.sku_id
);
if (questDecoration != null) break;
}
if (questDecoration != null) {
questDecorationName = questDecoration.messages.name;
badges.push(`[${Icons.badges.quest_completed}](${BadgeURLs.quest_completed})`);
}
} else if (
user.avatar_decoration_data?.expires_at != null ||
user.avatar_decoration_data?.sku_id === "1226939756617793606"
) {
badges.push(`[${Icons.badges.quest_completed}](${BadgeURLs.quest_completed})`); badges.push(`[${Icons.badges.quest_completed}](${BadgeURLs.quest_completed})`);
} }
@ -379,7 +415,7 @@ userinfo.callback = async function (msg, line) {
value: `${ value: `${
decoration?.sku decoration?.sku
? `[${decoration?.sku?.name}](https://discord.com/shop#itemSkuId=${user.avatar_decoration_data.sku_id})` ? `[${decoration?.sku?.name}](https://discord.com/shop#itemSkuId=${user.avatar_decoration_data.sku_id})`
: "Unknown" : questDecorationName ?? "*Unknown*"
}\n-# ${user.avatar_decoration_data.sku_id}\n[Image](${decorationUrl})`, }\n-# ${user.avatar_decoration_data.sku_id}\n[Image](${decorationUrl})`,
inline: true, inline: true,
}, },