xyter/src/commands/credits/addons/work.js
2022-03-12 23:17:55 +01:00

65 lines
2.4 KiB
JavaScript

const config = require('../../../../config.json');
const logger = require('../../../handlers/logger');
const guilds = require('../../../helpers/database/models/guildSchema');
const credits = require('../../../helpers/database/models/creditSchema');
const creditNoun = require('../../../helpers/creditNoun');
const workedRecently = new Set();
// eslint-disable-next-line consistent-return
module.exports = async (interaction) => {
try {
const guild = await guilds.findOne({ guildId: interaction.member.guild.id });
if (!workedRecently.has(interaction.member.id)) {
const creditsEarned = Math.floor(Math.random() * guild.credits.workRate);
await credits
.findOneAndUpdate(
{ userId: interaction.member.id, guildId: interaction.member.guild.id },
{ $inc: { balance: creditsEarned } },
{ new: true, upsert: true },
)
.then(async () => {
logger.debug(`Credits added to user: ${interaction.member.id}`);
const embed = {
title: 'Work',
description: `You earned ${creditNoun(creditsEarned)}`,
color: config.colors.success,
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
return interaction.editReply({ embeds: [embed], ephemeral: true });
})
.catch(async (err) => {
await logger.error(err);
});
workedRecently.add(interaction.member.id);
setTimeout(() => {
logger.debug(
`User: ${interaction.member.id} has not worked within last ${
guild.credits.workTimeout / 1000
} seconds, work can be runned`,
);
workedRecently.delete(interaction.member.id);
}, guild.credits.timeout);
} else {
logger.debug(
`User: ${interaction.member.id} has already worked within last ${
guild.credits.workTimeout / 1000
} seconds, no work is runned`,
);
const embed = {
title: 'Work',
description: `You can not work now, wait ${guild.credits.workTimeout / 1000} seconds until timeout is out.`,
color: config.colors.error,
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
return interaction.editReply({ embeds: [embed], ephemeral: true });
}
} catch (e) {
await logger.error(e);
}
};