diff --git a/src/modules/utility/guildinfo.js b/src/modules/utility/guildinfo.js index 4b71c39..21111d8 100644 --- a/src/modules/utility/guildinfo.js +++ b/src/modules/utility/guildinfo.js @@ -134,7 +134,10 @@ guildinfo.callback = async function (msg, line, args, {nolocal, debug}) { } 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\``; + const formattedTerm = `${term.emoji_name ? `:${term.emoji_name}:` : ""}\`\u2004${term.label.replaceAll( + " ", + "\u2005" + )}\u2004\``; if (currentTerm.length + 1 + formattedTerm.length > 56) { termLines.push(currentTerm); currentTerm = formattedTerm; diff --git a/src/modules/utility/lookupinvite.js b/src/modules/utility/lookupinvite.js index 64f5325..a6856b3 100644 --- a/src/modules/utility/lookupinvite.js +++ b/src/modules/utility/lookupinvite.js @@ -5,7 +5,9 @@ const { APIEndpoints, ApplicationCommandOptionTypes, CDNEndpoints, + ClanPlaystyle, DEFAULT_GROUP_DM_AVATARS, + Games, } = require("#util/dconstants.js"); const {Icons} = require("#util/constants.js"); @@ -216,7 +218,137 @@ lookupinvite.callback = async function (msg, line) { return `Unhandled invite type: \`${invite.type}\``; } - return {embed}; + const clan = invite.profile; + let clanEmbed; + if (clan) { + const images = []; + + const game_ids = clan.game_ids ?? clan.game_application_ids ?? []; + const games = await Promise.all( + game_ids + .sort((a, b) => (clan.game_activity[b]?.activity_score ?? 0) - (clan.game_activity[a]?.activity_score ?? 0)) + .map(async (id) => { + let game = Games.find((x) => x.id == id); + if (!game) { + game = await hf.bot.requestHandler.request("GET", APIEndpoints.APPLICATION_RPC(id), false); + } + + let out = `${game.name} (\`${id}\`)`; + + if (clan.game_activity[id]?.activity_level > 1) { + out = `:fire: ${out}`; + } else { + out = `${Icons.blank} ${out}`; + } + + return out; + }) + ); + + if (clan.wildcard_descriptors) clan.wildcard_descriptors = clan.wildcard_descriptors.filter((x) => x != ""); + + const termLines = []; + let currentTerm = ""; + 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 ? `:${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.traits.length - 0) termLines.push(currentTerm); + } + } + + let gameLines = ""; + let gameLines2 = ""; + for (const line of games) { + if (gameLines.length + line.length + 1 <= 1024) { + gameLines += line + "\n"; + } else { + gameLines2 += line + "\n"; + } + } + + clanEmbed = { + color: clan.brand_color_primary ? parseInt(clan.brand_color_primary.replace("#", "0x")) : 0, + author: { + name: clan.tag, + }, + description: + clan.playstyle || clan.wildcard_descriptors + ? `-# :video_game:${ClanPlaystyle[clan.playstyle] ?? "Unknown"}${ + clan.wildcard_descriptors.length > 0 ? ` \u2022 **${clan.wildcard_descriptors.join(", ")}**` : "" + }\n\n${clan.description ?? "*No description*"}` + : clan.description ?? "*No description*", + fields: [ + termLines.length > 0 && { + name: "Traits", + value: termLines.join("\n"), + inline: false, + }, + games.length > 0 && { + name: "Associated Games", + value: gameLines, + inline: false, + }, + gameLines2 != "" && { + name: "\u200b", + 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 ? `, ${clan.brand_color_secondary}` : ""}`, + inline: true, + }, + ].filter((x) => !!x), + }; + + if (clan.badge_hash) { + const url = CDNEndpoints.CLAN_BADGE(clan.id, clan.badge_hash); + images.push(`[Badge](${url})`); + clanEmbed.author.icon_url = url; + } + if (clan.banner_hash) { + const url = CDNEndpoints.CLAN_BANNER(clan.id, clan.banner_hash); + images.push(`[Banner](${url})`); + clanEmbed.image = {url}; + } + + if (images.length > 0) { + clanEmbed.fields.push({ + name: "\u200b", + value: images.join("\u3000\u3000"), + inline: false, + }); + } + } + + return {embeds: [embed, clanEmbed].filter((x) => x != null)}; } }; hf.registerCommand(lookupinvite);