67 lines
2.5 KiB
JavaScript
67 lines
2.5 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);
|
|
}
|
|
};
|