diff --git a/commands/help.js b/commands/help.js index efc040e..c8db7da 100644 --- a/commands/help.js +++ b/commands/help.js @@ -1,100 +1,122 @@ -const { Command } = require('discord-akairo'); -const { version } = require('../package.json') +const { Command } = require("discord-akairo"); +const { version } = require("../package.json"); class HelpCommand extends Command { - constructor() { - super('help', { - aliases: ['help', 'halp', 'h'], - category: 'general', - clientPermissions: ['EMBED_LINKS'], - args: [ - { - id: 'command', - type: 'commandAlias', - prompt: { - start: 'Which command do you need help with?', - retry: 'Please provide a valid command.', - optional: true - } - } - ], - description: { - content: 'Displays a list of commands or information about a command.', - usage: '[command]', - examples: ['', 'star', 'remove-rep'] - } - }); - } + constructor() { + super("help", { + aliases: ["help", "halp", "h"], + category: "general", + clientPermissions: ["EMBED_LINKS"], + args: [ + { + id: "command", + type: "commandAlias", + prompt: { + start: "Which command do you need help with?", + retry: "Please provide a valid command.", + optional: true, + }, + }, + ], + description: { + content: "Displays a list of commands or information about a command.", + usage: "[command]", + examples: ["", "star", "remove-rep"], + }, + }); + } - exec(message, { command }) { - message.delete(); - if (!command) return this.execCommandList(message); + exec(message, { command }) { + message.delete(); + if (!command) return this.execCommandList(message); - const prefix = this.handler.prefix; - const description = Object.assign({ - content: 'No description available.', - usage: '', - examples: [], - fields: [] - }, command.description); + const prefix = this.handler.prefix; + const description = Object.assign( + { + content: "No description available.", + usage: "", + examples: [], + fields: [], + }, + command.description + ); - const embed = this.client.util.embed() - .setColor(0xFFAC33) - .setTitle(`\`${prefix}${command.aliases[0]} ${description.usage}\``) - .addField('Description', description.content); + const embed = this.client.util + .embed() + .setColor(0xffac33) + .setTitle(`\`${prefix}${command.aliases[0]} ${description.usage}\``) + .addField("Description", description.content); - for (const field of description.fields) embed.addField(field.name, field.value); + for (const field of description.fields) + embed.addField(field.name, field.value); - if (description.examples.length) { - const text = `${prefix}${command.aliases[0]}`; - embed.addField('Examples', `\`${text} ${description.examples.join(`\`\n\`${text} `)}\``, true); - } + if (description.examples.length) { + const text = `${prefix}${command.aliases[0]}`; + embed.addField( + "Examples", + `\`${text} ${description.examples.join(`\`\n\`${text} `)}\``, + true + ); + } - if (command.aliases.length > 1) { - embed.addField('Aliases', `\`${command.aliases.join('` `')}\``, true); - } + if (command.aliases.length > 1) { + embed.addField("Aliases", `\`${command.aliases.join("` `")}\``, true); + } - return message.util.send({ embed }); - } + return message.util.send({ embed }); + } - async execCommandList(message) { - const embed = this.client.util.embed() - .setTitle("Panda Jr. **Help**") - .setFooter(`Panda Jr. v${version}`) - .setThumbnail('https://minecraft-mp.com/images/favicon/277055.png') - .setColor('#FF0033') - .addField('Command List', - [ - 'This is a list of commands.', - 'To view details for a command, do `!!help `.' - ]); + async execCommandList(message) { + const embed = this.client.util + .embed() + .setTitle("Panda Jr. **Help**") + .setFooter(`Panda Jr. v${version}`) + .setThumbnail("https://minecraft-mp.com/images/favicon/277055.png") + .setColor("#FF0033") + .addField("Command List", [ + "This is a list of commands.", + "To view details for a command, do `!!help `.", + ]); - for (const category of this.handler.categories.values()) { - const title = { - general: '📝\u2000General', - music: '🎵\u2000Music', - utility: ':briefcase:\u2000Utility', - minecraft: '🧱\u2000Minecraft' - }[category.id]; + for (const category of this.handler.categories.values()) { + const title = { + general: "📝\u2000General", + music: "🎵\u2000Music", + utility: ":briefcase:\u2000Utility", + minecraft: "🧱\u2000Minecraft", + }[category.id]; - if (title) embed.addField(title, `\`${category.map(cmd => cmd.aliases[0]).join('` `')}\``, true); - } + if (title) + embed.addField( + title, + `\`${category.map((cmd) => cmd.aliases[0]).join("` `")}\``, + true + ); + } - const shouldReply = message.guild && message.channel.permissionsFor(this.client.user).has('SEND_MESSAGES'); + const shouldReply = + message.guild && + message.channel.permissionsFor(this.client.user).has("SEND_MESSAGES"); - try { - await message.author.send({ embed }); - if (shouldReply) return message.util.reply('I\'ve sent you a DM with the command list.').then(msg => { - msg.delete({ timeout: 10000 }) - }); - } catch (err) { - if (shouldReply) return message.util.reply('I could not send you the command list in DMs.').then(msg => { - msg.delete({ timeout: 10000 }) - }); - } + try { + await message.author.send({ embed }); + if (shouldReply) + return message.util + .reply("I've sent you a DM with the command list.") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } catch (err) { + if (shouldReply) + return message.util + .reply("I could not send you the command list in DMs.") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } - return undefined; - } + return undefined; + } } -module.exports = HelpCommand; \ No newline at end of file +module.exports = HelpCommand; diff --git a/commands/hivemc.js b/commands/hivemc.js index 75cc230..ea09df8 100644 --- a/commands/hivemc.js +++ b/commands/hivemc.js @@ -1,77 +1,74 @@ // HiveAPI -const hive = require('hive-api'); -const { version } = require('../package.json'); -const Discord = require('discord.js'); +const hive = require("hive-api"); +const { version } = require("../package.json"); +const Discord = require("discord.js"); -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class HiveCommand extends Command { - constructor(){ - super('hive', { - aliases: ['hivemc', 'hmc'], - category: 'minecraft', - description: { - content: "Get's your hive stats", - usage: '', - examples: ['TheCuddlyBear', 'TheDevilsRoses', 'MagixSpellz'] - }, - args: [{ - id: 'playername', - }] - }) - } - - exec(message, { playername }){ - let player = new hive.Player(playername); + constructor() { + super("hive", { + aliases: ["hivemc", "hmc"], + category: "minecraft", + description: { + content: "Get's your hive stats", + usage: "", + examples: ["TheCuddlyBear", "TheDevilsRoses", "MagixSpellz"], + }, + args: [ + { + id: "playername", + }, + ], + }); + } - player.info().then(info => { + exec(message, { playername }) { + let player = new hive.Player(playername); - if (playername.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + player + .info() + .then((info) => { + if (playername.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new Discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(playername + suffix + " HiveMC stats") - .setThumbnail('https://minotar.net/avatar/' + playername) - .setTimestamp() - .setFooter(`HiveMC Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Rank', - value: info.rank.humanName, - inline: true - }, { - name: 'Tokens', - value: info.tokens, - inline: true - }, { - name: 'Medals', - value: info.medals, - inline: true - }, { - name: 'Credits', - value: info.credits, - inline: true - }, { - name: 'First login', - value: info.firstLogin, - inline: true - }, { - name: 'Last login', - value: info.lastLogin, - inline: true - }, { - name: 'Last logout', - value: info.lastLogout - }) - message.channel.send(statEmbed); - message.delete(); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new Discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(playername + suffix + " HiveMC stats") + .setThumbnail("https://minotar.net/avatar/" + playername) + .setTimestamp() + .setFooter(`HiveMC Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Rank", + value: info.rank.humanName, + inline: true, + }, + { name: "Tokens", value: info.tokens, inline: true }, + { name: "Medals", value: info.medals, inline: true }, + { name: "Credits", value: info.credits, inline: true }, + { + name: "First login", + value: info.firstLogin, + inline: true, + }, + { + name: "Last login", + value: info.lastLogin, + inline: true, + }, + { name: "Last logout", value: info.lastLogout } + ); + message.channel.send(statEmbed); + message.delete(); + }) + .catch((e) => { + console.log(e); + }); + } } -module.exports = HiveCommand; \ No newline at end of file +module.exports = HiveCommand; diff --git a/commands/hypixel.js b/commands/hypixel.js index e1b0efc..2ac510b 100644 --- a/commands/hypixel.js +++ b/commands/hypixel.js @@ -1,370 +1,428 @@ -const { Command } = require('discord-akairo'); -const discord = require('discord.js'); +const { Command } = require("discord-akairo"); +const discord = require("discord.js"); // Require Hypixel Api wrapper -const { hypixel_api } = require('../config.json'); -const Hypixel = require('hypixel-api-reborn'); +const { hypixel_api } = require("../config.json"); +const Hypixel = require("hypixel-api-reborn"); const hypixel = new Hypixel.Client(hypixel_api); -const { version } = require('../package.json'); - +const { version } = require("../package.json"); class HypixelCommand extends Command { - constructor(){ - super('hypixel', { - aliases: ['hypixel', 'hp', 'hyp'], - category: 'minecraft', - description: { - content: "Get's your hypixel stats from various games.", - usage: ' [game]', - examples: ['TheCuddlyBear', 'TheDevilsRoses bedwars', 'MagixSpellz murdermystery'] - }, - args: [{ - id: 'playername', - }, { - id: 'stattype', - default: 'player' - }] - }) - } + constructor() { + super("hypixel", { + aliases: ["hypixel", "hp", "hyp"], + category: "minecraft", + description: { + content: "Get's your hypixel stats from various games.", + usage: " [game]", + examples: [ + "TheCuddlyBear", + "TheDevilsRoses bedwars", + "MagixSpellz murdermystery", + ], + }, + args: [ + { + id: "playername", + }, + { id: "stattype", default: "player" }, + ], + }); + } - exec(message, { stattype, playername }){ - if (stattype !== 'player') { // checks which stats user wants - switch (stattype) { - case 'skywars': - getSkywarsStats(playername, message) - message.delete(); - break; - case 'bedwars': - getBedwarsStats(playername, message) - message.delete(); - break; - case 'murdermystery': - getMurderStats(playername, message) - message.delete(); - break; - case 'buildbattle': - getBuildStats(playername, message) - message.delete(); - break; - case 'skyblock': - message.channel.send("You can view your skyblock stats here: https://sky.shiiyu.moe/stats/" + playername) - message.delete(); - break; - case 'vampirez': - getVampireStats(playername, message) - message.delete(); - break; - case 'guild': - getGuildStats(playername, message) - message.delete(); - break; - } - } else { - hypixel.getPlayer(playername).then(player => { - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + exec(message, { stattype, playername }) { + if (stattype !== "player") { + // checks which stats user wants + switch (stattype) { + case "skywars": + getSkywarsStats(playername, message); + message.delete(); + break; + case "bedwars": + getBedwarsStats(playername, message); + message.delete(); + break; + case "murdermystery": + getMurderStats(playername, message); + message.delete(); + break; + case "buildbattle": + getBuildStats(playername, message); + message.delete(); + break; + case "skyblock": + message.channel.send( + "You can view your skyblock stats here: https://sky.shiiyu.moe/stats/" + + playername + ); + message.delete(); + break; + case "vampirez": + getVampireStats(playername, message); + message.delete(); + break; + case "guild": + getGuildStats(playername, message); + message.delete(); + break; + } + } else { + hypixel + .getPlayer(playername) + .then((player) => { + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " Hypixel stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Rank', - value: player.rank, - inline: true - }, { - name: 'Karma', - value: player.karma, - inline: true - }, { - name: 'Level', - value: player.level, - inline: true - }, { - name: 'First login', - value: player.firstLogin, - inline: true - }, { - name: 'Last login', - value: player.lastLogin, - inline: true - }, { - name: 'Last played game', - value: player.recentlyPlayedGame.toString() - }) - message.channel.send(statEmbed); - message.delete(); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " Hypixel stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { name: "Rank", value: player.rank, inline: true }, + { name: "Karma", value: player.karma, inline: true }, + { name: "Level", value: player.level, inline: true }, + { + name: "First login", + value: player.firstLogin, + inline: true, + }, + { + name: "Last login", + value: player.lastLogin, + inline: true, + }, + { + name: "Last played game", + value: player.recentlyPlayedGame.toString(), + } + ); + message.channel.send(statEmbed); + message.delete(); + }) + .catch((e) => { + console.log(e); + }); + } - function getSkywarsStats(player, message) { - hypixel.getPlayer(player).then(player => { // requests api for the player object - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getSkywarsStats(player, message) { + hypixel + .getPlayer(player) + .then((player) => { + // requests api for the player object + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() // creates embed message with stats - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " Skywars stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Coins', - value: player.stats.skywars.coins, - inline: true - }, { - name: 'Souls', - value: player.stats.skywars.souls, - inline: true - }, { - name: 'Level', - value: player.stats.skywars.level, - inline: true - }, { - name: 'Wins', - value: player.stats.skywars.wins, - inline: true - }, { - name: 'Losses', - value: player.stats.skywars.losses, - inline: true - }, { - name: 'Kills', - value: player.stats.skywars.kills, - inline: true - }, { - name: 'K/D ration', - value: player.stats.skywars.KDRatio, - inline: true - }, ) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() // creates embed message with stats + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " Skywars stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Coins", + value: player.stats.skywars.coins, + inline: true, + }, + { + name: "Souls", + value: player.stats.skywars.souls, + inline: true, + }, + { + name: "Level", + value: player.stats.skywars.level, + inline: true, + }, + { + name: "Wins", + value: player.stats.skywars.wins, + inline: true, + }, + { + name: "Losses", + value: player.stats.skywars.losses, + inline: true, + }, + { + name: "Kills", + value: player.stats.skywars.kills, + inline: true, + }, + { + name: "K/D ration", + value: player.stats.skywars.KDRatio, + inline: true, + } + ); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); + } - function getMurderStats(player, message) { - hypixel.getPlayer(player).then(player => { - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getMurderStats(player, message) { + hypixel + .getPlayer(player) + .then((player) => { + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " Murder Mystery stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Coins', - value: player.stats.murdermystery.coins, - inline: true - }, { - name: 'Murderer Wins', - value: player.stats.murdermystery.winsAsMurderer, - inline: true - }, { - name: 'Detective Wins', - value: player.stats.murdermystery.winsAsDetective, - inline: true - }, { - name: 'Wins', - value: player.stats.murdermystery.wins, - inline: true - }, { - name: 'Kills', - value: player.stats.murdermystery.kills, - inline: true - }, { - name: 'Deaths', - value: player.stats.murdermystery.deaths, - inline: true - }, { - name: 'K/D ratio', - value: player.stats.murdermystery.KDRatio, - inline: true - }, ) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " Murder Mystery stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Coins", + value: player.stats.murdermystery.coins, + inline: true, + }, + { + name: "Murderer Wins", + value: player.stats.murdermystery.winsAsMurderer, + inline: true, + }, + { + name: "Detective Wins", + value: player.stats.murdermystery.winsAsDetective, + inline: true, + }, + { + name: "Wins", + value: player.stats.murdermystery.wins, + inline: true, + }, + { + name: "Kills", + value: player.stats.murdermystery.kills, + inline: true, + }, + { + name: "Deaths", + value: player.stats.murdermystery.deaths, + inline: true, + }, + { + name: "K/D ratio", + value: player.stats.murdermystery.KDRatio, + inline: true, + } + ); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); + } - function getBedwarsStats(player, message) { - hypixel.getPlayer(player).then(player => { - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getBedwarsStats(player, message) { + hypixel + .getPlayer(player) + .then((player) => { + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " Bedwars stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Coins', - value: player.stats.bedwars.coins, - inline: true - }, { - name: 'Level', - value: player.stats.bedwars.level, - inline: true - }, { - name: 'Wins', - value: player.stats.bedwars.wins, - inline: true - }, { - name: 'Losses', - value: player.stats.bedwars.losses, - inline: true - }, { - name: 'Deaths', - value: player.stats.bedwars.deaths, - inline: true - }, { - name: 'Final Deaths', - value: player.stats.bedwars.finalDeaths, - inline: true - }, { - name: 'Kills', - value: player.stats.bedwars.kills, - inline: true - }, { - name: 'K/D ration', - value: player.stats.skywars.KDRatio, - inline: true - }, ) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " Bedwars stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Coins", + value: player.stats.bedwars.coins, + inline: true, + }, + { + name: "Level", + value: player.stats.bedwars.level, + inline: true, + }, + { + name: "Wins", + value: player.stats.bedwars.wins, + inline: true, + }, + { + name: "Losses", + value: player.stats.bedwars.losses, + inline: true, + }, + { + name: "Deaths", + value: player.stats.bedwars.deaths, + inline: true, + }, + { + name: "Final Deaths", + value: player.stats.bedwars.finalDeaths, + inline: true, + }, + { + name: "Kills", + value: player.stats.bedwars.kills, + inline: true, + }, + { + name: "K/D ration", + value: player.stats.skywars.KDRatio, + inline: true, + } + ); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); + } - function getBuildStats(player, message) { - hypixel.getPlayer(player).then(player => { - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getBuildStats(player, message) { + hypixel + .getPlayer(player) + .then((player) => { + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " Build Battle stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Score', - value: player.stats.buildbattle.score, - inline: true - }, { - name: 'Played Games', - value: player.stats.buildbattle.playedGames, - inline: true - }, { - name: 'Coins', - value: player.stats.buildbattle.coins, - inline: true - }, { - name: 'Total wins', - value: player.stats.buildbattle.totalWins, - inline: true - }, { - name: 'Solo wins', - value: player.stats.buildbattle.wins.solo, - inline: true - }, { - name: 'Team wins', - value: player.stats.buildbattle.wins.team, - inline: true - }, { - name: 'Pro wins', - value: player.stats.buildbattle.wins.pro, - inline: true - }, { - name: 'GTB Wins', - value: player.stats.buildbattle.wins.gtb, - inline: true - }, ) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " Build Battle stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Score", + value: player.stats.buildbattle.score, + inline: true, + }, + { + name: "Played Games", + value: player.stats.buildbattle.playedGames, + inline: true, + }, + { + name: "Coins", + value: player.stats.buildbattle.coins, + inline: true, + }, + { + name: "Total wins", + value: player.stats.buildbattle.totalWins, + inline: true, + }, + { + name: "Solo wins", + value: player.stats.buildbattle.wins.solo, + inline: true, + }, + { + name: "Team wins", + value: player.stats.buildbattle.wins.team, + inline: true, + }, + { + name: "Pro wins", + value: player.stats.buildbattle.wins.pro, + inline: true, + }, + { + name: "GTB Wins", + value: player.stats.buildbattle.wins.gtb, + inline: true, + } + ); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); + } - function getVampireStats(player, message) { - hypixel.getPlayer(player).then(player => { - if (player.nickname.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getVampireStats(player, message) { + hypixel + .getPlayer(player) + .then((player) => { + if (player.nickname.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(player.nickname + suffix + " VampireZ stats") - .setThumbnail('https://minotar.net/avatar/' + player.nickname) - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Human', - value: `Kills: ${player.stats.vampirez.human.kills} \n Deaths: ${player.stats.vampirez.human.deaths} \n K/D Ratio: ${player.stats.vampirez.human.KDRatio} \n Wins: ${player.stats.vampirez.human.wins}`, - inline: true - }, { - name: 'Vampire', - value: `Kills: ${player.stats.vampirez.vampire.kills} \n Deaths: ${player.stats.vampirez.vampire.deaths} \n K/D Ratio: ${player.stats.vampirez.vampire.KDRatio}`, - inline: true - }, { - name: 'Zombie', - value: `Kills: ${player.stats.vampirez.vampire.kills}`, - inline: true - }, ) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(player.nickname + suffix + " VampireZ stats") + .setThumbnail("https://minotar.net/avatar/" + player.nickname) + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields( + { + name: "Human", + value: `Kills: ${player.stats.vampirez.human.kills} \n Deaths: ${player.stats.vampirez.human.deaths} \n K/D Ratio: ${player.stats.vampirez.human.KDRatio} \n Wins: ${player.stats.vampirez.human.wins}`, + inline: true, + }, + { + name: "Vampire", + value: `Kills: ${player.stats.vampirez.vampire.kills} \n Deaths: ${player.stats.vampirez.vampire.deaths} \n K/D Ratio: ${player.stats.vampirez.vampire.KDRatio}`, + inline: true, + }, + { + name: "Zombie", + value: `Kills: ${player.stats.vampirez.vampire.kills}`, + inline: true, + } + ); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); + } - function getGuildStats(guildArg, message) { - hypixel.getGuild('name', guildArg).then(guild => { - if (guild.name.endsWith('s')) { - var suffix = "'" - } else { - var suffix = "'s" - } + function getGuildStats(guildArg, message) { + hypixel + .getGuild("name", guildArg) + .then((guild) => { + if (guild.name.endsWith("s")) { + var suffix = "'"; + } else { + var suffix = "'s"; + } - const statEmbed = new discord.MessageEmbed() - .setColor('#FF0033') - .setTitle(guild.name + suffix + " stats") - .setTimestamp() - .setFooter(`Hypixel Stats • Panda Jr. v${version}`) - .addFields({ - name: 'Level', - value: guild.level, - inline: true - }) - message.channel.send(statEmbed); - }).catch(e => { - console.log(e) - }) - } + const statEmbed = new discord.MessageEmbed() + .setColor("#FF0033") + .setTitle(guild.name + suffix + " stats") + .setTimestamp() + .setFooter(`Hypixel Stats • Panda Jr. v${version}`) + .addFields({ name: "Level", value: guild.level, inline: true }); + message.channel.send(statEmbed); + }) + .catch((e) => { + console.log(e); + }); } + } } -module.exports = HypixelCommand; \ No newline at end of file +module.exports = HypixelCommand; diff --git a/commands/minecraftstatus.js b/commands/minecraftstatus.js index 33f383b..fb62cca 100644 --- a/commands/minecraftstatus.js +++ b/commands/minecraftstatus.js @@ -1,41 +1,43 @@ -const minecraftUtil = require('minecraft-server-util'); -const Discord = require('discord.js'); -const { Command } = require('discord-akairo') -const { version } = require('../package.json'); +const minecraftUtil = require("minecraft-server-util"); +const Discord = require("discord.js"); +const { Command } = require("discord-akairo"); +const { version } = require("../package.json"); class MinecraftStatusCommand extends Command { - constructor(){ - super('minecraftstatus', { - aliases: ['mcstatus', 'mc'], - category: 'minecraft', - description: { - content: 'Displays the server status of the Roses Minecraft Server', - } - }); - } + constructor() { + super("minecraftstatus", { + aliases: ["mcstatus", "mc"], + category: "minecraft", + description: { + content: "Displays the server status of the Roses Minecraft Server", + }, + }); + } - async exec(message){ - minecraftUtil.status('play.takato.eu', { port: 25565}) // Get status - .then((response) => { - const statusEmbed = new Discord.MessageEmbed() // Create embed with status - .setColor('#FF0033') - .setTitle('Roses Minecraft Status') - .setFooter(`Panda Jr. v${version}`) - .setThumbnail('https://minecraft-mp.com/images/favicon/277055.png') - .addFields( - { name: 'Server IP', value: 'play.takato.eu' }, - { name: 'Server Version', value: response.version }, - { name: 'Online players', value: response.onlinePlayers }, - { name: 'Max player', value: response.maxPlayers } - ) - .setTimestamp(); - message.channel.send(statusEmbed); // send message - message.delete(); - }) - .catch((error) => { // catch errors - throw error; - }) - } + async exec(message) { + minecraftUtil + .status("play.takato.eu", { port: 25565 }) // Get status + .then((response) => { + const statusEmbed = new Discord.MessageEmbed() // Create embed with status + .setColor("#FF0033") + .setTitle("Roses Minecraft Status") + .setFooter(`Panda Jr. v${version}`) + .setThumbnail("https://minecraft-mp.com/images/favicon/277055.png") + .addFields( + { name: "Server IP", value: "play.takato.eu" }, + { name: "Server Version", value: response.version }, + { name: "Online players", value: response.onlinePlayers }, + { name: "Max player", value: response.maxPlayers } + ) + .setTimestamp(); + message.channel.send(statusEmbed); // send message + message.delete(); + }) + .catch((error) => { + // catch errors + throw error; + }); + } } -module.exports = MinecraftStatusCommand; \ No newline at end of file +module.exports = MinecraftStatusCommand; diff --git a/commands/ping.js b/commands/ping.js index a78994c..6eaa962 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -1,20 +1,20 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class PingCommand extends Command { - constructor() { - super('ping', { - aliases: ['ping'], - category: "general", - description: "Pong" - }) - } + constructor() { + super("ping", { + aliases: ["ping"], + category: "general", + description: "Pong", + }); + } - exec(message) { - message.delete(); - return message.channel.send("Pong!").then(msg => { - msg.delete( { timeout: 10000 }); - }) - } + exec(message) { + message.delete(); + return message.channel.send("Pong!").then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } } -module.exports = PingCommand; \ No newline at end of file +module.exports = PingCommand; diff --git a/commands/play.js b/commands/play.js index 6568dce..82d5983 100644 --- a/commands/play.js +++ b/commands/play.js @@ -1,97 +1,117 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); // Youtube -const { youtube_api } = require('../config.json') -const YoutubeAPI = require('discord-youtube-api'); +const { youtube_api } = require("../config.json"); +const YoutubeAPI = require("discord-youtube-api"); const searcher = new YoutubeAPI(youtube_api); -const ytdl = require('ytdl-core'); - +const ytdl = require("ytdl-core"); class PlayCommand extends Command { - constructor(){ - super('play', { - aliases: ['play', 'p'], - category: "music", - description: { - content: "Plays the song you've given", - usage: '[song]', - examples: ['Blank space', 'Murder song'] - }, - args: [ - { - id: 'song', - match: 'text', - } - ] - }) - } + constructor() { + super("play", { + aliases: ["play", "p"], + category: "music", + description: { + content: "Plays the song you've given", + usage: "[song]", + examples: ["Blank space", "Murder song"], + }, + args: [ + { + id: "song", + match: "text", + }, + ], + }); + } - async exec(message, args){ - const serverQueue = this.client.queue.get(message.guild.id); - const client = this.client; + async exec(message, args) { + const serverQueue = this.client.queue.get(message.guild.id); + const client = this.client; - let vc = message.member.voice.channel; + let vc = message.member.voice.channel; - if(!vc){ - message.delete(); - return message.channel.send("You have to join a voice channel before you can use this command!").then(msg => { - msg.delete({ timeout: 10000 }); - }) - }else{ - const songSearch = await searcher.searchVideos(args.song); + if (!vc) { + message.delete(); + return message.channel + .send( + "You have to join a voice channel before you can use this command!" + ) + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } else { + const songSearch = await searcher.searchVideos(args.song); - if(!serverQueue){ - const queueConstructor = { // constructor for the server queue - textChannel: message.channel, - voiceChannel: vc, - connection: null, - songs: [], - volume: 0.1, - playing: true - }; - client.queue.set(message.guild.id, queueConstructor); + if (!serverQueue) { + const queueConstructor = { + // constructor for the server queue + textChannel: message.channel, + voiceChannel: vc, + connection: null, + songs: [], + volume: 0.1, + playing: true, + }; + client.queue.set(message.guild.id, queueConstructor); - queueConstructor.songs.push(songSearch); + queueConstructor.songs.push(songSearch); - try{ // try to join voice channel of user - let connection = await vc.join(); - queueConstructor.connection = connection; - play(message.guild, queueConstructor.songs[0]); - message.delete(); - }catch (err){ - console.error(err); - client.queue.delete(message.guild.id); - return message.channel.send(`I wasn't able to join the voice chat ${err}`) - } - }else { - serverQueue.songs.push(songSearch); - message.delete(); - return message.channel.send("I've added the song to the queue ```" + ` ${songSearch.title}` + "```").then(msg => { - msg.delete({ timeout: 10000 }) - }) - } - } - - function play(guild, song){ - const serverQueue = client.queue.get(guild.id); - if(!song){ // If there are no songs left, leave voice channel - serverQueue.voiceChannel.leave(); - client.queue.delete(guild.id); - return; - } - console.log(`Now playing: ${song.title}`); // Announce what song is now playing to console - const dispatcher = serverQueue.connection - .play(ytdl(song.url), { volume: serverQueue.volume }) - .on('finish', () =>{ - serverQueue.songs.shift(); - play(guild, serverQueue.songs[0]); - }) - serverQueue.textChannel.send("I'm now playing: ```" + `${serverQueue.songs[0].title} || Duration: ${serverQueue.songs[0].duration.minutes}:${serverQueue.songs[0].duration.seconds}` + "```" ).then(msg => { // announce to user what song is playing. - msg.delete({ timeout: 10000 }) - }) + try { + // try to join voice channel of user + let connection = await vc.join(); + queueConstructor.connection = connection; + play(message.guild, queueConstructor.songs[0]); + message.delete(); + } catch (err) { + console.error(err); + client.queue.delete(message.guild.id); + return message.channel.send( + `I wasn't able to join the voice chat ${err}` + ); } + } else { + serverQueue.songs.push(songSearch); + message.delete(); + return message.channel + .send( + "I've added the song to the queue ```" + + ` ${songSearch.title}` + + "```" + ) + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } + } + function play(guild, song) { + const serverQueue = client.queue.get(guild.id); + if (!song) { + // If there are no songs left, leave voice channel + serverQueue.voiceChannel.leave(); + client.queue.delete(guild.id); + return; + } + console.log(`Now playing: ${song.title}`); // Announce what song is now playing to console + const dispatcher = serverQueue.connection + .play(ytdl(song.url), { volume: serverQueue.volume }) + .on("finish", () => { + serverQueue.songs.shift(); + play(guild, serverQueue.songs[0]); + }); + serverQueue.textChannel + .send( + "I'm now playing: ```" + + `${serverQueue.songs[0].title} || Duration: ${serverQueue.songs[0].duration.minutes}:${serverQueue.songs[0].duration.seconds}` + + "```" + ) + .then((msg) => { + // announce to user what song is playing. + msg.delete({ timeout: 10000 }); + }); } + } } -module.exports = PlayCommand; \ No newline at end of file +module.exports = PlayCommand; diff --git a/commands/purge.js b/commands/purge.js index 0fc4fa5..df4ffb4 100644 --- a/commands/purge.js +++ b/commands/purge.js @@ -1,42 +1,42 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class PurgeCommand extends Command { - constructor(){ - super('purge',{ - aliases: ['purge'], - category: 'utility', - clientPermissions: ['MANAGE_MESSAGES'], - description: { - content: 'Purges the given amount of messages', - usage: '', - examples: ['1', '10', '37'] - }, - args: [{ - id: 'purgeArg', - type: 'integer' - }] - }) - } - - exec(message, { purgeArg }){ - const amount = parseInt(purgeArg) + 1; + constructor() { + super("purge", { + aliases: ["purge"], + category: "utility", + clientPermissions: ["MANAGE_MESSAGES"], + description: { + content: "Purges the given amount of messages", + usage: "", + examples: ["1", "10", "37"], + }, + args: [{ id: "purgeArg", type: "integer" }], + }); + } - if (isNaN(amount)) { - return message.reply('That isn\'t a valid number.').then(msg => { - msg.delete({ timeout: 10000 }); - }); + exec(message, { purgeArg }) { + const amount = parseInt(purgeArg) + 1; - } else if (amount <= 1 || amount > 100) { - return message.reply('The number needs to be between 1 and 99!').then(msg => { - msg.delete({ timeout: 10000 }); - }); - } - - message.channel.bulkDelete(amount, true).catch(err => { - console.error(err); - message.channel.send('An error occured whilst trying to purge the messages in this channel.'); - }) + if (isNaN(amount)) { + return message.reply("That isn't a valid number.").then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } else if (amount <= 1 || amount > 100) { + return message + .reply("The number needs to be between 1 and 99!") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); } + + message.channel.bulkDelete(amount, true).catch((err) => { + console.error(err); + message.channel.send( + "An error occured whilst trying to purge the messages in this channel." + ); + }); + } } -module.exports = PurgeCommand; \ No newline at end of file +module.exports = PurgeCommand; diff --git a/commands/queue.js b/commands/queue.js index aac1fea..f2c03bd 100644 --- a/commands/queue.js +++ b/commands/queue.js @@ -1,32 +1,29 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class QueueCommand extends Command { - constructor(){ - super('queue', { - aliases: ['queue', 'q'], - category: 'music', - description: { - content: "Returns the current queue" - } - }) - } + constructor() { + super("queue", { + aliases: ["queue", "q"], + category: "music", + description: { content: "Returns the current queue" }, + }); + } - exec(message){ - const serverQueue = this.client.queue.get(message.guild.id); - const client = this.client - let messageA = "Current queue: \n ```" + exec(message) { + const serverQueue = this.client.queue.get(message.guild.id); + const client = this.client; + let messageA = "Current queue: \n ```"; - serverQueue.songs.forEach(song => { - messageA = messageA + `${song.title + "\n"}` - }) + serverQueue.songs.forEach((song) => { + messageA = messageA + `${song.title + "\n"}`; + }); - messageA = messageA + "```"; + messageA = messageA + "```"; - message.channel.send(messageA).then(msg => { - msg.delete({ timeout: 10000 }) - }) - - } + message.channel.send(messageA).then((msg) => { + msg.delete({ timeout: 10000 }); + }); + } } -module.exports = QueueCommand; \ No newline at end of file +module.exports = QueueCommand; diff --git a/commands/removeQueue.js b/commands/removeQueue.js index 8d3b34d..1ca5e16 100644 --- a/commands/removeQueue.js +++ b/commands/removeQueue.js @@ -1,15 +1,13 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class RemoveQueueCommand extends Command { - constructor() { - super('rmqueue', { - aliases: ['rmqueue'] - }) - } + constructor() { + super("rmqueue", { aliases: ["rmqueue"] }); + } - exec(message) { - this.client.queue.delete(message.guild.id) - } + exec(message) { + this.client.queue.delete(message.guild.id); + } } -module.exports = RemoveQueueCommand; \ No newline at end of file +module.exports = RemoveQueueCommand; diff --git a/commands/skip.js b/commands/skip.js index d449ac7..55de773 100644 --- a/commands/skip.js +++ b/commands/skip.js @@ -1,27 +1,30 @@ -const { Command } = require('discord-akairo'); +const { Command } = require("discord-akairo"); class SkipCommand extends Command { - constructor(){ - super('skip', { - aliases: ['skip'], - category: "music", - description: "Skips the currently playing song." - }) - } + constructor() { + super("skip", { + aliases: ["skip"], + category: "music", + description: "Skips the currently playing song.", + }); + } - exec(message){ - const serverQueue = this.client.queue.get(message.guild.id); + exec(message) { + const serverQueue = this.client.queue.get(message.guild.id); - if(!message.member.voice.channel)// check if user is in voice channel - return message.channel.send("You need to join the voice chat first").then(msg => { - msg.delete({ timeout: 10000 }) - }) - if(!serverQueue) - return message.channel.send("There is nothing to skip!").then(msg => { - msg.delete({ timeout: 10000 }) - }) - serverQueue.connection.dispatcher.end(); - } + if (!message.member.voice.channel) + // check if user is in voice channel + return message.channel + .send("You need to join the voice chat first") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + if (!serverQueue) + return message.channel.send("There is nothing to skip!").then((msg) => { + msg.delete({ timeout: 10000 }); + }); + serverQueue.connection.dispatcher.end(); + } } -module.exports = SkipCommand; \ No newline at end of file +module.exports = SkipCommand; diff --git a/commands/stop.js b/commands/stop.js index 1b66766..b871354 100644 --- a/commands/stop.js +++ b/commands/stop.js @@ -1,31 +1,37 @@ const { Command } = require("discord-akairo"); class StopCommand extends Command { - constructor(){ - super('stop', { - aliases: ['stop'], - category: "music", - description: "Stops playing music and deletes the current queue" - }) - } + constructor() { + super("stop", { + aliases: ["stop"], + category: "music", + description: "Stops playing music and deletes the current queue", + }); + } - exec(message){ - const serverQueue = this.client.queue.get(message.guild.id) + exec(message) { + const serverQueue = this.client.queue.get(message.guild.id); - if(!message.member.voice.channel) - return message.channel.send("You need to join the voice channel first!").then(msg => { - msg.delete({ timeout: 10000 }) - }) - if(!serverQueue) - return message.channel.send("I am not playing anything right now...").then(msg => { - msg.delete({ timeout: 10000 }) - }) - message.channel.send("I will stop playing now, see you next time :wink:").then(msg => { - msg.delete({ timeout: 10000 }) - }) - serverQueue.songs = [] - serverQueue.connection.dispatcher.end(); - } + if (!message.member.voice.channel) + return message.channel + .send("You need to join the voice channel first!") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + if (!serverQueue) + return message.channel + .send("I am not playing anything right now...") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + message.channel + .send("I will stop playing now, see you next time :wink:") + .then((msg) => { + msg.delete({ timeout: 10000 }); + }); + serverQueue.songs = []; + serverQueue.connection.dispatcher.end(); + } } -module.exports = StopCommand; \ No newline at end of file +module.exports = StopCommand; diff --git a/index.js b/index.js index d637c28..439b798 100644 --- a/index.js +++ b/index.js @@ -1,34 +1,36 @@ -const { AkairoClient, CommandHandler, InhibitorHandler, ListenerHandler } = require('discord-akairo'); -const config = require('./config.json'); -const Discord = require('discord.js') +const { + AkairoClient, + CommandHandler, + InhibitorHandler, + ListenerHandler, +} = require("discord-akairo"); +const config = require("./config.json"); +const Discord = require("discord.js"); class PandaClient extends AkairoClient { - constructor() { - super({ - ownerID: '206879635059900417' - }); - - this.commandHandler = new CommandHandler(this, { - directory: './commands/', - prefix: config.prefix, - commandUtil: true - }) - - this.inhibitorHandler = new InhibitorHandler(this, { - directory: './inhibitors/' - }) - - this.listenerHandler = new ListenerHandler(this, { - directory: './listeners/' - }) - - this.commandHandler.useInhibitorHandler(this.inhibitorHandler); - this.commandHandler.useListenerHandler(this.listenerHandler); - this.commandHandler.loadAll(); - this.listenerHandler.loadAll(); - this.inhibitorHandler.loadAll(); - } - + constructor() { + super({ ownerID: "206879635059900417" }); + + this.commandHandler = new CommandHandler(this, { + directory: "./commands/", + prefix: config.prefix, + commandUtil: true, + }); + + this.inhibitorHandler = new InhibitorHandler(this, { + directory: "./inhibitors/", + }); + + this.listenerHandler = new ListenerHandler(this, { + directory: "./listeners/", + }); + + this.commandHandler.useInhibitorHandler(this.inhibitorHandler); + this.commandHandler.useListenerHandler(this.listenerHandler); + this.commandHandler.loadAll(); + this.listenerHandler.loadAll(); + this.inhibitorHandler.loadAll(); + } } const client = new PandaClient(); @@ -36,4 +38,4 @@ const client = new PandaClient(); // music queue client.queue = new Discord.Collection(); -client.login(config.token); \ No newline at end of file +client.login(config.token); diff --git a/listeners/error.js b/listeners/error.js index 9e79e00..e1c6254 100644 --- a/listeners/error.js +++ b/listeners/error.js @@ -1,16 +1,13 @@ -const { Listener } = require('discord-akairo'); +const { Listener } = require("discord-akairo"); -class ErrorListener extends Listener{ - constructor() { - super('error', { - emitter: 'client', - event: 'error' - }) - } +class ErrorListener extends Listener { + constructor() { + super("error", { emitter: "client", event: "error" }); + } - exec() { - console.error; - } + exec() { + console.error; + } } -module.exports = ErrorListener; \ No newline at end of file +module.exports = ErrorListener; diff --git a/listeners/ready.js b/listeners/ready.js index baebf19..9ef8b18 100644 --- a/listeners/ready.js +++ b/listeners/ready.js @@ -1,34 +1,33 @@ -const { Listener } = require('discord-akairo'); -const config = require('../config.json'); +const { Listener } = require("discord-akairo"); +const config = require("../config.json"); class ReadyListener extends Listener { - constructor() { - super('ready', { - emitter: 'client', - event: 'ready' - }) - } + constructor() { + super("ready", { emitter: "client", event: "ready" }); + } - exec() { - console.log(`I have logged in as ${this.client.user.username} (${this.client.user.id})`) - if(config.user.updated === true){ - this.client.user.setUsername(config.user.name); - this.client.user.setAvatar(config.user.avatar); - console.log("I have updated the username and avatar!") - } - if(config.status.enabled){ - if(config.status.type === "STREAMING"){ - this.client.user.setActivity(config.status.text, { - type: config.status.type, - url: config.status.url - }); - }else { - this.client.user.setActivity(config.status.text, { - type: config.status.type - }); - } - } + exec() { + console.log( + `I have logged in as ${this.client.user.username} (${this.client.user.id})` + ); + if (config.user.updated === true) { + this.client.user.setUsername(config.user.name); + this.client.user.setAvatar(config.user.avatar); + console.log("I have updated the username and avatar!"); + } + if (config.status.enabled) { + if (config.status.type === "STREAMING") { + this.client.user.setActivity(config.status.text, { + type: config.status.type, + url: config.status.url, + }); + } else { + this.client.user.setActivity(config.status.text, { + type: config.status.type, + }); + } } + } } -module.exports = ReadyListener; \ No newline at end of file +module.exports = ReadyListener;