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 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,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue