Multi Guilded Credits!

This commit is contained in:
Axel Olausson Holtenäs 2022-03-06 13:49:28 +01:00
parent f138ceaa22
commit 1613191472
No known key found for this signature in database
GPG key ID: E3AE7E194AE017ED
7 changed files with 137 additions and 8 deletions

View file

@ -46,5 +46,5 @@
"titleBar.inactiveBackground": "#33669999",
"titleBar.inactiveForeground": "#e7e7e799"
},
"cSpell.words": ["discordjs", "pino", "upsert", "uuidv"]
"cSpell.words": ["Controlpanel", "discordjs", "pino", "upsert", "uuidv"]
}

View file

@ -1,11 +1,13 @@
const { v4: uuidv4 } = require('uuid');
const axios = require('axios');
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 api = require('../../../handlers/api');
// const api = require('../../../handlers/api');
module.exports = async (interaction) => {
try {
@ -56,6 +58,13 @@ module.exports = async (interaction) => {
}
const code = uuidv4();
const guild = await guilds.findOne({ guildId: interaction.member.guild.id });
const api = axios.create({
baseURL: guild.credits.url,
headers: { Authorization: `Bearer ${guild.credits.token}` },
});
await api
.post('vouchers', {
uses: 1,

View file

@ -0,0 +1,36 @@
const config = require('../../../../config.json');
const logger = require('../../../handlers/logger');
const guilds = require('../../../helpers/database/models/guildSchema');
module.exports = async (interaction) => {
try {
const status = await interaction.options.getBoolean('status');
const url = await interaction.options.getString('url');
const token = await interaction.options.getString('token');
const rate = await interaction.options.getNumber('rate');
const minimumLength = await interaction.options.getNumber('minimum-length');
const guild = await guilds.findOne({ guildId: interaction.member.guild.id });
guild.credits.status = status !== null ? status : guild.credits.status;
guild.credits.url = url !== null ? url : guild.credits.url;
guild.credits.token = token !== null ? token : guild.credits.token;
guild.credits.rate = rate !== null ? rate : guild.credits.rate;
// eslint-disable-next-line max-len
guild.credits.minimumLength = minimumLength !== null ? minimumLength : guild.credits.minimumLength;
await guild.save();
const embed = {
title: 'Credits',
description: 'Following settings is set',
color: config.colors.success,
fields: [{ name: 'Status', value: `${guild.credits.status}`, inline: true }, { name: 'URL', value: `${guild.credits.url}`, inline: true }, { name: 'Token', value: `${guild.credits.token}` }, { name: 'Rate', value: `${guild.credits.rate}`, inline: true }, { name: 'Minimum Length', value: `${guild.credits.minimumLength}`, inline: true }],
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
return interaction.editReply({ embeds: [embed], ephemeral: true });
} catch {
logger.error();
}
};

View file

@ -1,6 +1,9 @@
const { SlashCommandBuilder } = require('@discordjs/builders');
const { Permissions } = require('discord.js');
const config = require('../../../config.json');
const guilds = require('../../helpers/database/models/guildSchema');
const balance = require('./addons/balance');
const gift = require('./addons/gift');
const give = require('./addons/give');
@ -9,6 +12,7 @@ const take = require('./addons/take');
const top = require('./addons/top');
const transfer = require('./addons/transfer');
const set = require('./addons/set');
const settings = require('./addons/settings');
module.exports = {
permissions: new Permissions([
@ -69,8 +73,43 @@ module.exports = {
.setName('user')
.setDescription('The user you want to set credits on.')
.setRequired(true))
.addIntegerOption((option) => option.setName('amount').setDescription('The amount you will set.').setRequired(true))),
.addIntegerOption((option) => option.setName('amount').setDescription('The amount you will set.').setRequired(true)))
.addSubcommand((subcommand) => subcommand
.setName('settings')
.setDescription('Manage credit settings. (ADMIN)')
.addBooleanOption((option) => option
.setName('status')
.setDescription('Toggle credits.'))
.addStringOption((option) => option
.setName('url')
.setDescription('Controlpanel.gg URL.'))
.addStringOption((option) => option
.setName('token')
.setDescription('Controlpanel.gg token.'))
.addNumberOption((option) => option
.setName('rate')
.setDescription('Credits rate.'))
.addNumberOption((option) => option
.setName('minimum-length')
.setDescription('Minimum length for credits.'))),
async execute(interaction) {
const guild = await guilds.findOne({ guildId: interaction.member.guild.id });
if (interaction.options.getSubcommand() === 'settings') {
await settings(interaction);
}
if (guild.credits.status === false && interaction.options.getSubcommand() !== 'settings') {
const embed = {
title: 'Credits',
description: 'Please enable credits by ``/credits settings``',
color: config.colors.error,
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
return interaction.editReply({ embeds: [embed], ephemeral: true });
}
if (interaction.options.getSubcommand() === 'balance') {
await balance(interaction);
} else if (interaction.options.getSubcommand() === 'gift') {
@ -88,5 +127,6 @@ module.exports = {
} else if (interaction.options.getSubcommand() === 'set') {
await set(interaction);
}
return true;
},
};

View file

@ -1,6 +1,8 @@
const config = require('../../config.json');
const logger = require('../handlers/logger');
const guilds = require('../helpers/database/models/guildSchema');
module.exports = {
name: 'interactionCreate',
async execute(interaction) {
@ -10,6 +12,12 @@ module.exports = {
if (!command) return;
const guildExist = await guilds.findOne({ guildId: interaction.member.guild.id });
if (!guildExist) { await guilds.create({ guildId: interaction.member.guild.id }); }
console.log(guildExist);
try {
await interaction.deferReply({
embeds: [

View file

@ -1,6 +1,7 @@
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 talkedRecently = new Set();
@ -8,14 +9,16 @@ const talkedRecently = new Set();
module.exports = {
name: 'messageCreate',
async execute(message) {
const guild = await guilds.findOne({ guildId: message.guild.id });
if (message.author.bot) return;
if (message.content.length < config.credits.minimumLength) return;
if (message.content.length < guild.credits.minimumLength) return;
if (config.credits.excludedChannels.includes(message.channel.id)) return;
if (!talkedRecently.has(message.author.id)) {
await credits
.findOneAndUpdate(
{ userId: message.author.id },
{ $inc: { balance: config.credits.rate } },
{ $inc: { balance: guild.credits.rate } },
{ new: true, upsert: true },
)
.then(async () => logger.debug(`Credits added to user: ${message.author.id}`))
@ -26,15 +29,15 @@ module.exports = {
setTimeout(() => {
logger.debug(
`User: ${message.author.id} has not talked within last ${
config.credits.timeout / 1000
guild.credits.timeout / 1000
} seconds, credits can be given`,
);
talkedRecently.delete(message.author.id);
}, config.credits.timeout);
}, guild.credits.timeout);
} else {
logger.debug(
`User: ${message.author.id} has talked within last ${
config.credits.timeout / 1000
guild.credits.timeout / 1000
} seconds, no credits given`,
);
}

View file

@ -0,0 +1,33 @@
const mongoose = require('mongoose');
const guildSchema = new mongoose.Schema(
{
guildId: {
type: mongoose.SchemaTypes.Decimal128,
required: true,
unique: true,
index: true,
},
credits: {
status: {
type: mongoose.SchemaTypes.Boolean,
default: false,
},
url: {
type: mongoose.SchemaTypes.String,
},
token: {
type: mongoose.SchemaTypes.String,
},
rate: {
type: mongoose.SchemaTypes.Number, default: 1,
},
minimumLength: {
type: mongoose.SchemaTypes.Number, default: 5,
},
},
},
{ timestamps: true },
);
module.exports = mongoose.model('guild', guildSchema);