🗃️ /credits gift is now on mongodb

This commit is contained in:
Axel Olausson Holtenäs 2022-02-27 22:30:08 +01:00
parent d492f0d506
commit 73f9f91a8b
No known key found for this signature in database
GPG key ID: E3AE7E194AE017ED
5 changed files with 57 additions and 11 deletions

View file

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

View file

@ -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',

29
src/helpers/saveUser.js Normal file
View file

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

5
src/helpers/sleep.js Normal file
View file

@ -0,0 +1,5 @@
module.exports = function sleep(milliseconds) {
return new Promise((resolve) => {
setTimeout(resolve, milliseconds);
});
};

View file

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