userinfo: resolve quest decorations from mirrored quest data
This commit is contained in:
		
							parent
							
								
									060db79507
								
							
						
					
					
						commit
						aafcda393b
					
				
					 1 changed files with 38 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -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,
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue