From 58183ab07a677d1ed967bbda1b3ce1c2a2ec2b0d Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Mon, 21 Apr 2025 17:28:58 -0600 Subject: [PATCH] guildinfo: bootleg profiles support --- src/modules/utility/guildinfo.js | 77 +++++++++++++++++++++++--------- src/util/misc.js | 3 +- 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/modules/utility/guildinfo.js b/src/modules/utility/guildinfo.js index 2b33533..6b59ead 100644 --- a/src/modules/utility/guildinfo.js +++ b/src/modules/utility/guildinfo.js @@ -72,7 +72,27 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { id = snowflake; try { - const clan = await hf.bot.requestHandler.request("GET", APIEndpoints.CLAN(snowflake), true); + let clan = await hf.bot.requestHandler.request("GET", APIEndpoints.CLAN(snowflake), true); + if (!clan) { + if (guild.profile) { + clan = guild.profile; + } else { + const verif = await hf.bot.requestHandler.request( + "GET", + `${APIEndpoints.GUILD_MEMBER_VERIFICATION(snowflake)}?with_guild=true`, + true + ); + if (verif?.profile) { + clan = verif.profile; + } else if (guild.vanityURL) { + const invite = await hf.bot.requestHandler.request( + "GET", + `${APIEndpoints.INVITE(guild.vanityURL)}?with_counts=true&with_expiration=true` + ); + if (invite?.profile) clan = invite.profile; + } + } + } if (clan) { const images = []; @@ -99,20 +119,34 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { }) ); - clan.wildcard_descriptors = clan.wildcard_descriptors.filter((x) => x != ""); + if (clan.wildcard_descriptors) clan.wildcard_descriptors = clan.wildcard_descriptors.filter((x) => x != ""); const termLines = []; let currentTerm = ""; - for (const index in clan.search_terms) { - const term = clan.search_terms[index]; - const formattedTerm = `\`\u2004${term.replaceAll(" ", "\u2005")}\u2004\``; - if (currentTerm.length + 1 + formattedTerm.length > 56) { - termLines.push(currentTerm); - currentTerm = formattedTerm; - } else { - currentTerm += "\u2004" + formattedTerm; + if (clan.search_terms) { + for (const index in clan.search_terms) { + const term = clan.search_terms[index]; + const formattedTerm = `\`\u2004${term.replaceAll(" ", "\u2005")}\u2004\``; + if (currentTerm.length + 1 + formattedTerm.length > 56) { + termLines.push(currentTerm); + currentTerm = formattedTerm; + } else { + currentTerm += "\u2004" + formattedTerm; + } + if (index == clan.search_terms.length - 1) termLines.push(currentTerm); + } + } else if (clan.traits) { + for (const index in clan.traits) { + const term = clan.traits[index]; + const formattedTerm = `:${term.emoji_name}:\`\u2004${term.label.replaceAll(" ", "\u2005")}\u2004\``; + if (currentTerm.length + 1 + formattedTerm.length > 56) { + termLines.push(currentTerm); + currentTerm = formattedTerm; + } else { + currentTerm += "\u2004" + formattedTerm; + } + if (index == clan.search_terms.length - 1) termLines.push(currentTerm); } - if (index == clan.search_terms.length - 1) termLines.push(currentTerm); } let gameLines = ""; @@ -140,8 +174,8 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { value: clan.member_count, inline: true, }, - clan.search_terms.length > 0 && { - name: "Interests/Topics/Traits", + termLines.length > 0 && { + name: "Traits", value: termLines.join("\n"), inline: false, }, @@ -155,14 +189,16 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { value: gameLines2, inline: false, }, - { + clan.badge_color_primary && { name: "Badge Colors", value: `${clan.badge_color_primary}, ${clan.badge_color_secondary}`, inline: true, }, - { + clan.brand_color_primary && { name: "Banner/Brand Colors", - value: `${clan.brand_color_primary}, ${clan.brand_color_secondary}`, + value: `${clan.brand_color_primary}${ + clan.brand_color_secondary ? `, ${clan.brand_color_secondary}` : "" + }`, inline: true, }, ].filter((x) => !!x), @@ -526,7 +562,7 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { embed.fields.push({ name: "Member Count", - value: `${Icons.online}${guildObj.approximate_presence_count} online\t\t${Icons.offline}${guildObj.approximate_member_count} members`, + value: `${Icons.online}${guildObj.approximate_presence_count} online\u3000\u3000${Icons.offline}${guildObj.approximate_member_count} members`, inline: false, }); @@ -564,9 +600,8 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { if (guild.instant_invite) { invite = await hf.bot.requestHandler.request( "GET", - `/invites/${guild.instant_invite.replace( - /(https?:\/\/)?(canary\.|ptb\.)?discord(\.gg|(app)?.com\/invite)\//, - "" + `${APIEndpoints.INVITE( + guild.instant_invite.replace(/(https?:\/\/)?(canary\.|ptb\.)?discord(\.gg|(app)?.com\/invite)\//, "") )}?with_counts=true&with_expiration=true` ); } @@ -595,7 +630,7 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { embed.fields.push({ name: "Member Count", - value: `${Icons.online}${invite.approximate_presence_count} online\t\t${Icons.offline}${invite.approximate_member_count} members`, + value: `${Icons.online}${invite.approximate_presence_count} online\u3000\u3000${Icons.offline}${invite.approximate_member_count} members`, inline: false, }); diff --git a/src/util/misc.js b/src/util/misc.js index 55dfc89..fcea33d 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -81,7 +81,8 @@ async function getGuild(id, noLocal = false) { `${APIEndpoints.GUILD_MEMBER_VERIFICATION(id)}?with_guild=true`, true ); - if (verification?.guild) return {source: "verification", data: verification.guild}; + if (verification?.guild) + return {source: "verification", data: {...verification.guild, profile: verification.profile}}; } catch { return null; }