diff --git a/src/modules/utility/userinfo.js b/src/modules/utility/userinfo.js index c18295f..51a8038 100644 --- a/src/modules/utility/userinfo.js +++ b/src/modules/utility/userinfo.js @@ -22,6 +22,9 @@ let vencordFetch = 0; const vencordBadges = new Map(); const vencordContributors = new Set(); +let questsFetch = 0; +let questData = []; + const REGEX_DEVS = /id: (\d+)n(,\n\s+badge: false)?/; const REGEX_DEVS_GLOBAL = new RegExp(REGEX_DEVS.source, "g"); @@ -53,6 +56,12 @@ async function fetchVencordData() { 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"); userinfo.category = "utility"; @@ -104,6 +113,13 @@ userinfo.callback = async function (msg, line) { // noop } } + if (Date.now() > questsFetch) { + try { + fetchQuestData(); + } catch { + // noop + } + } // FIXME: horrible, probably needs to be moved out of this command for later 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})`); } @@ -379,7 +415,7 @@ userinfo.callback = async function (msg, line) { value: `${ decoration?.sku ? `[${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})`, inline: true, },