mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-03 23:36:35 +02:00
153 lines
6.2 KiB
JavaScript
153 lines
6.2 KiB
JavaScript
const sqlite3 = require('sqlite3').verbose();
|
|
const db = new sqlite3.Database('myDatabase.db');
|
|
const {EmbedBuilder} = require("discord.js");
|
|
module.exports = {
|
|
name: 'prison',
|
|
description: "Configure le salon de prison pour le serveur.",
|
|
category: 'gestion',
|
|
emote: '🔒',
|
|
utilisation: 'prison [@user/remove/config] [#channel/@user]',
|
|
async execute(message, args) {
|
|
|
|
if (args[0] === 'config') {
|
|
let channel;
|
|
if (args[1].startsWith('<#') && args[1].endsWith('>')) {
|
|
const channelId = args[1].slice(2, -1);
|
|
channel = message.guild.channels.cache.get(channelId);
|
|
} else {
|
|
channel = message.guild.channels.cache.get(args[1]);
|
|
}
|
|
|
|
if (!channel) {
|
|
return message.reply("Le salon spécifié n'existe pas ou l'ID est incorrect.");
|
|
}
|
|
|
|
|
|
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.prisonchannel = data.prisonchannel || {};
|
|
data.prisonchannel[message.guild.id] = channel.id;
|
|
|
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
|
if (err) {
|
|
return console.error(err.message);
|
|
}
|
|
});
|
|
|
|
message.reply(`Le salon de prison a été défini sur <#${channel.id}>.`);
|
|
} else if (args[0] === 'remove') {
|
|
const users = message.mentions.users.first() || message.guild.members.cache.get(args[1])
|
|
if (!users) {
|
|
return message.reply("Veuillez mentionner un utilisateur valide.");
|
|
}
|
|
if (users.id === message.author.id) {
|
|
return message.reply("Vous ne pouvez pas vous libérer");
|
|
}
|
|
const prisonchannelnoremove = {};
|
|
try {
|
|
message.guild.channels.cache.forEach(channel => {
|
|
const overwrite = channel.permissionOverwrites.cache.find(perm => perm.id === users.id);
|
|
if (overwrite) {
|
|
channel.permissionOverwrites.delete(users.id).catch(error => {
|
|
prisonchannelnoremove[channel.id] = channel.name;
|
|
});
|
|
}
|
|
});
|
|
} catch (err) {
|
|
message.reply(`Je n'est pas pu libérer <@${users.id} de la prison`);
|
|
}
|
|
|
|
if (Object.keys(prisonchannelnoremove).length > 0) {
|
|
let reply = "Les salons suivants n'ont pas pu être modifiés :\n";
|
|
for (const channelId in prisonchannelnoremove) {
|
|
reply += `• <#${channelId}> (${prisonchannelnoremove[channelId]})\n`;
|
|
}
|
|
message.reply(reply);
|
|
} else {
|
|
message.reply(`👮 <@${users.id}> est libéré de prison`);
|
|
}
|
|
} else if (args[0] === "list") {
|
|
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[message.guild.id] = data[message.guild.id] || {};
|
|
data[message.guild.id].prisonlist = data[message.guild.id].prisonlist || [];
|
|
const embed = new EmbedBuilder()
|
|
.setTitle("Liste des utilisateurs en prison")
|
|
.setColor('#0099ff');
|
|
|
|
if (data[message.guild.id].prisonlist.length === 0) {
|
|
embed.addFields({name: " " , value :"Personne n'est en prison"})
|
|
} else {
|
|
data[message.guild.id].prisonlist.forEach((userId, index) => {
|
|
embed.addFields({ name: `${index + 1}`, value: `<@${userId}>`});
|
|
});
|
|
}
|
|
|
|
// Envoyer l'embed
|
|
message.channel.send({ embeds: [embed] });
|
|
}else {
|
|
const users = message.mentions.users.first() || message.guild.members.cache.get(args[1])
|
|
if (!users) {
|
|
return message.reply("Veuillez mentionner un utilisateur valide.");
|
|
}
|
|
if (users.id === message.author.id) {
|
|
return message.reply("Vous ne pouvez pas vous mettre en prison");
|
|
}
|
|
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.prisonchannel = data.prisonchannel || {};
|
|
const prisonChannelId = data.prisonchannel[message.guild.id];
|
|
if (!prisonChannelId) {
|
|
return message.reply("Aucun salon de prison n'est configuré pour ce serveur.");
|
|
}
|
|
const prisonChannel = message.guild.channels.cache.get(prisonChannelId);
|
|
if (prisonChannel) {
|
|
try {
|
|
message.guild.channels.cache.forEach(channel => {
|
|
if (channel.id !== prisonChannelId) {
|
|
channel.permissionOverwrites.edit(users, { "ViewChannel": false });
|
|
}
|
|
});
|
|
data[message.guild.id] = data[message.guild.id] || {};
|
|
data[message.guild.id].prisonlist = data[message.guild.id].prisonlist || [];
|
|
data[message.guild.id].prisonlist.push(users.id);
|
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
|
if (err) {
|
|
console.error(err.message);
|
|
return message.reply('Une erreur est survenue lors de la mise à jour de la configuration.');
|
|
}
|
|
});
|
|
|
|
message.reply(`🚨 <@${users.id}> est maintenant en prison`);
|
|
} catch (err) {
|
|
message.reply(`Je n'est pas la permission de mettre cette personne en prison`);
|
|
}
|
|
} else {
|
|
message.reply("Le salon de prison configuré n'existe pas.");
|
|
}
|
|
|
|
}
|
|
},
|
|
}; |