mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 18:57:03 +02:00
134 lines
4.9 KiB
TypeScript
134 lines
4.9 KiB
TypeScript
import { EmbedBuilder, SlashCommandBuilder } from 'discord.js';
|
|
import { CommandRegistry } from '../behaviors/interactionCreate.js';
|
|
import { SKILLED_COLOR } from '../constants/colors.js';
|
|
import { BLITZ_SERVERS, BlitzServer } from '../constants/servers.js';
|
|
import blitzLinks from '../utilities/blitzLinks.js';
|
|
import getBlitzAccount from '../utilities/getBlitzAccount.js';
|
|
import getBlitzStarsAccount from '../utilities/getBlitzStarsAccount.js';
|
|
import poweredByBlitzStars from '../utilities/poweredByBlitzStars.js';
|
|
|
|
export default {
|
|
inProduction: true,
|
|
inDevelopment: false,
|
|
inPublic: true,
|
|
|
|
command: new SlashCommandBuilder()
|
|
.setName('stats')
|
|
.setDescription("Gets the user's in-game statistics")
|
|
.addStringOption((option) =>
|
|
option
|
|
.setName('period')
|
|
.setDescription('The last number of days of stats')
|
|
.setChoices(
|
|
{ name: '30 Days', value: '30' },
|
|
{ name: '90 Days', value: '90' },
|
|
{ name: 'Career', value: 'career' },
|
|
)
|
|
.setRequired(true),
|
|
)
|
|
.addStringOption((option) =>
|
|
option
|
|
.setName('server')
|
|
.setDescription('The Blitz server you are in')
|
|
.addChoices(
|
|
{ name: BLITZ_SERVERS.com, value: 'com' },
|
|
{ name: BLITZ_SERVERS.eu, value: 'eu' },
|
|
{ name: BLITZ_SERVERS.asia, value: 'asia' },
|
|
)
|
|
.setRequired(true),
|
|
)
|
|
.addStringOption((option) =>
|
|
option
|
|
.setName('name')
|
|
.setDescription('The username you use in Blitz')
|
|
.setRequired(true),
|
|
),
|
|
|
|
execute(interaction) {
|
|
const name = interaction.options.getString('name')!;
|
|
const server = interaction.options.getString('server') as BlitzServer;
|
|
const period = interaction.options.getString('period')! as
|
|
| '30'
|
|
| '90'
|
|
| 'career';
|
|
|
|
getBlitzAccount(interaction, name, server, async (account) => {
|
|
getBlitzStarsAccount(
|
|
interaction,
|
|
account.account_id,
|
|
name,
|
|
async (data) => {
|
|
{
|
|
const stats =
|
|
period === 'career' ? data.statistics : data[`period${period}d`];
|
|
|
|
await interaction.reply({
|
|
embeds: [
|
|
poweredByBlitzStars(
|
|
new EmbedBuilder()
|
|
.setColor(SKILLED_COLOR)
|
|
.setTitle(
|
|
`${data.nickname}'s ${
|
|
period === 'career' ? period : `${period} day`
|
|
} stats`,
|
|
)
|
|
.setDescription(
|
|
`${[
|
|
['Winrate', `${stats.special.winrate.toFixed(2)}%`],
|
|
[
|
|
'Survival',
|
|
`${stats.special.survivalRate.toFixed(2)}%`,
|
|
],
|
|
[
|
|
'Accuracy',
|
|
`${((stats.all.hits / stats.all.shots) * 100).toFixed(
|
|
2,
|
|
)}%`,
|
|
],
|
|
['WN8', stats.wn8.toFixed(0)],
|
|
['WN7', stats.wn7.toFixed(0)],
|
|
[],
|
|
['Battles', stats.all.battles],
|
|
['Wins', stats.all.wins],
|
|
['Losses', stats.all.losses],
|
|
['Average tier', stats.avg_tier.toFixed(2)],
|
|
[],
|
|
['Hits per battle', stats.special.hpb.toFixed(2)],
|
|
['Damage per battle', stats.special.dpb.toFixed(0)],
|
|
['Kills per battle', stats.special.kpb.toFixed(2)],
|
|
['Spots per battle', stats.special.spb.toFixed(2)],
|
|
[
|
|
'Shots per battle',
|
|
(stats.all.shots / stats.all.battles).toFixed(2),
|
|
],
|
|
[
|
|
'Hits per battle',
|
|
(stats.all.hits / stats.all.battles).toFixed(2),
|
|
],
|
|
[
|
|
'XP per battle',
|
|
(stats.all.xp / stats.all.battles).toFixed(0),
|
|
],
|
|
[],
|
|
['Damage ratio', stats.special.damageRatio.toFixed(2)],
|
|
['Kills to death ratio', stats.special.kdr.toFixed(2)],
|
|
]
|
|
.map((array) =>
|
|
array.length === 0
|
|
? ''
|
|
: `**${array[0]}**: ${array[1]}`,
|
|
)
|
|
.join('\n')}\n\n${blitzLinks(data)}`,
|
|
),
|
|
),
|
|
],
|
|
});
|
|
|
|
console.log(`Showing ${data.nickname}'s ${period} stats`);
|
|
}
|
|
},
|
|
);
|
|
});
|
|
},
|
|
} satisfies CommandRegistry;
|