diff --git a/commands/guild.js b/commands/guild.js index e99a6bb..020a6ab 100644 --- a/commands/guild.js +++ b/commands/guild.js @@ -1,6 +1,7 @@ const { SlashCommandBuilder } = require('discord.js') const { color } = require('../config/options.json') const { guildMember } = require('./guild/member.js') +const { guildInfo } = require('./guild/info.js') module.exports = { name: 'guild', @@ -21,6 +22,17 @@ module.exports = { .setRequired(true) ) ) + .addSubcommand(subcommand => + subcommand + .setName('info') + .setDescription('Get info about a guild.') + .addStringOption(option => + option + .setName('ign') + .setDescription('The IGN of a member.') + .setRequired(true) + ) + ) .setDMPermission(false), /** @param { import('discord.js').ChatInputCommandInteraction } interaction */ @@ -37,6 +49,11 @@ module.exports = { return } + if (subcommand === 'info') { + await guildInfo(interaction) + return + } + await interaction.editReply({ embeds: [{ description: "This command is currently under development", diff --git a/commands/guild/info.js b/commands/guild/info.js new file mode 100644 index 0000000..d82bcce --- /dev/null +++ b/commands/guild/info.js @@ -0,0 +1,103 @@ +const { getUUID, getIGN, getPlayer, getGuild, guildLevel } = require("../../utils/utils.js") +const { color } = require("../../config/options.json"); + +/** @param { import('discord.js').ChatInputCommandInteraction } interaction */ + +async function guildInfo(interaction) { + + const ign = interaction.options.getString("ign"); + const embedColor = Number(color.replace("#", "0x")); + + const uuid = await getUUID(ign) + if (!uuid) { + interaction.editReply({ + embeds: [{ + description: "That player doen't exist!", + color: embedColor + }] + }) + return + } + + const player = await getPlayer(uuid) + if (!player) { + interaction.editReply({ + embeds: [{ + description: "That player has never joined the server!", + color: embedColor + }] + }) + return + } + + const guild = await getGuild(uuid) + if (!guild) { + interaction.editReply({ + embeds: [{ + description: "That player is not in a guild!", + color: embedColor + }] + }) + return + } + + const guildName = guild.name; + const guildCreatedMS = guild.created; + const guildCreated = new Date(guildCreatedMS); + const guildTag = guild.tag; + const guildExp = guild.exp; + const guildLvl = guildLevel(guildExp); + 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 guildRanks = guild.ranks.map((r) => "**➺ " + r.name + "** `[" + r.tag + "]`").join("\n") + + const guildMembersDailyXP = Object.values(guildMembers).map((m) => m.expHistory[Object.keys(m.expHistory)[0]]) + const totalGuildMembersDailyXP = guildMembersDailyXP.reduce((a, b) => a + b, 0) + + 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:** `" + totalGuildMembersDailyXP + "`" + }, + { + name: "**Guild Created**", + value: "**➺ **`" + guildCreatedTime + "`" + } + ], + color: embedColor, + footer: { + text: interaction.guild.name + " | Developed by taken.lua", + icon_url: interaction.guild.iconURL({ dynamic: true }) + } + }] + }) +} + +module.exports = { guildInfo } diff --git a/commands/guild/member.js b/commands/guild/member.js index 31ba531..2d0b260 100644 --- a/commands/guild/member.js +++ b/commands/guild/member.js @@ -1,4 +1,4 @@ -const { guildLevel, getUUID, getIGN, getPlayer, getGuild, getHeadURL } = require("../../utils/utils.js"); +const { getUUID, getPlayer, getGuild, getHeadURL } = require("../../utils/utils.js"); const { color } = require("../../config/options.json"); /** @param { import('discord.js').ChatInputCommandInteraction } interaction */ @@ -23,6 +23,7 @@ async function guildMember(interaction) { }); } + const head = await getHeadURL(ign); const player = await getPlayer(uuid); if (!player) { await interaction.editReply({ @@ -42,9 +43,9 @@ async function guildMember(interaction) { }); } - const serverRank = player.data.player.newPackageRank; - const monthlyRank = player.data.player.monthlyPackageRank; - const displayName = player.data.player.displayname; + const serverRank = player.newPackageRank; + const monthlyRank = player.monthlyPackageRank; + const displayName = player.displayname; if (serverRank === "VIP") { var rank = "[VIP] "; @@ -101,29 +102,19 @@ async function guildMember(interaction) { const guildMemberJoinSeconds = guildMemberJoinTime.getSeconds(); const guildMemberJoin = - guildMemberJoinDate + - "." + - guildMemberJoinMonth + - "." + - guildMemberJoinYear + - " " + - guildMemberJoinHours + - ":" + - guildMemberJoinMinutes + - ":" + + guildMemberJoinDate + "." + + guildMemberJoinMonth + "." + + guildMemberJoinYear + " " + + guildMemberJoinHours + ":" + + guildMemberJoinMinutes + ":" + guildMemberJoinSeconds; await interaction.editReply({ embeds: [ { title: rank + displayName + guildTag, - description: - "**Guild Name:** `" + - guildName + - "`\n" + - "**Guild Rank:** `" + - guildRank + - "`\n", + description: "**Guild Name:** `" + guildName + "`\n" + + "**Guild Rank:** `" + guildRank + "`\n", color: embedColor, thumbnail: { url: head, @@ -135,13 +126,8 @@ async function guildMember(interaction) { }, { name: "**Weekly GEXP**", - value: - "**➺ Total:** `" + - totalWeeklyGexp + - "`\n" + - "**➺ Daily avarage:** `" + - averageWeeklyGexp + - "`", + value: "**➺ Total:** `" + totalWeeklyGexp + "`\n" + + "**➺ Daily avarage:** `" + averageWeeklyGexp + "`", }, { name: "**Join date**",