import { getUUID, getIGN, getPlayer, getGuild, guildLevel } from "utils/Hypixel" import { color, devMessage } from "config/options.json" import { ChatInputCommandInteraction } from "discord.js" import { GuildData } from "interfaces" export default async function guildInfo(interaction: ChatInputCommandInteraction): Promise { await interaction.deferReply() const query = interaction.options.getString("query")! const type = interaction.options.getString("type") || "ign" const embedColor = Number(color.replace("#", "0x")) let guild: GuildData | null if (type === "ign") { await interaction.editReply({ embeds: [{ description: "Fetching your uuid...", color: embedColor }] }) const uuid = await getUUID(query) if (!uuid) { interaction.editReply({ embeds: [{ description: "That player doen't exist!", color: embedColor }] }) return } await interaction.editReply({ embeds: [{ description: "Fetching your player data...", color: embedColor }] }) const player = await getPlayer(uuid) if (!player) { interaction.editReply({ embeds: [{ description: "That player has never joined the server!", color: embedColor }] }) return } await interaction.editReply({ embeds: [{ description: "Fetching your guild data...", color: embedColor }] }) guild = await getGuild(uuid, "player") if (!guild) { interaction.editReply({ embeds: [{ description: "That player is not in a guild!", color: embedColor }] }) return } } else if (type === "name") { await interaction.editReply({ embeds: [{ description: "Fetching your guild data...", color: embedColor }] }) guild = await getGuild(query, "name") if (!guild) { interaction.editReply({ embeds: [{ description: "That guild doesn't exist!", color: embedColor }] }) return } } else if (type === "id") { await interaction.editReply({ embeds: [{ description: "Fetching your guild data...", color: embedColor }] }) guild = await getGuild(query, "id") if (!guild) { interaction.editReply({ embeds: [{ description: "That guild doesn't exist!", color: embedColor }] }) return } } const guildName = guild!.name const guildCreatedMS = guild!.created const guildCreated = new Date(guildCreatedMS) const guildTag = guild!.tag const guildExpUnformatted = guild!.exp const guildExp = new Intl.NumberFormat("en-US").format(guildExpUnformatted) const guildLvl = guildLevel(guildExpUnformatted) const guildMembers = guild!.members const guildCreatedDate = guildCreated.getDate() const guildCreatedMonth = guildCreated.getMonth() + 1 const guildCreatedYear = guildCreated.getFullYear() const guildCreatedHour = guildCreated.getHours() const guildCreatedMinute = guildCreated.getMinutes() const guildCreatedSecond = guildCreated.getSeconds() const guildCreatedTime = guildCreatedDate + "." + guildCreatedMonth + "." + guildCreatedYear + " " + guildCreatedHour + ":" + guildCreatedMinute + ":" + guildCreatedSecond const guildOwner = guildMembers.find(m => m.rank === "Guild Master")!.uuid const guildOwnerName = await getIGN(guildOwner) const guildRanksUnsorted = guild!.ranks.sort((a, b) => b.priority - a.priority) const guildRanks = guildRanksUnsorted.map(r => "**➺ " + r.name + "** `[" + r.tag + "]`").join("\n") const allGuildMembersWeeklyXP = guildMembers.map(member => member.expHistory) const guildMembersWeeklyXP = allGuildMembersWeeklyXP.map(member => { return Object.values(member).reduce((a, b) => a + b, 0) }) const totalGuildMembersWeeklyXPUnformatted = guildMembersWeeklyXP.reduce((a, b) => a + b, 0) const totalGuildMembersWeeklyXP = new Intl.NumberFormat("en-US").format(totalGuildMembersWeeklyXPUnformatted) const averageGuildMembersWeeklyXPUnformatted = Math.round(totalGuildMembersWeeklyXPUnformatted / 7) const averageGuildMembersWeeklyXP = new Intl.NumberFormat("en-US").format(averageGuildMembersWeeklyXPUnformatted) await interaction.editReply({ embeds: [{ title: "**Info on** " + guildName, description: "**Guild Name: **`" + guildName + "`\n" + "**Guild Tag: **`" + guildTag + "`\n" + "**Guild Level: **`" + guildLvl + "`\n" + "**Guild Owner: **`" + guildOwnerName + "`", fields: [ { name: "**Guild Ranks**", value: guildRanks }, { name: "**GEXP**", value: "**➺ Total weekly GEXP:** `" + totalGuildMembersWeeklyXP + "`\n" + "**➺ Daily avarage:** `" + averageGuildMembersWeeklyXP + "`\n" + "**➺ Total GEXP:** `" + guildExp + "`" }, { name: "**Guild Created**", value: "**➺ **`" + guildCreatedTime + "`" } ], color: embedColor, footer: { text: interaction.guild!.name + " | " + devMessage, icon_url: interaction.guild!.iconURL() || undefined } }] }) }