add command pay

This commit is contained in:
arthur
2024-06-25 22:38:37 +02:00
parent 80ba173e8c
commit 2ec952a32c
4 changed files with 487 additions and 2 deletions
+1 -1
View File
@@ -74,7 +74,7 @@ module.exports = addCommand(
const welcomeEmbed = new EmbedBuilder()
.setTitle("📚・Accueil")
.setDescription(
`Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez \`${prefix}help <commande>\``,
`Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez ${prefix}help <commande>\n\n> **🎙️ Récompenses vocales :**\n> Vous gagnez \`100\` coins toutes les \`15\`minutes lorsque vous êtes en vocal (**NON MUTE** sinon c'est \`50\`coins).\n \n> **📺 Récompenses de streaming :**\n> Activer un stream vous fera gagner \`200\`.\n \n> **📷 Récompenses de caméra :**\n> Activer votre caméra vous fera gagner \`200\`.\n\n> Le coins est une monnaie fictive.`,
)
.setColor("#0099FF")
.setTimestamp()
+172
View File
@@ -0,0 +1,172 @@
const addCommand = require("../../fonctions/addCommand");
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
const db = require("../../fonctions/setDatabase");
const createAccount = require("../../fonctions/createAccount");
const getEmbedColor = require("../../fonctions/getEmbedColor");
module.exports = addCommand(
(this.name = "deposit"),
(this.description = "Dépose vos coins dans votre compte en banque."),
(this.aliases = ["dep", "depot"]),
(this.permissions = []),
(this.botOwnerOnly = false),
(this.dm = false),
(this.executePrefix = async (client, message, args) => {
let user = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[message.guild.id, message.author.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!user) {
user = await createAccount(message.guild.id, message.author.id);
}
const embedColor = await getEmbedColor(message.guild.id, message.author.id);
function createErrorEmbed(message, description) {
return new EmbedBuilder()
.setTitle("Erreur")
.setDescription(description)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
}
function isValidAmount(amount, userPocket) {
if (isNaN(amount) || amount <= 0) {
return "Le montant doit être un nombre supérieur à 0.";
} else if (amount > userPocket) {
return "Vous n'avez pas assez de coins.";
}
return null;
}
let amount = args.join("").toLowerCase();
const suffixMultiplier = { k: 1000, m: 1000000, b: 1000000000 };
const suffix = amount.slice(-1);
if (amount === "all") {
amount = user.pocket;
} else {
let multiplier = 1;
if (suffix in suffixMultiplier) {
multiplier = suffixMultiplier[suffix];
amount = amount.slice(0, -1);
}
const errorMessage = isValidAmount(amount, user.pocket);
amount = parseFloat(amount) * multiplier;
if (errorMessage) {
const embed = createErrorEmbed(message, errorMessage);
return message.reply({ embeds: [embed] });
}
}
db.run(
`UPDATE users SET pocket = pocket - ?, bank = bank + ? WHERE guildId = ? AND userId = ?`,
[amount, amount, message.guild.id, message.author.id],
(err) => {
if (err) {
console.error(err.message);
return;
}
const embed = new EmbedBuilder()
.setTitle("Dépôt")
.setDescription(`Vous avez déposé ${amount} coins dans votre compte en banque.`)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
message.reply({ embeds: [embed] });
}
);
}),
(this.executeSlash = async (client, interaction) => {
const user = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[interaction.guild.id, interaction.user.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!user) {
user = await createAccount(interaction.guild.id, interaction.user.id);
}
const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id);
function createErrorEmbed(description) {
return new EmbedBuilder()
.setTitle("Erreur")
.setDescription(description)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
}
function isValidAmount(amount, userPocket) {
if (isNaN(amount) || amount <= 0) {
return "Le montant doit être un nombre supérieur à 0.";
} else if (amount > userPocket) {
return "Vous n'avez pas assez de coins.";
}
return null;
}
const amount = interaction.options.getInteger("montant");
const errorMessage = isValidAmount(amount, user.pocket);
if (errorMessage) {
const embed = createErrorEmbed(errorMessage);
return interaction.reply({ embeds: [embed] });
}
db.run(
`UPDATE users SET pocket = pocket - ?, bank = bank + ? WHERE guildId = ? AND userId = ?`,
[amount, amount, interaction.guild.id, interaction.user.id],
(err) => {
if (err) {
console.error(err.message);
return;
}
const embed = new EmbedBuilder()
.setTitle("Dépôt")
.setDescription(`Vous avez déposé ${amount} coins dans votre compte en banque.`)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
interaction.reply({ embeds: [embed] });
}
);
}),
(this.slashOptions = new SlashCommandBuilder()
.addIntegerOption((option) =>
option
.setName("montant")
.setDescription("Le montant à déposer.")
.setRequired(true)
)),
);
+29 -1
View File
@@ -29,6 +29,20 @@ module.exports = addCommand(
const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member;
const embedColor = await getEmbedColor(message.guild.id, message.author.id);
if (member.user.bot) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription("Vous ne pouvez pas afficher les informations d'un bot.")
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
return message.reply({ embeds: [embed] });
}
let user = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
@@ -74,6 +88,20 @@ module.exports = addCommand(
const member = interaction.options.getMember("membre") || interaction.member;
const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id);
if (member.user.bot) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription("Vous ne pouvez pas afficher les informations d'un bot.")
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
return interaction.reply({ embeds: [embed] });
}
let user = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
@@ -119,6 +147,6 @@ module.exports = addCommand(
.addUserOption((option) => option
.setName("membre")
.setDescription("Membre à afficher.")
.setRequired(false),
.setRequired(false)
)),
);
+285
View File
@@ -0,0 +1,285 @@
const addCommand = require("../../fonctions/addCommand");
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
const db = require("../../fonctions/setDatabase");
const createAccount = require("../../fonctions/createAccount");
const getEmbedColor = require("../../fonctions/getEmbedColor");
const getPrefix = require("../../fonctions/getPrefix");
module.exports = addCommand(
(this.name = "pay"),
(this.description = "Paye un membre de votre serveur."),
(this.aliases = []),
(this.permissions = []),
(this.botOwnerOnly = false),
(this.dm = false),
(this.executePrefix = async (client, message, args) => {
const prefix = await getPrefix(message.guild.id);
const embedColor = await getEmbedColor(message.guild.id, message.author.id);
const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member;
if (user.user.bot) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription("Vous ne pouvez pas payer un bot.")
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
return message.reply({ embeds: [embed] });
}
if (!args[0]) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription(`Vous devez mentionner un membre à payer. Exemple: \`${prefix}pay @membre 100\`.`)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
return message.reply({ embeds: [embed] });
} else if (!args[1]) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription(`Vous devez spécifier un montant à payer. Exemple: \`${prefix}pay @membre 100\``)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
return message.reply({ embeds: [embed] });
}
let author = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[message.guild.id, message.author.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!author) {
author = await createAccount(message.guild.id, message.author.id);
}
let userData = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[message.guild.id, user.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!userData) {
userData = await createAccount(message.guild.id, user.id);
}
function createErrorEmbed(message, description) {
return new EmbedBuilder()
.setTitle("Erreur")
.setDescription(description)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
}
function isValidAmount(amount, userPocket) {
if (isNaN(amount) || amount <= 0) {
return `Le montant doit être un nombre supérieur à 0. Exemple: \`${prefix}pay @membre 100\``;
} else if (amount > userPocket) {
return "Vous n'avez pas assez de coins.";
}
return null;
}
let amount = args.slice(1).join("").toLowerCase();
const suffixMultiplier = { k: 1000, m: 1000000, b: 1000000000 };
const suffix = amount.slice(-1);
if (amount === "all") {
amount = author.pocket;
} else {
let multiplier = 1;
if (suffix in suffixMultiplier) {
multiplier = suffixMultiplier[suffix];
amount = amount.slice(0, -1);
}
const errorMessage = isValidAmount(amount, author.pocket);
amount = parseFloat(amount) * multiplier;
if (errorMessage) {
const embed = createErrorEmbed(message, errorMessage);
return message.reply({ embeds: [embed] });
}
}
db.run(
`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`,
[amount, message.guild.id, message.author.id],
(err) => {
if (err) {
return console.error(err);
}
db.run(
`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`,
[amount, message.guild.id, user.id],
(err) => {
if (err) {
return console.error(err);
}
const embed = new EmbedBuilder()
.setTitle("Paiement effectué")
.setDescription(`Vous avez payé ${user} ${amount} coins.`)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${message.author.tag}`,
iconURL: message.author.displayAvatarURL(),
});
message.reply({ embeds: [embed] });
}
);
}
);
}),
(this.executeSlash = async (client, interaction) => {
const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id);
const user = interaction.options.getUser("membre");
if (user.bot) {
const embed = new EmbedBuilder()
.setTitle("Erreur")
.setDescription("Vous ne pouvez pas payer un bot.")
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
return interaction.reply({ embeds: [embed] });
}
const amount = interaction.options.getInteger("montant");
let author = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[interaction.guild.id, interaction.user.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!author) {
author = await createAccount(interaction.guild.id, interaction.user.id);
}
let userData = await new Promise((resolve, reject) => {
db.get(
`SELECT * FROM users WHERE guildId = ? AND userId = ?`,
[interaction.guild.id, user.id],
(err, row) => {
if (err) {
reject(err);
}
resolve(row);
}
);
});
if (!userData) {
userData = await createAccount(interaction.guild.id, user.id);
}
function createErrorEmbed(message, description) {
return new EmbedBuilder()
.setTitle("Erreur")
.setDescription(description)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
}
function isValidAmount(amount, userPocket) {
if (isNaN(amount) || amount <= 0) {
return "Le montant doit être un nombre supérieur à 0.";
} else if (amount > userPocket) {
return "Vous n'avez pas assez de coins.";
}
return null;
}
const errorMessage = isValidAmount(amount, author.pocket);
if (errorMessage) {
const embed = createErrorEmbed(interaction, errorMessage);
return interaction.reply({ embeds: [embed] });
}
db.run(
`UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`,
[amount, interaction.guild.id, interaction.user.id],
(err) => {
if (err) {
return console.error(err);
}
db.run(
`UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`,
[amount, interaction.guild.id, user.id],
(err) => {
if (err) {
return console.error(err);
}
const embed = new EmbedBuilder()
.setTitle("Paiement effectué")
.setDescription(`Vous avez payé ${user} ${amount} coins.`)
.setColor(embedColor)
.setTimestamp()
.setFooter({
text: `Demandé par ${interaction.user.tag}`,
iconURL: interaction.user.displayAvatarURL(),
});
interaction.reply({ embeds: [embed] });
}
);
}
);
}),
(this.slashOptions = new SlashCommandBuilder()
.addUserOption((option) =>
option
.setName("membre")
.setDescription("Membre à payer.")
.setRequired(true)
)
.addIntegerOption((option) =>
option
.setName("montant")
.setDescription("Le montant à payer.")
.setRequired(true)
.setMinValue(0)
)
)
);