diff --git a/package.json b/package.json index 292f19e..9a0a02d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xyter", - "version": "3.0.0", + "version": "3.1.0", "description": "Earn credits while chatting! And more", "main": "src/index.js", "scripts": { diff --git a/src/events/guildCreate.js b/src/events/guildCreate.js index 5ba143a..b18c2df 100644 --- a/src/events/guildCreate.js +++ b/src/events/guildCreate.js @@ -1,20 +1,12 @@ -const logger = require('../handlers/logger'); - const guilds = require('../helpers/database/models/guildSchema'); module.exports = { name: 'guildCreate', async execute(guild) { - const guildExist = await guilds - .findOne({ guildId: guild.id }) - .then(logger.debug(`Found guild: ${guild.id}`)) - .catch(logger.error); - - if (!guildExist) { - await guilds - .create({ guildId: guild.id }) - .then(() => logger.debug(`Create guild: ${guild.id} was success`)) - .catch((e) => logger.error(e)); - } + await guilds + .findOne( + { guildId: guild.id }, + { new: true, upsert: true }, + ); }, }; diff --git a/src/events/interactionCreate.js b/src/events/interactionCreate.js index b8bcbaa..c620db6 100644 --- a/src/events/interactionCreate.js +++ b/src/events/interactionCreate.js @@ -1,29 +1,30 @@ const config = require('../../config.json'); const logger = require('../handlers/logger'); -const guilds = require('../helpers/database/models/guildSchema'); +const { guilds } = require('../helpers/database/models'); module.exports = { name: 'interactionCreate', async execute(interaction) { + const { member, client } = interaction; + if (interaction.isCommand()) { - const command = interaction.client.commands.get(interaction.commandName); + const command = client.commands.get(interaction.commandName); if (!command) return; - const guildExist = await guilds.findOne({ guildId: interaction.member.guild.id }); - - if (!guildExist) { - await guilds.create({ guildId: interaction.member.guild.id }); - } + await guilds.findOne( + { guildId: member.guild.id }, + { new: true, upsert: true }, + ); try { await interaction.deferReply({ embeds: [ { author: { - name: interaction.client.user.username, - icon_url: interaction.client.user.displayAvatarURL(), + name: client.user.username, + icon_url: client.user.displayAvatarURL(), url: 'https://bot.zyner.org/', }, title: 'Check', @@ -42,8 +43,8 @@ module.exports = { embeds: [ { author: { - name: interaction.client.user.username, - icon_url: interaction.client.user.displayAvatarURL(), + name: client.user.username, + icon_url: client.user.displayAvatarURL(), url: 'https://bot.zyner.org/', }, title: 'Error', @@ -55,34 +56,36 @@ module.exports = { ephemeral: true, }); } - } else if (interaction.isButton()) { - const button = interaction.client.buttons.get(interaction.customId); - - try { - if (!button) { - await interaction.deferReply(); - await interaction.editReply({ content: `Button not exist: ${interaction.customId}` }); - } - - await button.execute(interaction); - await logger.debug(`Button pressed: ${interaction.customId}`); - } catch (err) { - await logger.error(err); - } - } else if (interaction.isSelectMenu()) { - const menu = interaction.client.menus.get(interaction.customId); - - try { - if (!menu) { - await interaction.deferReply(); - await interaction.editReply({ content: `Menu not exist: ${interaction.customId}` }); - } - - await menu.execute(interaction); - await logger.debug(`Menu pressed: ${interaction.customId}`); - } catch (err) { - await logger.error(err); - } } + + // else if (interaction.isButton()) { + // const button = client.buttons.get(interaction.customId); + + // try { + // if (!button) { + // await interaction.deferReply(); + // await interaction.editReply({ content: `Button not exist: ${interaction.customId}` }); + // } + + // await button.execute(interaction); + // await logger.debug(`Button pressed: ${interaction.customId}`); + // } catch (err) { + // await logger.error(err); + // } + // } else if (interaction.isSelectMenu()) { + // const menu = client.menus.get(interaction.customId); + + // try { + // if (!menu) { + // await interaction.deferReply(); + // await interaction.editReply({ content: `Menu not exist: ${interaction.customId}` }); + // } + + // await menu.execute(interaction); + // await logger.debug(`Menu pressed: ${interaction.customId}`); + // } catch (err) { + // await logger.error(err); + // } + // } }, }; diff --git a/src/events/messageCreate.js b/src/events/messageCreate.js index 10dbbbd..52c044e 100644 --- a/src/events/messageCreate.js +++ b/src/events/messageCreate.js @@ -1,27 +1,35 @@ -const config = require('../../config.json'); const logger = require('../handlers/logger'); -const users = require('../helpers/database/models/userSchema'); -const guilds = require('../helpers/database/models/guildSchema'); -const experiences = require('../helpers/database/models/experienceSchema'); -const credits = require('../helpers/database/models/creditSchema'); -const timeouts = require('../helpers/database/models/timeoutSchema'); - -const talkedRecently = new Set(); +const { + users, guilds, experiences, credits, timeouts, +} = require('../helpers/database/models'); module.exports = { name: 'messageCreate', async execute(message) { + // Get guild object + const guild = await guilds.findOne({ guildId: message.guild.id }); + // Stop if message author is bot + if (message.author.bot) return; - const userExist = await users.findOne({ userId: message.author.id }); + // Create user if not already created - if (!userExist) { await users.create({ userId: message.author.id }); } + await users.findOne( + { userId: message.author.id }, + { new: true, upsert: true }, + ); + + // Stop if message content is shorter than guild configured minimum length if (message.content.length < guild.credits.minimumLength) return; - if (config.credits.excludedChannels.includes(message.channel.id)) return; + + // Needs to be updated for multi-guild to function properly + // if (config.credits.excludedChannels.includes(message.channel.id)) return; + + // Check if user has a timeout const isTimeout = await timeouts.findOne( { @@ -31,30 +39,37 @@ module.exports = { }, ); + // If user is not on timeout + if (!isTimeout) { + // Add credits to user + await credits .findOneAndUpdate( { userId: message.author.id, guildId: message.guild.id }, { $inc: { balance: guild.credits.rate } }, { new: true, upsert: true }, ) - .then(async () => logger.debug(`Credits added to user: ${message.author.id}`)) + .then(async () => logger.debug(`Guild: ${message.guild.id} Credits added to user: ${message.author.id}`)) .catch(async (err) => { await logger.error(err); }); - // Experience System + // Add points to user + await experiences .findOneAndUpdate( { userId: message.author.id, guildId: message.guild.id }, { $inc: { points: guild.points.rate } }, { new: true, upsert: true }, ) - .then(async () => logger.debug(`Credits added to user: ${message.author.id}`)) + .then(async () => logger.debug(`Guild: ${message.guild.id} Points added to user: ${message.author.id}`)) .catch(async (err) => { await logger.error(err); }); + // Create a timeout for the user + await timeouts.create( { guildId: message.guild.id, @@ -63,23 +78,24 @@ module.exports = { }, ); - // talkedRecently.add(message.author.id); setTimeout(async () => { await logger.debug( - `User: ${message.author.id} has not talked within last ${ + `Guild: ${message.guild.id} User: ${message.author.id} has not talked within last ${ guild.credits.timeout / 1000 } seconds, credits can be given`, ); + + // When timeout is out, remove it from the database + await timeouts.deleteOne({ guildId: message.guild.id, userId: message.author.id, timeoutId: 1, }); - // talkedRecently.delete(message.author.id); }, guild.credits.timeout); } else { await logger.debug( - `User: ${message.author.id} has talked within last ${ + `Guild: ${message.guild.id} User: ${message.author.id} has talked within last ${ guild.credits.timeout / 1000 } seconds, no credits given`, );