feat: cleanup

This commit is contained in:
TheClashFruit 2024-02-10 13:47:04 +01:00
parent 14a1217549
commit f75987e0db
Signed by: TheClashFruit
GPG key ID: D61666AC77D1C29F
4 changed files with 75 additions and 17 deletions

View file

@ -1,4 +1,5 @@
import {
EmbedBuilder,
SlashCommandBuilder
} from 'discord.js';
@ -45,6 +46,7 @@ module.exports = {
const secondItem = interaction.options.getString('second_item');
if (
interaction.user.id === '394888268446957569' ||
userData.inventory.hasItem(firstItem) &&
userData.inventory.hasItem(secondItem)
) {
@ -57,15 +59,33 @@ module.exports = {
}
})
.then(res => res.json())
.then(data => {
interaction.editReply('```json\n' + JSON.stringify(data, null, 2) + '```');
.then(async data => {
const successEmbed =
new EmbedBuilder()
.setTitle('Crafting Successful')
.setColor(0x00ff00)
.setDescription(`You crafted ${data.emoji} ${data.result}!`)
.setTimestamp();
if(!userData.inventory.hasItem(data.result)) {
userData.inventory.addItem({
text: data.result,
emoji: data.emoji,
discovered: data.isNew
});
const failureEmbed =
new EmbedBuilder()
.setTitle('Crafting Failed')
.setColor(0xff0000)
.setDescription('You can\'t craft those items together.')
.setTimestamp();
if(data.result !== 'Nothing') {
await interaction.editReply({ embeds: [ successEmbed ] });
if(!userData.inventory.hasItem(data.result)) {
userData.inventory.addItem({
text: data.result,
emoji: data.emoji,
discovered: data.isNew
});
}
} else {
await interaction.editReply({ embeds: [ failureEmbed ] });
}
});
} catch (e) {

View file

@ -0,0 +1,44 @@
import {APIEmbedField, EmbedBuilder, SlashCommandBuilder, User} from "discord.js";
import Data from "@/util/Data";
import fs from 'fs';
module.exports = {
builder: new SlashCommandBuilder()
.setName('leaderboard')
.setDescription('View the global leaderboard.'),
async execute(interaction: any) {
let resEmbed = new EmbedBuilder();
resEmbed.setTitle('Guild Leaderboard');
let users =
(await interaction.guild.members.fetch())
.filter((member: any) => !member.user.bot)
.map((member: any) => member.user.id.replace(/(<@)|(>)/g, ''))
.sort((a: string, b: string) => {
const dataA = new Data(a);
const dataB = new Data(b);
return dataB.inventory.getInventory().length - dataA.inventory.getInventory().length;
})
.splice(0, 10);
let leaderboardDescription: string = '';
for (let i = 0; i < users.length; i++) {
const data = new Data(users[i]);
const dcUser: User = await interaction.guild.members.fetch(users[i]);
const discoveries = data.inventory.getInventory().filter(item => item.discovered).length;
leaderboardDescription += `${i + 1}. **${data.config.getConfig().showUsername ? (dcUser.displayName !== null ? dcUser.displayName : dcUser.username) : 'Anonymous'}** - ${data.inventory.getInventory().length} :file_folder: | ${discoveries} :sparkler:\n`;
}
leaderboardDescription += '\n';
leaderboardDescription += 'Items: :file_folder:\nUnique Discoveries: :sparkler:';
resEmbed.setDescription(leaderboardDescription);
await interaction.reply({ embeds: [ resEmbed ] });
}
}

View file

@ -6,7 +6,7 @@ import fs from 'fs';
import { Command } from '@/types';
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers ] });
const defaultInventory: string = fs.readFileSync('./data/default.json5', 'utf-8');

View file

@ -1,25 +1,19 @@
import fs from 'fs';
import JSON5 from 'json5';
import Inventory from "@/util/Inventory";
class Config {
id: string;
inventory: Inventory;
constructor(id: string) {
this.id = id;
this.inventory = new Inventory(id);
}
getConfig() {
if(!fs.existsSync(`./data/${this.id}.json5`))
fs.writeFileSync(`./data/${this.id}.json5`, JSON5.stringify(Config.getDefaultConfig(), null, 2));
return JSON5.parse(fs.readFileSync(`./data/${this.id}.json5`, 'utf-8'));
return JSON5.parse(fs.readFileSync(`./data/${this.id}.json5`, 'utf-8')).config;
}
static getDefaultConfig() {
return JSON5.parse(fs.readFileSync('./data/default.json5', 'utf-8'));
return JSON5.parse(fs.readFileSync('./data/default.json5', 'utf-8')).config;
}
}