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); } };