diff --git a/src/commands/credits/addons/gift.js b/src/commands/credits/addons/gift.js index a258289..251655c 100644 --- a/src/commands/credits/addons/gift.js +++ b/src/commands/credits/addons/gift.js @@ -1,9 +1,11 @@ -const db = require('quick.db'); +const credits = require('../../../helpers/database/models/creditSchema'); +const debug = require('../../../handlers/debug'); +const saveUser = require('../../../helpers/saveUser'); -const credits = new db.table('credits'); module.exports = async (interaction) => { const user = await interaction.options.getUser('user'); const amount = await interaction.options.getInteger('amount'); + const data = await credits.findOne({ userId: interaction.user.id }); if (user.id === interaction.user.id) { const embed = { @@ -24,30 +26,32 @@ module.exports = async (interaction) => { }; return await interaction.editReply({ embeds: [embed], ephemeral: true }); } else { - if ((await credits.get(interaction.user.id)) < amount) { + if (data.balance < amount) { const embed = { title: 'Gift', - description: `You have insufficient credits. Your balance is ${credits.get( - interaction.user.id - )}`, + description: `You have insufficient credits. Your balance is ${data.balance}`, color: 0xbb2124, timestamp: new Date(), footer: { iconURL: process.env.FOOTER_ICON, text: process.env.FOOTER_TEXT }, }; return await interaction.editReply({ embeds: [embed], ephemeral: true }); } else { - await credits.subtract(interaction.user.id, amount); - await credits.add(user.id, amount); + const fromUser = await credits.findOne({ userId: interaction.user.id }); + const toUser = await credits.findOne({ userId: user.id }); + + fromUser.balance -= amount; + toUser.balance += amount; const embed = { title: 'Gift', description: `You sent ${ amount <= 1 ? `${amount} credit` : `${amount} credits` - } to ${user}. Your new balance is ${await credits.get(interaction.user.id)}.`, + } to ${user}. Your new balance is ${fromUser.balance}.`, color: 0x22bb33, timestamp: new Date(), footer: { iconURL: process.env.FOOTER_ICON, text: process.env.FOOTER_TEXT }, }; + return await interaction.editReply({ embeds: [embed], ephemeral: true }); } } diff --git a/src/commands/credits/addons/give.js b/src/commands/credits/addons/give.js index 209cf06..41ed8da 100644 --- a/src/commands/credits/addons/give.js +++ b/src/commands/credits/addons/give.js @@ -25,7 +25,11 @@ module.exports = async (interaction) => { return await interaction.editReply({ embeds: [embed], ephemeral: true }); } else { await credits - .findOneAndUpdate({ userId: user.id }, { $inc: { balance: amount } }, { new: true }) + .findOneAndUpdate( + { userId: user.id }, + { $inc: { balance: amount } }, + { new: true, upsert: true } + ) .then(async () => { const embed = { title: 'Give', diff --git a/src/helpers/saveUser.js b/src/helpers/saveUser.js new file mode 100644 index 0000000..e29b8b1 --- /dev/null +++ b/src/helpers/saveUser.js @@ -0,0 +1,29 @@ +const sleep = require('./sleep'); +module.exports = async function saveUser(data, data2) { + process.nextTick( + async () => { + await sleep(Math.floor(Math.random() * 10 + 1) * 100); // 100 - 1000 random Number generator + data.save((_) => + _ + ? console.log( + `ERROR Occured while saving data (saveUser) \n${'='.repeat(50)}\n${ + _ + '\n' + '='.repeat(50) + }` + ) + : 'No Error' + ); + if (data2) + data2.save((_) => + _ + ? console.error( + `ERROR Occured while saving data (saveUser) \n${'='.repeat(50)}\n${ + _ + '\n' + '='.repeat(50) + }` + ) + : 'No Error' + ); + }, + data, + data2 + ); +}; diff --git a/src/helpers/sleep.js b/src/helpers/sleep.js new file mode 100644 index 0000000..f91ffc5 --- /dev/null +++ b/src/helpers/sleep.js @@ -0,0 +1,5 @@ +module.exports = function sleep(milliseconds) { + return new Promise((resolve) => { + setTimeout(resolve, milliseconds); + }); +}; diff --git a/src/index.js b/src/index.js index 4a047ff..0d1be35 100644 --- a/src/index.js +++ b/src/index.js @@ -46,7 +46,11 @@ client.on('messageCreate', async (message) => { if (message.author.bot) return; credits - .findOneAndUpdate({ userId: message.author.id }, { $inc: { balance: 1 } }, { new: true }) + .findOneAndUpdate( + { userId: message.author.id }, + { $inc: { balance: 1 } }, + { new: true, upsert: true } + ) .then(async (data) => console.log(data)) .catch(async (err) => { console.log(err);