mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-24 22:34:46 +02:00
Paladins Command
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const { MessageEmbed } = require('discord.js');
|
||||
const request = require('node-superfetch');
|
||||
const moment = require('moment');
|
||||
const classStats = require('../../assets/json/paladins');
|
||||
const { FLANKER_EMOJI_ID, DAMAGE_EMOJI_ID, FRONT_LINE_EMOJI_ID, SUPPORT_EMOJI_ID } = process.env;
|
||||
|
||||
module.exports = class PaladinsCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'paladins',
|
||||
aliases: ['paladins-guru'],
|
||||
group: 'search',
|
||||
memberName: 'paladins',
|
||||
description: 'Responds with information on a Paladins player.',
|
||||
clientPermissions: ['EMBED_LINKS'],
|
||||
credit: [
|
||||
{
|
||||
name: 'Evil Mojo Games',
|
||||
url: 'https://www.evilmojogames.com/',
|
||||
reason: 'Original "Paladins" Game',
|
||||
reasonURL: 'https://www.paladins.com/'
|
||||
},
|
||||
{
|
||||
name: 'PaladinsGuru',
|
||||
url: 'https://paladins.guru/',
|
||||
reason: 'API'
|
||||
}
|
||||
],
|
||||
args: [
|
||||
{
|
||||
key: 'player',
|
||||
prompt: 'What player would you like to get information on?',
|
||||
type: 'string'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
this.champions = null;
|
||||
}
|
||||
|
||||
async run(msg, { player }) {
|
||||
try {
|
||||
const search = await this.search(player);
|
||||
if (!search) return msg.say('Could not find any results.');
|
||||
const data = await this.fetchPlayer(id);
|
||||
if (!this.champions) await this.fetchChampions();
|
||||
const champions = data.champions.map(champ => {
|
||||
const champData = this.champions[champ.id];
|
||||
const classStat = classStats[champData.class];
|
||||
const emoji = this.classEmoji(champData.class);
|
||||
return `${emoji} ${champData.name} (${champData[classStat.id]} ${classStat.display})`;
|
||||
});
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x1E9BAD)
|
||||
.setAuthor('Paladins Guru', 'https://i.imgur.com/iIAdriK.png', 'https://paladins.guru/')
|
||||
.addField('❯ Name', data.name, true)
|
||||
.addField('❯ ID', data.id, true)
|
||||
.addField('❯ Level', data.level, true)
|
||||
.addField('❯ Last Seen', moment.utc(data.seen).format('MM/DD/YYYY h:mm A'), true)
|
||||
.addField('❯ Region', data.region, true)
|
||||
.addField('❯ Team', data.team || 'Free Agent', true)
|
||||
.addField('❯ Top 5 Champions', champions.slice(0, 5).join('\n'));
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
}
|
||||
|
||||
async search(query) {
|
||||
const { body } = await request
|
||||
.get('https://api.paladins.guru/v3/search')
|
||||
.query({
|
||||
term: query,
|
||||
type: 'Player'
|
||||
});
|
||||
if (!body.length) return null;
|
||||
return body[0];
|
||||
}
|
||||
|
||||
async fetchPlayer(id) {
|
||||
const { body } = await request.get(`https://api.paladins.guru/v3/profiles/${id}/summary`);
|
||||
return body;
|
||||
}
|
||||
|
||||
async fetchChampions() {
|
||||
if (this.champions) return this.champions;
|
||||
const { body } = await request.get('https://api.paladins.guru/v3/champions/');
|
||||
this.champions = body;
|
||||
setTimeout(() => { this.champions = null; }, 3.6e+6);
|
||||
return body;
|
||||
}
|
||||
|
||||
classEmoji(className) {
|
||||
let emojiID;
|
||||
switch (className) {
|
||||
case 'Flanker': emojiID = FLANKER_EMOJI_ID; break;
|
||||
case 'Support': emojiID = SUPPORT_EMOJI_ID; break;
|
||||
case 'Damage': emojiID = DAMAGE_EMOJI_ID; break;
|
||||
case 'Front Line': emojiID = FRONT_LINE_EMOJI_ID; break;
|
||||
}
|
||||
return `<:${className.replace(/ /g, '')}:${emojiID}>`
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user