JaBa/commands/Economy/work.js

126 lines
3.8 KiB
JavaScript
Raw Permalink Normal View History

2024-09-19 23:58:06 +05:00
const { SlashCommandBuilder, parseEmoji, InteractionContextType, ApplicationIntegrationType } = require("discord.js");
2022-08-09 23:48:33 +05:00
const BaseCommand = require("../../base/BaseCommand");
class Work extends BaseCommand {
/**
*
2023-11-05 16:03:23 +05:00
* @param {import("../base/Client")} client
2022-08-09 23:48:33 +05:00
*/
constructor(client) {
super({
command: new SlashCommandBuilder()
.setName("work")
.setDescription(client.translate("economy/work:DESCRIPTION"))
.setDescriptionLocalizations({
2023-07-05 00:58:06 +05:00
uk: client.translate("economy/work:DESCRIPTION", null, "uk-UA"),
ru: client.translate("economy/work:DESCRIPTION", null, "ru-RU"),
})
2024-09-19 23:58:06 +05:00
.setIntegrationTypes([ApplicationIntegrationType.GuildInstall])
2024-09-14 19:52:56 +05:00
.setContexts([InteractionContextType.Guild]),
2022-08-09 23:48:33 +05:00
dirname: __dirname,
ownerOnly: false,
2022-08-09 23:48:33 +05:00
});
}
2022-08-09 23:48:33 +05:00
/**
*
2023-11-05 16:03:23 +05:00
* @param {import("../../base/Client")} client
2022-08-09 23:48:33 +05:00
* @param {import("discord.js").ChatInputCommandInteraction} interaction
*/
2024-02-09 23:26:57 +05:00
async execute(client, interaction) {
const { member: memberData, user: userData } = interaction.data,
2024-06-09 12:10:54 +05:00
cooldown = memberData.cooldowns?.work,
now = Date.now();
2024-06-09 12:10:54 +05:00
if (now < cooldown) return interaction.error("economy/work:COOLDOWN", { time: `<t:${Math.floor(cooldown / 1000)}:R>` });
if (Math.abs(cooldown - now) > 30 * 60 * 60 * 1000) memberData.workStreak = 0;
2024-06-09 12:10:54 +05:00
memberData.cooldowns.work = now + 24 * 60 * 60 * 1000;
2024-02-09 23:26:57 +05:00
memberData.workStreak = (memberData.workStreak || 0) + 1;
const embed = client.embed({
footer: {
2022-08-09 23:48:33 +05:00
text: interaction.translate("economy/work:AWARD"),
iconURL: interaction.member.displayAvatarURL(),
},
});
2022-08-09 23:48:33 +05:00
2023-07-05 00:58:06 +05:00
const award = [client.customEmojis.letters.a, client.customEmojis.letters.w, client.customEmojis.letters.a, client.customEmojis.letters.r, client.customEmojis.letters.d];
2022-08-09 23:48:33 +05:00
let won = 200;
2024-02-09 23:26:57 +05:00
if (memberData.workStreak >= 5) {
2022-08-09 23:48:33 +05:00
won += 200;
2024-02-12 17:03:14 +05:00
embed.data.fields = [
2022-08-09 23:48:33 +05:00
{
name: interaction.translate("economy/work:SALARY"),
value: interaction.translate("economy/work:SALARY_CONTENT", {
won: `**${won}** ${client.functions.getNoun(won, interaction.translate("misc:NOUNS:CREDIT:1"), interaction.translate("misc:NOUNS:CREDIT:2"), interaction.translate("misc:NOUNS:CREDIT:5"))}`,
}),
2022-08-09 23:48:33 +05:00
},
{
name: interaction.translate("economy/work:STREAK"),
value: interaction.translate("economy/work:STREAK_CONTENT"),
},
];
2024-02-09 23:26:57 +05:00
memberData.workStreak = 0;
2022-08-09 23:48:33 +05:00
} else {
for (let i = 0; i < award.length; i++) {
2024-02-09 23:26:57 +05:00
if (memberData.workStreak > i) {
2022-08-09 23:48:33 +05:00
const letter = parseEmoji(award[i]).name.split("_")[1];
award[i] = `:regional_indicator_${letter.toLowerCase()}:`;
}
}
2024-02-12 17:03:14 +05:00
embed.data.fields = [
2022-08-09 23:48:33 +05:00
{
name: interaction.translate("economy/work:SALARY"),
value: interaction.translate("economy/work:SALARY_CONTENT", {
won: `**${won}** ${client.functions.getNoun(won, interaction.translate("misc:NOUNS:CREDIT:1"), interaction.translate("misc:NOUNS:CREDIT:2"), interaction.translate("misc:NOUNS:CREDIT:5"))}`,
}),
2022-08-09 23:48:33 +05:00
},
{
name: interaction.translate("economy/work:STREAK"),
value: award.join(""),
},
];
2022-08-09 23:48:33 +05:00
}
2024-02-09 23:26:57 +05:00
memberData.money += won;
2022-08-09 23:48:33 +05:00
const info = {
user: interaction.translate("economy/work:SALARY"),
amount: won,
date: Date.now(),
type: "got",
2022-08-09 23:48:33 +05:00
};
2024-02-09 23:26:57 +05:00
memberData.transactions.push(info);
2022-08-09 23:48:33 +05:00
const messageOptions = {
embeds: [embed],
2022-08-09 23:48:33 +05:00
};
2023-07-05 00:58:06 +05:00
2024-02-09 23:26:57 +05:00
if (!userData.achievements.work.achieved) {
userData.achievements.work.progress.now += 1;
if (userData.achievements.work.progress.now === userData.achievements.work.progress.total) {
2023-07-05 00:58:06 +05:00
messageOptions.files = [
{
name: "unlocked.png",
attachment: "./assets/img/achievements/achievement_unlocked1.png",
},
];
2024-02-09 23:26:57 +05:00
userData.achievements.work.achieved = true;
2022-08-09 23:48:33 +05:00
}
2024-05-29 19:08:26 +05:00
userData.markModified("achievements");
2024-02-09 23:26:57 +05:00
await userData.save();
2022-08-09 23:48:33 +05:00
}
2024-05-29 19:08:26 +05:00
memberData.markModified("cooldowns");
2024-05-24 23:02:12 +05:00
await memberData.save();
2022-08-09 23:48:33 +05:00
interaction.reply(messageOptions);
}
}
2023-07-05 00:58:06 +05:00
module.exports = Work;