trop de truc pour tout ecrire

This commit is contained in:
VALOU3336
2024-02-29 18:57:43 +01:00
parent b1768e24bd
commit af836f4c1e
43 changed files with 2902 additions and 119 deletions
+78
View File
@@ -0,0 +1,78 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'autoreact',
description: 'Ajoute des réactions automatiques à un salon',
usage: '+autoreact <channel ou id de salon> <emojie1> <emoite2> ...',
async execute(message, args) {
if (args[0] === "remove" || args[0] === "del" ){
const channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]);
if (!channel) {
return message.reply('Salon invalide.');
}
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!data[message.guild.id]) {
data[message.guild.id] = {};
}
if (!data[message.guild.id].autoreact) {
data[message.guild.id].autoreact = {};
}
delete data[message.guild.id].autoreact[channel.id]
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
message.reply(`Les réactions automatiques ont été supprimé pour le salon ${channel.name}.`);
});
}else {
if (args.length < 2) {
return message.reply('Veuillez fournir un salon et au moins une émojie.');
}
const channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]);
if (!channel) {
return message.reply('Salon invalide.');
}
const emojis = args.slice(1);
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!data[message.guild.id]) {
data[message.guild.id] = {};
}
if (!data[message.guild.id].autoreact) {
data[message.guild.id].autoreact = {};
}
data[message.guild.id].autoreact[channel.id] = emojis;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
message.reply(`Les réactions automatiques ont été ajoutées pour le salon ${channel.name}.`);
});
}
},
};
+30
View File
@@ -0,0 +1,30 @@
const { PermissionsBitField } = require('discord.js');
module.exports = {
name: 'clearwbh',
description: 'Supprime tous les webhooks du serveur',
emote: '🗑️',
utilisation: 'clearwbh',
category: 'moderation',
async execute(message, args, client) {
const botMember = message.guild.members.cache.get(client.user.id);
if (!botMember.permissions.has(PermissionsBitField.Flags.ManageWebhooks)) {
return message.reply('Le bot n\'a pas la permission de gérer les webhooks.');
}
const webhooks = await message.guild.fetchWebhooks();
const initialMessage = await message.reply('Début de la suppression des webhooks...');
for (const webhook of webhooks.values()) {
await webhook.delete('Suppression des webhooks par la commande +clearwbh')
.then(() => {
initialMessage.edit(`Webhook ${webhook.name} a été supprimé avec succès. ${webhooks.size - 1} webhooks restants à supprimer.`);
})
.catch(error => {
initialMessage.edit(`Une erreur s'est produite lors de la suppression du webhook ${webhook.name}. ${webhooks.size - 1} webhooks restants à supprimer.`);
});
}
initialMessage.edit('Tous les webhooks ont été supprimés du serveur.');
},
};
+162 -89
View File
@@ -1,4 +1,4 @@
const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder } = require('discord.js');
const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
module.exports = {
name: 'embed',
@@ -7,97 +7,170 @@ module.exports = {
emote: '📝',
utilisation: 'embed',
category: 'gestion',
async execute(message, args, client) {
const embed = new EmbedBuilder();
const menu = new StringSelectMenuBuilder()
.setCustomId('embed-options')
.setPlaceholder('Select an option')
var selectMenu = new StringSelectMenuBuilder()
.setCustomId("embedbuilder")
.setPlaceholder("Choisissez une option")
.addOptions([
{ label: '📝 Titre', value: 'title' },
{ label: '📖 Description', value: 'description' },
{ label: '🎨 Couleur', value: 'color' },
{ label: '🖼️ Image URL', value: 'image' },
{ label: '🖼️ Thumbnail URL', value: 'thumbnail' },
{ label: '👤 Autheur', value: 'author' },
{ label: '👣 Footer', value: 'footer' },
{ label: '🚀 Envoyer', value: 'send' },
{ label: '📝 Modifier le Titre', value: 'embedtitle' },
{ label: '💬 Modifier la Description', value: 'embeddescription'},
{ label: "🕵️‍♂️ Modifier l'Auteur", value: 'embedauthor'},
{ label: '🔻 Modifier le Footer', value: 'embedfooter'},
{ label: '🔳 Modifier le Thumbnail', value: 'embedthumbnail'},
{ label: '🕙 Modifier le Timestamp', value: 'embedtimestamp'},
{ label: "🖼 Modifier l'Image", value: 'embedimage'},
{ label: "🌐 Modifier l'URL", value: 'embedurl'},
{ label: '🔴 Modifier la Couleur', value: 'embedcolor'},
]);
var embedBuilderActionRow = new ActionRowBuilder()
.addComponents([selectMenu])
let embed = (new EmbedBuilder({ description: '\u200B' }))
const row = new ActionRowBuilder()
.addComponents(menu);
var actionRow = new ActionRowBuilder()
actionRow.addComponents([
new ButtonBuilder()
.setCustomId("embedsend")
.setLabel("Envoyer l'embed")
.setStyle(ButtonStyle.Success)
.setEmoji("✅")
])
const selectMenuMessage = await message.channel.send({ content: `Veuillez sélectionner une option pour l'embed:`, components: [row] });
client.on('interactionCreate', async (interaction) => {
if (!interaction.isSelectMenu()) return;
if (interaction.customId === 'embed-options') {
const selectedOption = interaction.values[0];
if (selectedOption === 'send') {
const channelMessage = await interaction.reply({ content: `Veuillez mentionner le salon où l'embed sera envoyé.`, fetchReply: true });
const channelFilter = m => m.author.id === interaction.user.id;
const channelCollector = interaction.channel.createMessageCollector({ filter: channelFilter, max: 1, time: 60000 }); // 1 minute to reply
channelCollector.on('collect', async (m) => {
let channel = m.mentions.channels.first();
if (!channel) {
const channelId = m.content;
channel = interaction.guild.channels.cache.get(channelId);
}
if (!channel) {
interaction.followUp({ content: 'Salon invalide.' });
return;
}
channel.send({ embeds: [embed] });
message.channel.send(`Embed correctement envoyé dans le channel <#${channel.id}>`)
});
} else {
const optionMessage = await interaction.reply({ content: `Veuillez entrer ${selectedOption} de l'embed:`, fetchReply: true });
const optionFilter = m => m.author.id === interaction.user.id;
const optionCollector = interaction.channel.createMessageCollector({ filter: optionFilter, max: 1 });
optionCollector.on('collect', async (m) => {
let optionValue = '';
if (m.content.toLowerCase() !== 'cancel') {
optionValue = m.content;
}
optionMessage.delete();
m.delete();
switch (selectedOption) {
case 'title':
embed.setTitle(optionValue);
break;
case 'description':
embed.setDescription(optionValue);
break;
case 'color':
embed.setColor(optionValue);
break;
case 'image':
embed.setImage(optionValue);
break;
case 'thumbnail':
embed.setThumbnail(optionValue);
break;
case 'author':
embed.setAuthor({ name: optionValue });
break;
case 'footer':
embed.setFooter({ name: optionValue });
break;
}
selectMenuMessage.edit({ embeds: [embed], components: [row] });
});
}
}
let msg = await message.channel.send({ embeds: [embed], components: [embedBuilderActionRow, actionRow]})
var collector = msg.createMessageComponentCollector({
filter: (interaction) => interaction.user.id === message.author.id,
time: 150000
});
},
};
collector.on("collect", async (i) => {
i.deferUpdate()
if(i.customId == "embedbuilder") {
if(i.values[0] == "embedtitle") {
let question = await message.channel.send({ content: "Veuillez saisir le titre de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setTitle(msgg.content)
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embeddescription") {
let question = await message.channel.send({ content: "Veuillez saisir la description de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setDescription(msgg.content)
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embedauthor") {
let question = await message.channel.send({ content: "Veuillez saisir l'auteur de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setAuthor({name: msgg.content})
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embedfooter") {
let question = await message.channel.send({ content: "Veuillez saisir le footer de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setFooter({text: msgg.content})
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embedthumbnail") {
var yx = await message.channel.send({ content: "Quel sera le **Thumnail** de l'embed ?" })
let collected = await message.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] })
.then(async (collected) => {
var a;
if (collected.first().attachments.size > 0) {
collected.first().attachments.forEach(async at => {
a = at.url
})
} else if (/^https?:\/\/.*\/.*\.(png|gif|webp|jpeg|jpg|svg)\??.*$/gmi.test(collected.first().content) === true) {
a = collected.first().content
} else {
a = false
}
collected.first().delete().catch(() => false)
yx.delete().catch(() => false)
if (a === false) {
return collected.message.channel.send({ content: "L'image voulue est Invalide." })
} else if (a !== false) {
embed.setThumbnail(a.toString());
}
msg.edit({ embeds: [embed] })
})
}
if(i.values[0] == "embedtimestamp") {
embed.setTimestamp(Date.now())
msg.edit({ embeds: [embed]})
}
if(i.values[0] == "embedimage") {
var yx = await message.channel.send({ content: "Quelle sera l'**Image** de l'embed ?" })
let collected = await message.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] })
.then(async (collected) => {
var a;
if (collected.first().attachments.size > 0) {
collected.first().attachments.forEach(async at => {
a = at.url
})
} else if (/^https?:\/\/.*\/.*\.(png|gif|webp|jpeg|jpg|svg)\??.*$/gmi.test(collected.first().content) === true) {
a = collected.first().content
} else {
a = false
}
collected.first().delete().catch(() => false)
yx.delete().catch(() => false)
if (a === false) {
return collected.message.channel.send({ content: "L'image voulue est Invalide." })
} else if (a !== false) {
embed.setImage(a.toString());
}
msg.edit({ embeds: [embed] })
})
}
if(i.customId == "embedurl") {
let question = await message.channel.send({ content: "Veuillez saisir l'URL de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setURL(msgg.content)
msg.edit({ embeds: [embed]})
})
}
if(i.customId == "embedcolor") {
let question = await message.channel.send({ content: "Veuillez saisir la couleur de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setColor(msgg.content)
msg.edit({ embeds: [embed]})
})
}
}
if (i.customId == "embedsend") {
let question = await message.channel.send({ content: "Dans quel channel voulez-vous envoyer l'embed?" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
let channel = message.guild.channels.cache.get(msgg.content) || msgg.mentions.channels.first()
channel.send({ embeds: [embed]})
})
}
})
}
}
+62
View File
@@ -0,0 +1,62 @@
const { GiveawaysManager } = require('discord-giveaways');
const ms = require('ms');
module.exports = {
name: 'giveaway',
utilisation: 'giveaway <durée> <prix> <nombre de gagnants>',
description: 'Crée un giveaway avec une durée, un prix et un nombre de gagnants spécifiés.',
emote: '🎉',
category: 'gestion',
async execute(message, args, client) {
if (args.length < 3) {
return message.channel.send('Veuillez fournir une durée, un prix et un nombre de gagnants.');
}
const duration = args[0];
const prize = args.slice(1, -1).join(' ');
const winnersCount = parseInt(args[args.length - 1]);
// Vérifie si la durée est valide
if (isNaN(ms(duration))) {
return message.channel.send('Veuillez fournir une durée valide.');
}
// Vérifie si le nombre de gagnants est valide
if (isNaN(winnersCount) || winnersCount < 1) {
return message.channel.send('Veuillez fournir un nombre valide de gagnants.');
}
// Crée le giveaway
const giveawayChannel = message.channel;
const giveawayDuration = ms(duration);
const giveawayWinners = winnersCount;
client.giveawaysManager.create(giveawayChannel, {
duration: giveawayDuration,
prize: prize,
winnerCount: giveawayWinners,
messages: {
giveaway: "🎉 **GIVEAWAY** 🎉",
giveawayEnded: "🎉 **GIVEAWAY TERMINÉ** 🎉",
timeRemaining: "Temps restant : **{duration}**!",
inviteToParticipate: "Réagissez avec 🎉 pour participer!",
winMessage: "Félicitations, {winners}! Vous avez gagné **{prize}**!",
embedFooter: "Giveaway",
noWinner: "Giveaway annulé, aucune participation valide.",
hostedBy: "Hébergé par: {user}",
winners: "gagnant(s)",
endedAt: "Se termine le",
units: {
seconds: "secondes",
minutes: "minutes",
hours: "heures",
days: "jours",
pluralS: false
}
}
}).then((gData) => {
console.log(gData); // Donne des informations sur le giveaway
});
message.channel.send(`Giveaway créé !`);
},
};
+287
View File
@@ -0,0 +1,287 @@
const { ActionRowBuilder, StringSelectMenuBuilder, EmbedBuilder, ChannelType } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'join',
description: 'Configure le système de join',
emote: '🔑',
category: 'gestion',
utilisation: 'leave [config/test]',
async execute(message, args, client) {
const guildId = message.guild.id;
const botId = message.client.user.id;
const subCommand = args[0];
if (subCommand === 'config') {
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data[guildId] = data[guildId] || {};
data[guildId].join = data[guildId].join || {};
const salonKey = 'salon';
const roleKey = 'role';
const messageKey = 'message';
const dmKey = 'dm';
// Création de l'embed
const embed = new EmbedBuilder()
.setTitle('Configuration du système de join')
.addFields(
{ name: '🔊 Salon', value: `<#${data[guildId].join[salonKey]}>` || '❌', inline: true },
{ name: '🎭 Rôle', value: `<@&${data[guildId].join[roleKey]}>` || '❌', inline: true },
{ name: '📝 Message', value: data[guildId].join[messageKey] || '❌', inline: true },
{ name: '📧 DM', value: data[guildId].join[dmKey] || '❌', inline: true }
)
.setColor('#0099ff');
// Création du select menu
const menu = new StringSelectMenuBuilder()
.setCustomId(`joinconfig_${guildId}`)
.setPlaceholder('Sélectionnez une option')
.addOptions([
{
label: '🎭 Role',
description: 'Configurer le rôle de join',
value: 'role',
},
{
label: '🔊 Salon',
description: 'Configurer le salon de join',
value: 'salon',
},
{
label: '📝 Message',
description: 'Configurer le message de join',
value: 'message',
},
{
label: '📧 DM',
description: 'Configurer les DM de join',
value: 'dm',
},
{
label: '🚫 Del dm',
description: 'Supprimer le message de dm',
value: 'nodm',
},
]);
const row = new ActionRowBuilder()
.addComponents(menu);
const sendmessage = await message.channel.send({ embeds: [embed], components: [row] });
const filter = i => i.customId.startsWith('joinconfig_') && i.user.id === message.author.id;
const filter2 = m => m.author.id === message.author.id;
const collector = message.channel.createMessageComponentCollector({ filter:filter, time: 240000 });
collector.on('collect', async i => {
const option = i.values[0];
if ( option === 'nodm') {
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (data[guildId] && data[guildId].join) {
data[guildId].join.dm = null;
}
db.run('UPDATE gestion SET value = ? WHERE id = ?', [JSON.stringify(data), botId], function(err) {
if (err) {
console.error(err.message);
}
});
let data2 = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
const updatedEmbed = new EmbedBuilder()
.setColor('#0099ff')
.setTitle('Configuration du système de join')
.addFields(
{ name: '🔊 Salon', value: data2[guildId].join[salonKey] || '❌', inline: true },
{ name: '🎭 Rôle', value: data2[guildId].join[roleKey] || '❌', inline: true },
{ name: '📝 Message', value: data2[guildId].join[messageKey] || '❌', inline: true },
{ name: '📧 DM', value: data2[guildId].join[dmKey] || '❌', inline: true }
)
.addFields();
sendmessage.edit({ embeds: [updatedEmbed], components: [row] });
}else {
await i.deferReply();
const guildId = i.customId.split('_')[1];
let promptMessage = '';
switch (option) {
case 'commande':
promptMessage = 'Veuillez spécifier la commande de join.';
break;
case 'role':
promptMessage = 'Veuillez spécifier le rôle de join.';
break;
case 'salon':
promptMessage = 'Veuillez spécifier le salon de join.';
break;
case 'message':
promptMessage = 'Veuillez spécifier le message de join.';
break;
case 'dm':
promptMessage = 'Veuillez spécifier les DM de join.';
break;
}
const question = await i.editReply(promptMessage);
const channelCollector = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 });
channelCollector.on('collect', async m => {
let value;
if (option === 'role') {
const match = m.content.match(/<@&(\d+)>/);
if (match) {
const id = match[1];
try {
const role = m.guild.roles.cache.get(id);
if (!role) {
console.log(`Role ID: ${id}`);
console.log(`Role cache: ${m.guild.roles.cache.map(r => r.id)}`);
return message.reply('Le rôle mentionné n\'est pas valide ou n\'existe pas dans ce serveur.');
}
value = id;
} catch(err) {}
} else {
return message.reply('Veuillez spécifier un rôle valide.');
}
} else if (option === 'salon') {
const match = m.content.match(/<#(\d+)>/);
if (match) {
const id = match[1];
const channel = m.guild.channels.cache.get(id);
if (!channel || channel.type !== ChannelType.GuildText) {
return message.reply('Le salon mentionné n\'est pas valide ou n\'est pas un salon de texte dans ce serveur.');
}
value = id;
} else {
return message.reply('Veuillez spécifier un salon valide.');
}
} else {
value = m.content;
}
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data[guildId] = data[guildId] || {};
data[guildId].join = data[guildId].join || {};
data[guildId].join[option] = value;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => {
if (err) {
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
});
let data2 = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
await m.delete();
await question.delete();
const updatedEmbed = new EmbedBuilder()
.setColor('#0099ff')
.setTitle('Configuration du système de join')
.addFields(
{ name: '🔊 Salon', value: `<#${data2[guildId].join[salonKey]}>` || '❌', inline: true },
{ name: '🎭 Rôle', value: `<@&${data2[guildId].join[roleKey]}>` || '❌', inline: true },
{ name: '📝 Message', value: data2[guildId].join[messageKey] || '❌', inline: true },
{ name: '📧 DM', value: data2[guildId].join[dmKey] || '❌', inline: true }
)
.addFields();
sendmessage.edit({ embeds: [updatedEmbed], components: [row] });
});
}
});
} else if (subCommand === "test") {
function replacePlaceholders(message, member) {
return message
.replace('{MemberMention}', member.toString())
.replace('{MemberName}', member.user.username)
.replace('{MemberDisplayName}', member.displayName)
.replace('{MemberJoinedAt}', member.joinedAt.toLocaleDateString())
.replace('{MemberID}', member.id)
.replace('{MemberPic}', member.user.displayAvatarURL({ dynamic: true }))
.replace('{MemberCreatedAt}', member.user.createdAt.toLocaleDateString())
.replace('{ServerMembersCount}', member.guild.memberCount)
.replace('{ServerName}', member.guild.name);
}
const userid = message.author.id;
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data = data[guildId]?.join || {};
try {
if (data.dm) {
const dmChannel = await message.author.createDM();
const formattedMessage = replacePlaceholders(data.dm, message.member);
await dmChannel.send(formattedMessage);
}
} catch (err) {
}
try {
if (data.salon && data.message) {
const channel = message.guild.channels.cache.get(data.salon);
if (channel && channel.type === ChannelType.GuildText) {
const formattedMessage = replacePlaceholders(data.message, message.member);
await channel.send(formattedMessage);
}
}
} catch (err) {
}
try {
if (data.role) {
const role = message.guild.roles.cache.get(data.role);
if (role) {
await message.member.roles.add(role);
console.log(`Le rôle ${role.name} a été attribué à ${message.member.user.tag}`);
}
}
} catch (err) {
}
return message.reply("Vous venez de tester le système de join");
}
},
};
+183
View File
@@ -0,0 +1,183 @@
const { ActionRowBuilder, StringSelectMenuBuilder, EmbedBuilder, ChannelType } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'leave',
description: 'Configure le système de leave',
emote: '🚪',
category: 'gestion',
utilisation: 'leave [config/test]',
async execute(message, args, client) {
const guildId = message.guild.id;
const botId = message.client.user.id;
const subCommand = args[0];
if (subCommand === 'config') {
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data[guildId] = data[guildId] || {};
data[guildId].leave = data[guildId].leave || {};
const salonKey = 'salon';
const messageKey = 'message';
// Création de l'embed
const embed = new EmbedBuilder()
.setTitle('Configuration du système de leave')
.addFields(
{ name: '🔊 Salon', value: `<#${data[guildId].leave[salonKey]}>` || '❌', inline: true },
{ name: '📝 Message', value: data[guildId].leave[messageKey] || '❌', inline: true },
)
.setColor('#0099ff');
// Création du select menu
const menu = new StringSelectMenuBuilder()
.setCustomId(`leaveconfig_${guildId}`)
.setPlaceholder('Sélectionnez une option')
.addOptions([
{
label: '🔊 Salon',
description: 'Configurer le salon de leave',
value: 'salon',
},
{
label: '📝 Message',
description: 'Configurer le message de leave',
value: 'message',
}
]);
const row = new ActionRowBuilder()
.addComponents(menu);
const sendmessage = await message.channel.send({ embeds: [embed], components: [row] });
const filter = i => i.customId.startsWith('leaveconfig_') && i.user.id === message.author.id;
const filter2 = m => m.author.id === message.author.id;
const collector = message.channel.createMessageComponentCollector({ filter:filter, time: 240000 });
collector.on('collect', async i => {
const option = i.values[0];
await i.deferReply();
const guildId = i.customId.split('_')[1];
let promptMessage = '';
switch (option) {
case 'salon':
promptMessage = 'Veuillez spécifier le salon de leave.';
break;
case 'message':
promptMessage = 'Veuillez spécifier le message de leave.';
break;k;
}
const question = await i.editReply(promptMessage);
const channelCollector = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 });
channelCollector.on('collect', async m => {
let value;
if (option === 'salon') {
const match = m.content.match(/<#(\d+)>/);
if (match) {
const id = match[1];
const channel = m.guild.channels.cache.get(id);
if (!channel || channel.type !== ChannelType.GuildText) {
return message.reply('Le salon mentionné n\'est pas valide ou n\'est pas un salon de texte dans ce serveur.');
}
value = id;
} else {
return message.reply('Veuillez spécifier un salon valide.');
}
} else {
value = m.content;
}
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data[guildId] = data[guildId] || {};
data[guildId].leave = data[guildId].leave || {};
data[guildId].leave[option] = value;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => {
if (err) {
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
});
let data2 = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
await m.delete();
await question.delete();
const updatedEmbed = new EmbedBuilder()
.setColor('#0099ff')
.setTitle('Configuration du système de leave')
.addFields(
{ name: '🔊 Salon', value: `<#${data2[guildId].leave[salonKey]}>` || '❌', inline: true },
{ name: '📝 Message', value: data2[guildId].leave[messageKey] || '❌', inline: true },
)
.addFields();
sendmessage.edit({ embeds: [updatedEmbed], components: [row] });
});
});
} else if (subCommand === "test") {
function replacePlaceholders(message, member) {
return message
.replace('{MemberMention}', member.toString())
.replace('{MemberName}', member.user.username)
.replace('{MemberDisplayName}', member.displayName)
.replace('{MemberJoinedAt}', member.joinedAt.toLocaleDateString())
.replace('{MemberID}', member.id)
.replace('{MemberPic}', member.user.displayAvatarURL({ dynamic: true }))
.replace('{MemberCreatedAt}', member.user.createdAt.toLocaleDateString())
.replace('{ServerMembersCount}', member.guild.memberCount)
.replace('{ServerName}', member.guild.name);
}
const userid = message.author.id;
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data = data[guildId]?.leave || {};
try {
if (data.salon && data.message) {
const channel = message.guild.channels.cache.get(data.salon);
if (channel && channel.type === ChannelType.GuildText) {
const formattedMessage = replacePlaceholders(data.message, message.member);
await channel.send(formattedMessage);
}
}
} catch (err) {
}
return message.reply("Vous venez de tester le système de leave");
}
},
};
+50
View File
@@ -0,0 +1,50 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: "piconly",
description: "Permet de mettre le piconly sur un salon",
emote: '📸',
utilisation: 'piconly [salon/id]',
category: 'gestion',
async execute(message, args, client) {
const channelID = message.mentions.channels.first()?.id || client.channels.cache.get(args[0])?.id;
if (!channelID) {
return message.reply("veuilez indiquer un salon valide")
}
const guildId = message.guild.id;
const botId = client.user.id;
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
data.piconly = data.piconly || {};
data.piconly[guildId] = data.piconly[guildId] || {};
const channeldbid = data.piconly[guildId];
if (channelID === channeldbid) {
delete data.piconly[guildId]
db.run('UPDATE gestion SET value = ? WHERE id = ?', [JSON.stringify(data), botId], function(err) {
if (err) {
console.error(err.message);
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
message.reply(`Le piconly a etait enléve du salon <#${channelID}>.`);
});
}else {
data.piconly = data.piconly || {};
data.piconly[guildId] = data.piconly[guildId] || {};
data.piconly[guildId] = channelID;
db.run('UPDATE gestion SET value = ? WHERE id = ?', [JSON.stringify(data), botId], function(err) {
if (err) {
console.error(err.message);
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
}
message.reply(`Le salon a été marqué pour le piconly est desormais dans la salon <#${channelID}>.`);
});
}
}
}