✨ Multi Guilded Credits!
This commit is contained in:
parent
f138ceaa22
commit
1613191472
7 changed files with 137 additions and 8 deletions
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -46,5 +46,5 @@
|
|||
"titleBar.inactiveBackground": "#33669999",
|
||||
"titleBar.inactiveForeground": "#e7e7e799"
|
||||
},
|
||||
"cSpell.words": ["discordjs", "pino", "upsert", "uuidv"]
|
||||
"cSpell.words": ["Controlpanel", "discordjs", "pino", "upsert", "uuidv"]
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
36
src/commands/credits/addons/settings.js
Normal file
36
src/commands/credits/addons/settings.js
Normal 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();
|
||||
}
|
||||
};
|
|
@ -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;
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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: [
|
||||
|
|
|
@ -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`,
|
||||
);
|
||||
}
|
||||
|
|
33
src/helpers/database/models/guildSchema.js
Normal file
33
src/helpers/database/models/guildSchema.js
Normal 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);
|
Loading…
Add table
Reference in a new issue