const { SlashCommandBuilder, EmbedBuilder, parseEmoji } = require("discord.js"); const BaseCommand = require("../../base/BaseCommand"); class Work extends BaseCommand { /** * * @param {import("../base/JaBa")} client */ constructor(client) { super({ command: new SlashCommandBuilder() .setName("work") .setDescription(client.translate("economy/work:DESCRIPTION")), aliases: [], dirname: __dirname, guildOnly: true, ownerOnly: false }); } /** * * @param {import("../../base/JaBa")} client */ async onLoad() { //... } /** * * @param {import("../../base/JaBa")} client * @param {import("discord.js").ChatInputCommandInteraction} interaction * @param {Object} data */ async execute(client, interaction, data) { const isInCooldown = data.memberData.cooldowns?.work; if (isInCooldown) { if (isInCooldown > Date.now()) return interaction.error("economy/work:COOLDOWN", { time: client.convertTime(isInCooldown, true, true) }); } if (Date.now() > data.memberData.cooldowns.work + (24 * 3600000)) data.memberData.workStreak = 0; const toWait = Date.now() + 43200000; // 24 hours data.memberData.cooldowns.work = toWait; data.memberData.markModified("cooldowns"); data.memberData.workStreak = (data.memberData.workStreak || 0) + 1; await data.memberData.save(); const embed = new EmbedBuilder() .setFooter({ text: interaction.translate("economy/work:AWARD"), iconURL: interaction.member.displayAvatarURL() }) .setColor(client.config.embed.color); const award = [ client.customEmojis.letters.a, client.customEmojis.letters.w, client.customEmojis.letters.a, client.customEmojis.letters.r, client.customEmojis.letters.d ]; let won = 200; if (data.memberData.workStreak >= 5) { won += 200; embed.addFields([ { name: interaction.translate("economy/work:SALARY"), value: interaction.translate("economy/work:SALARY_CONTENT", { won: `**${won}** ${client.getNoun(won, interaction.translate("misc:NOUNS:CREDIT:1"), interaction.translate("misc:NOUNS:CREDIT:2"), interaction.translate("misc:NOUNS:CREDIT:5"))}` }) }, { name: interaction.translate("economy/work:STREAK"), value: interaction.translate("economy/work:STREAK_CONTENT") } ]); data.memberData.workStreak = 0; } else { for (let i = 0; i < award.length; i++) { if (data.memberData.workStreak > i) { const letter = parseEmoji(award[i]).name.split("_")[1]; award[i] = `:regional_indicator_${letter.toLowerCase()}:`; } } embed.addFields([ { name: interaction.translate("economy/work:SALARY"), value: interaction.translate("economy/work:SALARY_CONTENT", { won: `**${won}** ${client.getNoun(won, interaction.translate("misc:NOUNS:CREDIT:1"), interaction.translate("misc:NOUNS:CREDIT:2"), interaction.translate("misc:NOUNS:CREDIT:5"))}` }) }, { name: interaction.translate("economy/work:STREAK"), value: award.join("") } ]); } const info = { user: interaction.translate("economy/work:SALARY"), amount: won, date: Date.now(), type: "got" }; data.memberData.transactions.push(info); data.memberData.money += won; await data.memberData.save(); const messageOptions = { embeds: [embed] }; if (!data.userData.achievements.work.achieved) { data.userData.achievements.work.progress.now += 1; if (data.userData.achievements.work.progress.now === data.userData.achievements.work.progress.total) { messageOptions.files = [{ name: "unlocked.png", attachment: "./assets/img/achievements/achievement_unlocked1.png" }]; data.userData.achievements.work.achieved = true; } data.userData.markModified("achievements.work"); await data.userData.save(); } interaction.reply(messageOptions); } } module.exports = Work;