change quick.db to sqlite3

This commit is contained in:
VALOU3336
2024-02-25 21:25:18 +01:00
parent 15d2ea19c1
commit 667ac32ca1
48 changed files with 1433 additions and 2687 deletions
-6
View File
@@ -1,6 +0,0 @@
.env
/node_modules
.vscode
json.sqlite
mybot.js
changelog.js
-201
View File
@@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

-59
View File
@@ -1,59 +0,0 @@
# Nom du Bot Discord
![Logo du Bot](PPgestionBot.png)
## Description
Le Bot Discord Gestion est un bot multifonction développé en JavaScript utilisant la bibliothèque Discord.js. Il est conçu pour offrir diverses fonctionnalités utiles pour les serveurs Discord.
## Fonctionnalités
- **Commandes de base :** Commandes telles que !help, !ping, etc.
- **Modération :** Commandes de modération pour gérer les utilisateurs et les messages.
- **Fun :** Commandes amusantes pour divertir les membres du serveur.
- **Musique :** Lecture de musique depuis YouTube et autres plateformes.
## Installation
1. Cloner le référentiel :
```bash
git clone https://github.com/votre_utilisateur/nom-du-bot.git
```
2. Installer les dépendances :
```
cd nom-du-bot
npm install
```
3. Ajouter le fichier .env avec votre token bot.
```
TOKEN=votre_token_ici
```
4. Lancer le bot :
```js
node main.js
```
## Contribuer
Si vous souhaitez contribuer à ce projet, suivez ces étapes :
1. Fork du projet
2. Créer une branche pour votre fonctionnalité (git checkout -b fonctionnalite/ma-fonctionnalite)
3. Commit de vos modifications (git commit -am 'Ajout de la fonctionnalité ma-fonctionnalite')
4. Push vers la branche (git push origin fonctionnalite/ma-fonctionnalite)
5. Ouvrir une Pull Request
## Auteurs
tutur33 - Développeur principal
valou336 - Développeur principal
## Licence
Ce projet est sous licence Apache 2.0. Consultez le fichier LICENSE pour plus de détails.
@@ -0,0 +1,11 @@
const { Events, InteractionType } = require("discord.js");
module.exports = {
name: Events.InteractionCreate,
async execute(client, interaction) {
if (interaction.type === InteractionType.ApplicationCommand) {
const command = client.commands.get(interaction.commandName);
await command.execute(interaction, client);
}
},
};
+49
View File
@@ -0,0 +1,49 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require('discord.js');
const permissions = require('../../permissions.json');
module.exports = {
name: Events.ClientReady,
async execute(client) {
const db = new sqlite3.Database('myDatabase.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the SQLite database.');
});
let permissionsData = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!permissionsData.permissions) {
permissionsData.permissions = {};
}
permissionsData.permissions = permissions;
const permissionsJson = JSON.stringify(permissionsData);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => {
if (err) {
console.error(err.message);
} else {
console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`);
}
});
console.log(`Le bot ${client.user.tag} est en ligne`);
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
},
};
+68
View File
@@ -0,0 +1,68 @@
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
// Setup SQLite3 database connection
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'greet',
description: 'Ajoute ou supprime un salon des greet',
emote: '👋',
utilisation: 'greet <salon>',
category: 'gestion',
async execute(message, args) {
const botId = message.client.user.id;
const guildId = message.guild.id;
const channelId = args[0] ? args[0].replace(/<#|>/g, '') : message.channel.id;
// Query the greetings data from the SQLite3 database
let greet = await new EmbedBuilder((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) : {});
});
});
// Access the specific guild's greetings
let guildGreetings = greet[guildId] || [];
const index = guildGreetings.findIndex(greeting => greeting.channelId === channelId);
if (index !== -1) {
guildGreetings.splice(index, 1);
greet[guildId] = guildGreetings;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été retiré de la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else if (guildGreetings.length < 5) {
guildGreetings.push({ channelId });
greet[guildId] = guildGreetings;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été ajouté à la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else {
const embed = new EmbedBuilder()
.setDescription('Il y a déjà 5 salons dans la liste des salutations. Vous ne pouvez pas en ajouter d\'autres.')
.setColor('#ff0000');
message.channel.send({ embeds: [embed] });
}
},
};
+37
View File
@@ -0,0 +1,37 @@
const {Events} = require("discord.js")
const db = require('quick.db');
const PrevnameDb = new db.table("prevname");
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.InteractionCreate,
async execute(interaction, client) {
const botId = client.user.id;
let owners = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value).owners || {} : {});
});
});
if (!interaction.isButton()) return;
if (interaction.customId.startsWith('deletesuggestion_')) {
const userId= interaction.customId.split('_')[1];
if (interaction.user.id !== userId && !Object.keys(owners).includes(interaction.user.id)) {
await interaction.reply({ content: "vous n'avez pas la permission de supprimer cette suggestion.", ephemeral: true });
return;
}
await interaction.message.delete();
} else if (interaction.customId.startsWith('deleteprevnames_')) {
const userId = interaction.customId.split('_')[1];
if (interaction.user.id !== userId) {
await interaction.reply({ content: "vous n'avez pas la permission de suprimer cette suggestion.", ephemeral: true });
return;
}
await PrevnameDb.delete(userId)
await interaction.reply({ content: "Vos prevname on etait correctement supprimer.", ephemeral: true });
}
},
};
+47
View File
@@ -0,0 +1,47 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberAdd,
async execute(member) {
const botId = member.client.user.id;
const guildId = member.guild.id;
let greet = 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) : {});
});
});
const guildGreetings = greet[guildId] || [];
if (guildGreetings.length > 0) {
const welcomeMessage = `Bienvenue <@${member.id}> sur le serveur ${member.guild.name} !`;
const messagePromises = [];
for (const greeting of guildGreetings) {
try {
const channel = await member.guild.channels.fetch(greeting.channelId);
if (channel && channel.type === 0) {
messagePromises.push(
channel.send(welcomeMessage)
.then(message => {
setTimeout(() => message.delete(), 1000);
})
);
}
} catch (error) {
console.error(error);
}
}
try {
await Promise.all(messagePromises);
} catch (error) {
console.error(error);
}
}
},
};
+60
View File
@@ -0,0 +1,60 @@
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
const {Events} = require("discord.js")
module.exports = {
name: Events.GuildMemberAdd,
async execute(oldMember, newMember) {
const botId = newMember.client.user.id;
const guildId = newMember.guild.id;
let data = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
// Access the specific guild's blrank data
let blrank = data.blrank || {};
if (blrank[guildId] && blrank[guildId][newMember.id]) {
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
});
return;
}
const limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || [];
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
const limitedRole = limitedRoles.find(r => r.id === role.id);
if (limitedRole) {
const memberCount = newMember.guild.members.cache.filter(m => m.roles.cache.has(role.id)).size;
if (limitedRole.limit === 0) {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
}
if (memberCount > limitedRole.limit) {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
}
}
});
},
};
+46
View File
@@ -0,0 +1,46 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
// Setup SQLite3 database connection
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.VoiceStateUpdate,
async execute(oldState, newState) {
if (!oldState.channelId && newState.channelId) {
const guildId = newState.guild.id;
const botId = newState.client.user.id;
const channelId = newState.channelId;
// Query the bot's data from the SQLite3 database
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) : {});
});
});
// Access the specific guild's rolevocal data
let rolevocal = data.rolevocal || {};
let guildRoles = rolevocal[guildId] || {};
let channelRoles = guildRoles[channelId] || [];
if (channelRoles.length > 0) {
const member = newState.member;
for (const roleId of channelRoles) {
const role = newState.guild.roles.cache.get(roleId);
if (role) {
try {
await member.roles.add(role);
} catch (error) {
console.error(`Erreur lors de l'ajout du rôle ${roleId} à l'utilisateur ${member.id}:`, error);
}
}
}
}
}
},
};
+45
View File
@@ -0,0 +1,45 @@
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.MessageCreate,
async execute(message) {
const botId = message.client.user.id;
const guildId = message.guild.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) : {});
});
});
const suggestChannelId = data.suggestChannel && data.suggestChannel[guildId];
if (message.channel.id === suggestChannelId && !message.author.bot) {
await message.delete();
const embed = new EmbedBuilder()
.setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL() })
.setDescription(message.content || 'Aucun contenu fourni')
.setFooter({ text: `${message.guild.name} | ${message.client.user.username}`, })
.setColor('#409CED');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId(`deletesuggestion_${message.author.id}`)
.setLabel('Supprimer')
.setStyle(ButtonStyle.Danger)
);
const suggestionMessage = await message.channel.send({ embeds: [embed], components: [row] });
suggestionMessage.react('👎')
suggestionMessage.react('👍')
}
},
};
+15
View File
@@ -0,0 +1,15 @@
const {Events} = require("discord.js")
module.exports = {
name: Events.MessageDelete,
once: false,
async execute(message, client) {
if (message.author.bot) return;
client.snipes.set(message.channel.id, {
content: message.content,
author: message.author.id,
timestamp: Date.now(),
});
},
};
+20
View File
@@ -0,0 +1,20 @@
const { Events } = require("discord.js");
const db = require('quick.db');
const PrevnameDb = new db.table("prevname");
module.exports = {
name: Events.GuildMemberUpdate,
async execute(oldMember, newMember) {
if (oldMember.displayName !== newMember.displayName) {
let changeData = {
oldName: oldMember.displayName,
newName: newMember.displayName,
changeDate: Math.floor(Date.now() / 1000)
};
let nameChanges = PrevnameDb.get(`${newMember.id}.nameChanges`) || [];
nameChanges.push(changeData);
PrevnameDb.set(`${newMember.id}.nameChanges`, nameChanges);
}
},
};
+23 -19
View File
@@ -1,32 +1,36 @@
const db = require('quick.db');
const GestionDb = new db.table('gestion')
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
async function getPermissionLevel(member, client) {
const botId = client.user.id;
const guildId = member.guild.id;
const buyerId = ['1003985920162287696', '671763971803447298'];
let owners = await GestionDb.get(`${botId}.owners`) || {};
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) : {});
});
});
let owners = data.owners || {};
if (buyerId.includes(member.id)) {
return 11;
return 11;
}
if (owners[member.id]) {
return 10;
return 10;
}
let highestPermission = 0;
try {
for (let i = 1; i <= 9; i++) {
const roleIds = await GestionDb.get(`${botId}.${member.guild.id}.p${i}`);
if (roleIds) {
if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
}
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = data.permissions && data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i];
if (roleIds) {
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
}
return highestPermission;
} catch {
return highestPermission;
}
return highestPermission;
}
module.exports = { getPermissionLevel };
+1
View File
@@ -31,6 +31,7 @@ module.exports = {
'Mes sources disent non.',
'Les perspectives ne sont pas bonnes.',
'Très douteux.',
"Il est difficile de dire avec certitude à ce stade.",
];
const response = responses[Math.floor(Math.random() * responses.length)];
+44 -13
View File
@@ -1,6 +1,5 @@
const { EmbedBuilder} = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'blrank',
@@ -10,29 +9,61 @@ module.exports = {
category: 'gestion',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
if (args.length > 0) {
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
let blrank = await GestionDb.get(`${botId}.${guildId}.blrank`) || {};
if (blrank[userId]) {
delete blrank[userId];
await GestionDb.set(`${botId}.${guildId}.blrank`, blrank);
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.blrank) {
data.blrank = {};
}
if (data.blrank[userId]) {
delete data.blrank[userId];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply('Utilisateur retiré de la blrank.');
} else {
blrank[userId] = true;
await GestionDb.set(`${botId}.${guildId}.blrank`, blrank);
data.blrank[userId] = true;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply('Utilisateur ajouté à la blrank.');
}
} else {
let blrank = await GestionDb.get(`${botId}.${guildId}.blrank`) || {};
const embed = new EmbedBuilder()
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) : {});
});
});
const blrank = data.blrank || {};
const embed = new EmbedBuilder()
.setTitle('Blrank')
.setDescription(Object.keys(blrank).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche')
.setFooter({ text: message.client.user.username, iconURL: client.user.displayAvatarURL({dynamic: true})});
message.channel.send({ embeds: [embed] });
}
},
+33 -17
View File
@@ -1,7 +1,7 @@
const fs = require('fs');
const path = require('path');
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'change',
aliases: ['permchange'],
@@ -9,11 +9,12 @@ module.exports = {
emote: '🔄',
utilisation: 'change <commande> <perm>',
category: 'botcontrol',
async execute(message, args, client) {
const botId = client.user.id;
const unchangeableCommands = ['owner', 'unowner','buyer'];
const unchangeableCommands = ['owner', 'unowner', 'buyer'];
if (args.length < 2) {
if (args.length < 2) {
return message.reply('Veuillez spécifier une commande et un niveau de permission.');
}
@@ -21,16 +22,13 @@ module.exports = {
let permissionLevel;
if (args[1] === 'owner') {
permissionLevel = 10;
}
else if (args[1] === 'buyer') {
permissionLevel = 11;
}
else {
permissionLevel = 10;
} else if (args[1] === 'buyer') {
permissionLevel = 11;
} else {
permissionLevel = parseInt(args[1]);
if (isNaN(permissionLevel) || permissionLevel < 0 || permissionLevel > 9) {
return message.reply('Veuillez spécifier un niveau de permission valide (entre 0 et 9).');
if (isNaN(permissionLevel) || permissionLevel < 0 || permissionLevel > 9) {
return message.reply('Veuillez spécifier un niveau de permission valide (entre 0 et 9).');
}
}
@@ -42,10 +40,28 @@ module.exports = {
return message.reply('Cette commande n\'existe pas.');
}
let permissions = await GestionDb.get(`${botId}.permissions`);
permissions[commandName] = permissionLevel;
await GestionDb.set(`${botId}.permissions`, permissions);
const db = new sqlite3.Database('myDatabase.db');
let permissions = 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) : {});
});
});
message.reply(`Le niveau de permission de la commande ${commandName} a été changé à ${args[0].toLowerCase()}.`);
if (!permissions.permissions) {
permissions.permissions = {};
}
permissions.permissions[commandName] = permissionLevel;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(permissions)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`Le niveau de permission de la commande ${commandName} a été changé à ${permissionLevel}.`);
},
};
+49 -20
View File
@@ -1,46 +1,75 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'delperm',
description: 'Supprime un rôle d\'un niveau de permission ou d\'une commande',
emote: '❌',
emote: '❌',
utilisation: 'delperm <perm/commande> @role',
category: 'gestion',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = client.user.id;
const guildId = message.guild.id;
const permissionOrCommand = args[0].toLowerCase();
const role = message.mentions.roles.first();
if (!role) {
return message.reply('Veuillez mentionner un rôle valide.');
}
if (['1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(permissionOrCommand)) {
let roleIds = await GestionDb.get(`${botId}.${message.guild.id}.p${permissionOrCommand}`);
if (roleIds) {
if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
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);
}
const index = roleIds.indexOf(role.id);
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!data.permissions) {
data.permissions = {};
}
if (['1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(permissionOrCommand)) {
if (!data.permissions[guildId]) {
data.permissions[guildId] = {};
}
if (!data.permissions[guildId].p) {
data.permissions[guildId].p = {};
}
if (data.permissions[guildId].p[permissionOrCommand]) {
const index = data.permissions[guildId].p[permissionOrCommand].indexOf(role.id);
if (index !== -1) {
roleIds.splice(index, 1);
await GestionDb.set(`${botId}.${message.guild.id}.p${permissionOrCommand}`, roleIds);
data.permissions[guildId].p[permissionOrCommand].splice(index, 1);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
}
}
message.reply(`Le rôle pour ${permissionOrCommand} a été supprimé.`);
} else {
let roleIds = await GestionDb.get(`${botId}.${message.guild.id}.c${permissionOrCommand}`);
if (roleIds) {
if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
}
const index = roleIds.indexOf(role.id);
if (!data.permissions[guildId]) {
data.permissions[guildId] = {};
}
if (!data.permissions[guildId].c) {
data.permissions[guildId].c = {};
}
if (data.permissions[guildId].c[permissionOrCommand]) {
const index = data.permissions[guildId].c[permissionOrCommand].indexOf(role.id);
if (index !== -1) {
roleIds.splice(index, 1);
await GestionDb.set(`${botId}.${message.guild.id}.c${permissionOrCommand}`, roleIds);
data.permissions[guildId].c[permissionOrCommand].splice(index, 1);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
}
}
message.reply(`L commande ${permissionOrCommand} a été supprimé du role.`);
message.reply(`La commande ${permissionOrCommand} a été supprimée du rôle.`);
}
},
};
+25 -8
View File
@@ -1,6 +1,6 @@
const { EmbedBuilder } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'greet',
@@ -12,29 +12,46 @@ module.exports = {
async execute(message, args) {
const botId = message.client.user.id;
const guildId = message.guild.id;
const guildGreetings = GestionDb.get(`${botId}.${guildId}.greetings`) || [];
const channelId = args[0] ? args[0].replace(/<#|>/g, '') : message.channel.id;
let guildGreetings = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.greetings`], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : []);
});
});
const index = guildGreetings.findIndex(greeting => greeting.channelId === channelId);
if (index !== -1) {
guildGreetings.splice(index, 1);
GestionDb.set(`${botId}.${guildId}.greetings`, guildGreetings);
guildGreetings.splice(index, 1);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [`${botId}.${guildId}.greetings`, JSON.stringify(guildGreetings)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été retiré de la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else if (guildGreetings.length < 5) {
} else if (guildGreetings.length < 5) {
guildGreetings.push({ channelId });
GestionDb.set(`${botId}.${guildId}.greetings`, guildGreetings);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [`${botId}.${guildId}.greetings`, JSON.stringify(guildGreetings)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été ajouté à la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else {
const embed = new EmbedBuilder()
.setDescription('Il y a déjà 5 salons dans la liste des salutations. Vous ne pouvez pas en ajouter d\'autres.')
.setDescription('Il y a déjà 5 salons dans la liste des salutations. Vous ne pouvez pas en ajouter d\'autres.')
.setColor('#ff0000');
message.channel.send({ embeds: [embed] });
}
+28 -15
View File
@@ -1,6 +1,5 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { EmbedBuilder } = require('discord.js');
module.exports = {
name: 'perm',
@@ -11,13 +10,29 @@ module.exports = {
category: 'gestion',
async execute(message, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
const embed = new EmbedBuilder()
.setTitle('Rôles de permission et de commande')
.setColor('#0099ff');
for (let i = 1; i <= 9; i++) {
let roleIds = await GestionDb.get(`${botId}.${message.guild.id}.p${i}`);
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.permissions) {
data.permissions = {};
}
for (let i = 1; i <= 9; i++) {
let roleIds = data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i];
let roles = 'Aucun rôle défini';
if (roleIds) {
if (!Array.isArray(roleIds)) {
@@ -27,14 +42,14 @@ module.exports = {
}
embed.addFields({ name: `Perm ${i}`, value: roles});
}
const commandNames = await GestionDb.get(`${botId}.${message.guild.id}.commandNames`);
if (commandNames && commandNames.length > 0) {
// Créez un objet pour regrouper les commandes par rôle
const commandNames = data.permissions[guildId] && data.permissions[guildId].commandNames;
if (commandNames && commandNames.length > 0) {
const commandsByRole = {};
for (const commandName of commandNames) {
const roleIds = await GestionDb.get(`${botId}.${message.guild.id}.c${commandName}`);
if (roleIds && roleIds.length > 0) {
const roleIds = data.permissions[guildId] && data.permissions[guildId].c && data.permissions[guildId].c[commandName];
if (roleIds && roleIds.length > 0) {
for (const roleId of roleIds) {
if (!commandsByRole[roleId]) {
commandsByRole[roleId] = [];
@@ -43,15 +58,13 @@ module.exports = {
}
}
}
// Ajoutez chaque groupe de commandes à l'embed
for (const roleId in commandsByRole) {
const role = message.guild.roles.cache.get(roleId);
const commands = commandsByRole[roleId].join('\n');
embed.addFields({ name: `${role.name}`,value: commands , inline: true });
embed.addField(`${role.name}`, commands, true);
}
}
message.channel.send({ embeds: [embed] });
},
+35 -10
View File
@@ -1,29 +1,54 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'prefix',
aliases: ['setprefix'],
description: 'Change le préfixe du bot ',
emote: '🔧',
description: 'Change le préfixe du bot',
emote: '🔧',
utilisation: 'prefix <newprefix/main>',
category: 'botcontrol',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = client.user.id;
const guildId = message.guild.id;
if (args.length < 1) {
if (args.length < 1) {
return message.reply('Veuillez spécifier un nouveau préfixe.');
}
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.prefixes) {
data.prefixes = {};
}
if (args[0] === "main") {
const newPrefix = args[1];
await GestionDb.set(`${botId}.prefix`, newPrefix);
data.prefixes.main = newPrefix;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`Le main préfixe a été changé à ${newPrefix}.`);
}else {
const newPrefix = args[0];
await GestionDb.set(`${botId}.${guildId}.prefix`, newPrefix);
message.reply(`Le préfixe a été changé à ${newPrefix}.`);
} else {
const newPrefix = args[0];
data.prefixes[guildId] = newPrefix;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`Le préfixe a été changé à ${newPrefix}.`);
}
},
};
+44 -16
View File
@@ -1,6 +1,5 @@
const { ChannelType , EmbedBuilder } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const { ChannelType, EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'rvocal',
@@ -10,31 +9,37 @@ module.exports = {
category: 'gestion',
async execute(message, args) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
let mentionedChannel = message.mentions.channels.first();
if (!mentionedChannel) {
const channelId = args[0];
mentionedChannel = message.guild.channels.cache.get(channelId);
if (!mentionedChannel || mentionedChannel.type !== ChannelType.GuildVoice) {
return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide.");
}
}
if (mentionedChannel === ChannelType.GuildText || mentionedChannel === ChannelType.DM) {
return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide.");
}
if (args.length === 1 ) {
const channelId = args[0];
mentionedChannel = message.guild.channels.cache.get(channelId);
if (!mentionedChannel || mentionedChannel.type !== ChannelType.GuildVoice) {
return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide.");
}
}
if (mentionedChannel.type !== ChannelType.GuildVoice) {
return message.channel.send("Veuillez mentionner un salon vocal valide ou fournir un ID de salon vocal valide.");
}
const roles = GestionDb.get(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`) || [];
if (args.length === 1 ) {
const roles = 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) : {});
});
});
const channelRoles = roles.rolevocal && roles.rolevocal[guildId] && roles.rolevocal[guildId][mentionedChannel.id] || [];
const embed = new EmbedBuilder()
.setTitle(`Rôles associés au salon vocal <#${mentionedChannel.id}>`)
.setDescription(roles.length > 0 ? roles.map(roleId => `<@&${roleId}>`).join(', ') : 'Aucun rôle associé.')
.setDescription(channelRoles.length > 0 ? channelRoles.map(roleId => `<@&${roleId}>`).join(', ') : 'Aucun rôle associé.')
.setColor('#0099ff');
return message.channel.send({ embeds: [embed] });
@@ -55,7 +60,30 @@ module.exports = {
}
}
GestionDb.set(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`, roles);
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.rolevocal) {
data.rolevocal = {};
}
if (!data.rolevocal[guildId]) {
data.rolevocal[guildId] = {};
}
data.rolevocal[guildId][mentionedChannel.id] = roles;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.channel.send(`Les rôles ont été enregistrés pour le salon vocal <#${mentionedChannel.id}>.`);
}
},
+50 -21
View File
@@ -1,14 +1,16 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'setperm',
description: 'Définit un rôle pour un niveau de permission ou une commande',
emote: '🔑',
emote: '🔑',
utilisation: 'setperm <perm/commande> @role',
category: 'gestion',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
const permissionOrCommand = args[0].toLowerCase();
const role = message.mentions.roles.first();
@@ -16,43 +18,70 @@ module.exports = {
return message.reply('Veuillez mentionner un rôle valide.');
}
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.permissions) {
data.permissions = {};
}
if (['1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(permissionOrCommand)) {
for (let i = 1; i <= 9; i++) {
let oldRoleIds = await GestionDb.get(`${botId}.${message.guild.id}.p${i}`);
if (!data.permissions[guildId]) {
data.permissions[guildId] = {};
}
if (!data.permissions[guildId].p) {
data.permissions[guildId].p = {};
}
for (let i = 1; i <= 9; i++) {
let oldRoleIds = data.permissions[guildId].p[i];
if (oldRoleIds) {
if (!Array.isArray(oldRoleIds)) {
oldRoleIds = [oldRoleIds];
}
const index = oldRoleIds.indexOf(role.id);
if (index !== -1) {
oldRoleIds.splice(index, 1);
await GestionDb.set(`${botId}.${message.guild.id}.p${i}`, oldRoleIds);
oldRoleIds.splice(index, 1);
}
}
}
let roleIds = await GestionDb.get(`${botId}.${message.guild.id}.p${permissionOrCommand}`);
let roleIds = data.permissions[guildId].p[permissionOrCommand];
if (!roleIds) {
roleIds = [];
} else if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
}
roleIds.push(role.id);
await GestionDb.set(`${botId}.${message.guild.id}.p${permissionOrCommand}`, roleIds);
message.reply(`La permission ${permissionOrCommand} a été défini sur ${role.name}.`);
data.permissions[guildId].p[permissionOrCommand] = roleIds;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`La permission ${permissionOrCommand} a été définie sur ${role.name}.`);
} else {
if (!client.commands.has(permissionOrCommand)) {
return message.reply('Cette commande n\'existe pas.');
}
let roleIds = await GestionDb.get(`${botId}.${message.guild.id}.c${permissionOrCommand}`);
if (!data.permissions[guildId]) {
data.permissions[guildId] = {};
}
if (!data.permissions[guildId].c) {
data.permissions[guildId].c = {};
}
let roleIds = data.permissions[guildId].c[permissionOrCommand];
if (!roleIds) {
roleIds = [];
} else if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
}
roleIds.push(role.id);
await GestionDb.set(`${botId}.${message.guild.id}.c${permissionOrCommand}`, roleIds);
GestionDb.push(`${botId}.${message.guild.id}.commandNames`, permissionOrCommand);
message.reply(`La role ${role.name} a maintenant accée a la commande ${permissionOrCommand} .`);
data.permissions[guildId].c[permissionOrCommand] = roleIds;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`Le rôle ${role.name} a maintenant accès à la commande ${permissionOrCommand}.`);
}
},
};
+44 -8
View File
@@ -1,5 +1,4 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'suggest',
@@ -7,18 +6,45 @@ module.exports = {
emote: '💡',
utilisation: 'suggest #channel',
category: 'gestion',
async execute(message, args, client) {
const botid = client.user.id;
const db = new sqlite3.Database('myDatabase.db');
const botId = client.user.id;
const guildId = message.guild.id;
const currentSuggestChannelId = GestionDb.get(`${botid}.${guildId}.suggestchannel`);
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.suggestChannel) {
data.suggestChannel = {};
}
const currentSuggestChannelId = data.suggestChannel[guildId];
const mentionedChannel = message.mentions.channels.first();
if (mentionedChannel) {
if (mentionedChannel.id === currentSuggestChannelId) {
GestionDb.delete(`${botid}.${guildId}.suggestchannel`);
delete data.suggestChannel[guildId];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.channel.send(`Le salon de suggestion a été supprimé.`);
} else {
GestionDb.set(`${botid}.${guildId}.suggestchannel`, mentionedChannel.id);
data.suggestChannel[guildId] = mentionedChannel.id;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.channel.send(`Le salon de suggestion a été configuré à <#${mentionedChannel.id}>`);
}
return;
@@ -28,10 +54,20 @@ module.exports = {
const channel = message.guild.channels.cache.get(args[0]);
if (channel) {
if (channel.id === currentSuggestChannelId) {
GestionDb.delete(`${botid}.${guildId}.suggestchannel`);
delete data.suggestChannel[guildId];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.channel.send(`Le salon de suggestion a été supprimé.`);
} else {
GestionDb.set(`${botid}.${guildId}.suggestchannel`, args[0]);
data.suggestChannel[guildId] = args[0];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.channel.send(`Le salon de suggestion a été configuré à <#${args[0]}>`);
}
return;
+113
View File
@@ -0,0 +1,113 @@
const fs = require('fs');
const path = require('path');
const sqlite3 = require('sqlite3').verbose();
module.exports = (client) => {
const loadCommands = (dir) => {
let count = 0;
fs.readdirSync(path.join(__dirname, dir)).forEach(file => {
const filePath = path.join(__dirname, dir, file);
if (fs.statSync(filePath).isDirectory()) {
count += loadCommands(path.join(dir, file));
} else if (file.endsWith('.js')) {
try {
delete require.cache[require.resolve(filePath)];
const command = require(filePath);
client.commands.set(command.name, command);
if (command.aliases) {
command.aliases.forEach(alias => {
client.commands.set(alias, command);
});
}
count++;
} catch (error) {
console.error(`Failed to load file: ${filePath}`);
console.error(error);
}
}
});
return count;
}
const db = new sqlite3.Database('myDatabase.db');
async function getPermissionLevel(member, client) {
const botId = client.user.id;
const guildId = member.guild.id;
const buyerId = ['1003985920162287696', '671763971803447298'];
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) : {});
});
});
let owners = data.owners || {};
if (buyerId.includes(member.id)) {
return 11;
}
if (owners[member.id]) {
return 10;
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = data.permissions && data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i];
if (roleIds) {
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
}
}
return highestPermission;
}
const totalCommands = loadCommands('../commands');
console.log(`Commands => ${totalCommands} commandes préfixées chargées sur le bot`);
client.on('messageCreate', async message => {
const botId = client.user.id;
const guildId = message.guild.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) : {});
});
});
const permissions = data.permissions || {};
const defaultPrefix = "+";
let mainPrefix = data.prefix || defaultPrefix;
let serverPrefix = data.permissions && data.permissions[guildId] && data.permissions[guildId].prefix || mainPrefix;
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix;
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
if (!client.commands.has(commandName)) return;
const command = client.commands.get(commandName)
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (command) {
const permissionLevel = await getPermissionLevel(message.member, client, guildId);
try {
if (permissionLevel === 11) {
command.execute(message, args, client);
} else if (permissionLevel >= permissions[command.name]) {
command.execute(message, args, client);
} else {
return message.reply("Vous n'avez pas accès à cette commande.");
}
} catch {
console.error(`Erreur lors de l'exécution de la commande: ${command.name}`);
message.reply('Une erreur est survenue lors de l\'exécution de cette commande.');
}
}
});
}
+26
View File
@@ -0,0 +1,26 @@
const fs = require('fs');
const path = require('path');
module.exports = (client) => {
let count = 0;
const loadEvents = (dir) => {
fs.readdirSync(path.join(__dirname, dir)).forEach(file => {
const filePath = path.join(__dirname, dir, file);
if (fs.statSync(filePath).isDirectory()) {
loadEvents(path.join(dir, file));
} else if (file.endsWith('.js')) {
delete require.cache[require.resolve(filePath)];
const event = require(filePath);
if (typeof event.execute === 'function') {
client.on(event.name, (...args) => event.execute(...args, client));
console.log(`Event ${event.name} loaded`);
count++;
} else {
console.error(`Event ${event.name} does not have an execute method.`);
}
}
});
}
loadEvents('../events');
console.log(`Event => ${count} chargé sur le bot`)
}
-22
View File
@@ -1,22 +0,0 @@
require('dotenv').config();
const { Client, IntentsBitField, Collection } = require("discord.js");
const loadCommands = require("./loaders/loadCommands");
const loadEvents = require("./loaders/loadEvents");
const db = require('quick.db');
const GestionDb = new db.table('gestion')
const client = new Client({intents: new IntentsBitField(3276799)});
client.events = new Collection();
client.commands = new Collection();
client.snipes = new Map();
client.once('ready', () => {
const permissions = require('./permissions.json');
GestionDb.set(`${client.user.id}.permissions`, permissions);
console.log(`${client.user.username} a bien charge les permissions`);
});
(async () => {
loadCommands(client);
loadEvents(client);
await client.login(process.env.TOKEN);
})();
+47 -14
View File
@@ -1,24 +1,42 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
const { EmbedBuilder } = require('discord.js');
module.exports = {
name: 'bl',
aliases: ['blacklist', 'blacklistlist', 'bliste'],
description: 'AJouter ou affiché la list des blacklist',
emote: '🚫',
utilisation: 'bl [@user]',
emote: '🚫',
utilisation: 'bl [@user]',
category: 'gestion',
async execute(message, args, client) {
const user = message.mentions.users.first() || (args[0] && client.users.cache.get(args[0]));
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const user = message.mentions.users.first() || (args[0] && client.users.cache.get(args[0]));
if (user) {
let bl = await GestionDb.get(`${botId}.bl`) || {};
bl[user.id] = true;
await GestionDb.set(`${botId}.bl`, bl);
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.blacklist) {
data.blacklist = {};
}
data.blacklist[user.id] = true;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
let successfulBans = 0;
try {
if (client.guilds && client.guilds.cache) {
@@ -29,20 +47,35 @@ module.exports = {
successfulBans++;
}
}
} else {
}
} catch (error) {
console.error(error);
}
// Informe l'utilisateur que l'opération a réussi
message.reply(`L'utilisateur <@${user.id}> a été ajouté à la blacklist et a été banni de ${successfulBans} serveurs.`);
} else {
let bl = await GestionDb.get(`${botId}.owners`) || {};
// Récupère les données existantes de la base de données
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) : {});
});
});
// Récupère la liste noire spécifique à partir des données
const blacklist = data.blacklist || {};
// Crée un embed pour afficher la liste noire
const embed = new EmbedBuilder()
.setTitle('Liste des blacklist')
.setDescription(Object.keys(bl).map(bllist => `<@${bllist}>`).join('\n') || "Aucun personne n'est blacklist")
.setDescription(Object.keys(blacklist).map(bllist => `<@${bllist}>`).join('\n') || "Aucun personne n'est blacklist")
.setColor('#0099ff');
// Envoie l'embed dans le canal
message.channel.send({ embeds: [embed] });
}
},
+13 -8
View File
@@ -1,18 +1,23 @@
const { MessageEmbed } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'clearowner',
aliases: ['clearowners'],
description: 'Supprimer tout les owners',
emote: '👑',
utilisation: 'clearowner',
category: 'buyer',
emote: '👑',
utilisation: 'clearowner',
category: 'buyer',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = client.user.id;
GestionDb.set(`${botId}.owners`, {});
message.reply("Toutes les owner ony etaient supprimer")
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify({})], (err) => {
if (err) {
console.error(err.message);
} else {
message.reply("Toutes les owner ony etaient supprimer");
}
});
},
};
+37 -10
View File
@@ -1,27 +1,54 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { EmbedBuilder } = require('discord.js');
module.exports = {
name: 'owner',
aliases: ['owners'],
description: 'Affiche la liste des propriétaires ou ajoute un propriétaire',
emote: '👑',
utilisation: 'owner <@user>',
emote: '👑',
utilisation: 'owner <@user>',
category: 'buyer',
async execute(message, client) {
const user = message.mentions.users.first();
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const user = message.mentions.users.first();
if (user) {
let owners = await GestionDb.get(`${botId}.owners`) || {};
owners[user.id] = true;
await GestionDb.set(`${botId}.owners`, owners);
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.owners) {
data.owners = {};
}
data.owners[user.id] = true;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`L'utilisateur <@${user.id}> a été ajouté à la liste des owners.`);
} else {
let owners = await GestionDb.get(`${botId}.owners`) || {};
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) : {});
});
});
const owners = data.owners || {};
const embed = new EmbedBuilder()
.setTitle('Liste des owner')
.setDescription(Object.keys(owners).map(ownerId => `<@${ownerId}>`).join('\n') || 'Aucun owner est dans la liste')
+27 -11
View File
@@ -1,24 +1,40 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'unbl',
aliases: ['unblacklist'],
description: 'Enlever une personne de la blacklist',
emote: '🚫',
utilisation: 'unbl <@user>',
emote: '🚫',
utilisation: 'unbl <@user>',
category: 'gestion',
async execute(message, args, client) {
const user = message.mentions.users.first() || (args[0] && client.users.cache.get(args[0]));
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
if (user) {
let bl = await GestionDb.get(`${botId}.bl`) || {};
const user = message.mentions.users.first() || (args[0] && client.users.cache.get(args[0]));
if (bl[user.id]) {
delete bl[user.id];
await GestionDb.set(`${botId}.bl`, bl);
if (user) {
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.blacklist) {
data.blacklist = {};
}
if (data.blacklist[user.id]) {
delete data.blacklist[user.id];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`L'utilisateur <@${user.id}> a été enlevé de la blacklist.`);
} else {
message.reply(`L'utilisateur <@${user.id}> n'est pas sur la blacklist.`);
+25 -7
View File
@@ -1,26 +1,44 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'unowner',
aliases: ['unowners'],
description: 'Supprime un propriétaire',
emote: '👑',
emote: '👑',
utilisation: 'unowner <@user>',
category: 'buyer',
async execute(message) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const user = message.mentions.users.first();
if (!user) {
return message.reply('Veuillez mentionner un utilisateur à supprimer de la liste des propriétaires.');
}
let owners = await GestionDb.get(`${botId}.owners`) || {};
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 (owners[user.id]) {
delete owners[user.id];
await GestionDb.set(`${botId}.owners`, owners);
if (!data.owners) {
data.owners = {};
}
if (data.owners[user.id]) {
delete data.owners[user.id];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply(`L'utilisateur <@${user.id}> a été supprimé de la liste des propriétaires.`);
} else {
message.reply('Cet utilisateur n\'est pas un owner.');
+26 -10
View File
@@ -1,5 +1,4 @@
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'unwl',
@@ -8,20 +7,37 @@ module.exports = {
emote: '🚫',
utilisation: 'unwl <@user>',
category: 'gestion',
async execute(message, args) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
if (args.length === 0) {
const user = message.mentions.users.first() || (args[0] && message.client.users.cache.get(args[0]));
if (!user) {
return message.reply('Veuillez mentionner un utilisateur à retirer de la liste blanche.');
}
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
let whitelist = await GestionDb.get(`${botId}.${guildId}.whitelist`) || {};
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 (whitelist[userId]) {
delete whitelist[userId];
await GestionDb.set(`${botId}.${guildId}.whitelist`, whitelist);
if (!data.whitelist) {
data.whitelist = {};
}
if (data.whitelist[user.id]) {
delete data.whitelist[user.id];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply('Utilisateur retiré de la liste blanche.');
} else {
message.reply('Cet utilisateur n\'est pas sur la liste blanche.');
+38 -12
View File
@@ -1,6 +1,5 @@
const { EmbedBuilder } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'wl',
@@ -11,27 +10,54 @@ module.exports = {
category: 'gestion',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
if (args.length > 0) {
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
let whitelist = await GestionDb.get(`${botId}.${guildId}.whitelist`) || {};
const user = message.mentions.users.first() || (args[0] && message.client.users.cache.get(args[0]));
if (!whitelist[userId]) {
whitelist[userId] = true;
await GestionDb.set(`${botId}.${guildId}.whitelist`, whitelist);
if (user) {
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.whitelist) {
data.whitelist = {};
}
if (!data.whitelist[user.id]) {
data.whitelist[user.id] = true;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
}
});
message.reply('Utilisateur ajouté à la liste blanche.');
} else {
message.reply('Cet utilisateur est déjà sur la liste blanche.');
}
} else {
let whitelist = await GestionDb.get(`${botId}.${guildId}.whitelist`) || {};
const embed = new EmbedBuilder()
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) : {});
});
});
const whitelist = data.whitelist || {};
const embed = new EmbedBuilder()
.setTitle('Liste blanche')
.setDescription(Object.keys(whitelist).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche')
.setFooter({ text: 'design by valou336', iconURL: client.user.displayAvatarURL({dynamic: true})});
message.channel.send({ embeds: [embed] });
}
},
-1896
View File
File diff suppressed because it is too large Load Diff
-31
View File
@@ -1,31 +0,0 @@
{
"name": "gestion",
"version": "1.0.0",
"description": "Bot discord en js by TuturP33 & Valou336",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Tutur33/gestion.git"
},
"author": "Valou336 && Tutur33 ",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/Tutur33/gestion/issues"
},
"homepage": "https://github.com/Tutur33/gestion#readme",
"dependencies": {
"axios": "^1.6.7",
"color-name-list": "^10.19.0",
"discord-gamecord": "^4.4.1",
"discord.js": "^14.14.1",
"discordjs-button-pagination": "^3.0.1",
"dotenv": "^16.4.4",
"ms": "^2.1.3",
"quick.db": "^7.1.3",
"sqlite": "^5.1.1",
"sqlite3": "^5.1.7"
}
}
-122
View File
@@ -1,122 +0,0 @@
{
"2048": 0,
"permupdate": 4,
"dbperm": 4,
"clear": 4,
"help": 0,
"support": 0,
"setperm": 6,
"delperm": 6,
"owner": 11,
"unowner": 11,
"backup": 11,
"perm": 5,
"alladmin": 5,
"allbot": 5,
"banner": 5,
"botinfo": 5,
"channel": 5,
"helpall": 1,
"pic": 0,
"ping": 0,
"snipe": 0,
"roleinfo": 0,
"uptime": 0,
"setavatar": 10,
"setname": 10,
"prefix": 10,
"servers": 10,
"leave": 10,
"change": 10,
"find": 0,
"serverinfo": 0,
"antibot": 10,
"say": 0,
"massiverole": 6,
"unmassiverole": 6,
"soutien": 10,
"renew": 5,
"lock": 5,
"unlock": 5,
"unlockall": 5,
"lockall": 5,
"hide": 5,
"hideall": 5,
"unhide": 5,
"unhideall": 5,
"ban": 5,
"unban": 5,
"mute": 5,
"unmute": 5,
"tempmute": 5,
"mutelist": 5,
"banlist": 5,
"warn": 3,
"unwarn": 3,
"sanction": 5,
"kick": 5,
"addrole": 5,
"delrole": 5,
"derank": 5,
"stream": 10,
"watch": 10,
"listen": 10,
"game": 10,
"antichannel": 10,
"wl": 10,
"unwl": 10,
"secur": 10,
"buyer": 11,
"clearowner": 10,
"checkperms": 10,
"create": 5,
"embed": 5,
"joinsettings": 10,
"setlog": 10,
"clearsanction": 5,
"unbanall": 8,
"calcul": 0,
"clearwl": 10,
"reset": 10,
"resetall": 11,
"dm": 10,
"giveaway": 5,
"8ball": 0,
"slowmode": 5,
"mybot": 10,
"invite": 10,
"setalerte": 10,
"alerteping": 10,
"messagelog": 10,
"modlog": 10,
"vocallog": 10,
"rolelog": 10,
"snake": 0,
"catsay": 0,
"puissance4": 0,
"morpion": 0,
"pfc": 0,
"vc": 0,
"flood": 0,
"findemoji": 0,
"guesspokemon": 0,
"slot": 0,
"fasttype": 0,
"demineur": 0,
"pendu": 0,
"wordle": 0,
"pdefault": 11,
"changelog": 0,
"mod": 10,
"bunker": 5,
"play": 5,
"set": 5,
"poll": 5,
"userinfo": 5,
"bl": 10,
"unbl": 10,
"stat": 10,
"random": 0,
"greet": 10,
"greetlist": 10
}
+53 -44
View File
@@ -1,6 +1,5 @@
const { EmbedBuilder , ButtonBuilder, ButtonStyle, ActionRowBuilder } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table("gestion");
const sqlite3 = require('sqlite3').verbose();
module.exports = {
name: 'helpall',
@@ -11,83 +10,93 @@ module.exports = {
category: 'utils',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = client.user.id;
const guildId = message.guild.id;
const defaultprefix = "+";
let mainPrefix = await GestionDb.get(`${botId}.prefix`);
let serverPrefix = await GestionDb.get(`${botId}.${guildId}.prefix`);
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix !== undefined ? mainPrefix : defaultprefix;
const defaultPrefix = "+";
const permissions = GestionDb.get(`${botId}.permissions`);
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) : {});
});
});
const permissions = data.permissions || {};
const prefix = data.prefix || defaultPrefix;
const commandsByPermission = {};
// Parcourir les permissions et les commandes associées
for (const [commandName, permissionLevel] of Object.entries(permissions)) {
if (!commandsByPermission[permissionLevel]) {
commandsByPermission[permissionLevel] = [];
}
commandsByPermission[permissionLevel].push(commandName);
}
const embeds = Object.entries(commandsByPermission).sort(([a], [b]) => a - b).map(([permissionLevel, commands]) => {
// Créer les embeds pour chaque niveau de permission avec des commandes associées
const embeds = Object.entries(commandsByPermission).map(([permissionLevel, commands]) => {
const commandDescriptions = commands.map(commandName => {
const command = client.commands.get(commandName);
if (!command) {
return null;
return null;
}
return `**${prefix}${commandName}**\n\`${command.description}\``;
}).filter(Boolean);
}).filter(Boolean);
if (commandDescriptions.length === 0) {
return null; // Skip creating an embed if there are no commands for this permission level
}
const embed = new EmbedBuilder()
.setTitle(`Commandes de niveau de permission ${permissionLevel === '10' ? 'Owner' : permissionLevel === '11' ? 'Buyer' : permissionLevel}`)
.setColor('#0099ff');
const embed = new EmbedBuilderon()
.setTitle(`Commandes de niveau de permission ${permissionLevel}`)
.setColor('#0099ff');
if (commandDescriptions.length > 0) {
embed.setDescription(commandDescriptions.join('\n'));
} else {
embed.setDescription('Aucune commande disponible pour ce niveau de permission.');
}
return embed;
});
const backButton = new ButtonBuilder()
.setCustomId('back')
.setLabel('⬅️')
.setStyle(ButtonStyle.Primary);
const nextButton = new ButtonBuilder()
.setCustomId('next')
.setLabel('➡️')
.setStyle(ButtonStyle.Primary);
// Create the action row with the buttons
const row = new ActionRowBuilder()
.addComponents(backButton, nextButton);
const msg = await message.channel.send({ embeds: [embeds[0]], components: [row] });
}).filter(Boolean) // Filter out any undefined embeds
if (embeds.length === 0) {
return message.reply("Aucune commande disponible pour ce serveur.");
}
const backButton = new ButtonBuilder()
.setCustomId('back')
.setLabel('⬅️')
.setStyle(ButtonStyle.Primary);
const nextButton = new ButtonBuilder()
.setCustomId('next')
.setLabel('➡️')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(backButton, nextButton);
const msg = await message.channel.send({ embeds: [embeds[0]], components: [row] });
const collector = msg.createMessageComponentCollector({
filter: (interaction) => interaction.isButton() && interaction.user.id === message.author.id,
time: 60000
});
let currentPage = 0;
let currentPage = 0;
collector.on('collect', async (interaction) => {
// Acknowledge the interaction
await interaction.deferUpdate();
if (!interaction.isButton()) return;
if (interaction.customId === 'back') {
currentPage = currentPage > 0 ? --currentPage : embeds.length - 1;
currentPage = currentPage > 0 ? --currentPage : embeds.length - 1;
} else if (interaction.customId === 'next') {
currentPage = currentPage + 1 < embeds.length ? ++currentPage : 0;
currentPage = currentPage + 1 < embeds.length ? ++currentPage : 0;
}
// Update the message with the new embed and the action row with buttons
await msg.edit({ embeds: [embeds[currentPage]], components: [row] });
});
collector.on('end', () => msg.edit({ embeds: [embeds[currentPage]], components: [] }));
},
+1 -1
View File
@@ -1,4 +1,4 @@
const { EmbedBuilder } = require('discord.js');
const { EmbedBuilder, } = require('discord.js');
module.exports = {
name: 'stat',
+37 -3
View File
@@ -1,9 +1,43 @@
const { Events, ActivityType } = require("discord.js");
const sqlite3 = require('sqlite3').verbose();
const { Events } = require('discord.js');
const permissions = require('../../permissions.json');
module.exports = {
name: Events.ClientReady,
async execute(client) {
console.log(`le bot ${client.user.tag} est en ligne`)
const db = new sqlite3.Database('myDatabase.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the SQLite database.');
});
let permissionsData = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!permissionsData.permissions) {
permissionsData.permissions = {};
}
permissionsData.permissions = permissions;
const permissionsJson = JSON.stringify(permissionsData);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => {
if (err) {
console.error(err.message);
} else {
console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`);
}
});
console.log(`Le bot ${client.user.tag} est en ligne`);
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
});
@@ -11,5 +45,5 @@ module.exports = {
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
}
},
};
+64 -14
View File
@@ -1,18 +1,68 @@
const { Events } = require("discord.js");
const db = require('quick.db');
const GestionDb = new db.table('gestion')
module.exports = {
name: Events.GuildMemberAdd,
once: false,
async execute(member, client) {
const userId = member.user.id;
const bl = await GestionDb.get(`${client.user.id}.bl`);
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
if (bl && bl[userId]) {
try {
await member.ban({ reason: 'Blacklisted' });
} catch (error) {
}
// Setup SQLite3 database connection
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'greet',
description: 'Ajoute ou supprime un salon des greet',
emote: '👋',
utilisation: 'greet <salon>',
category: 'gestion',
async execute(message, args) {
const botId = message.client.user.id;
const guildId = message.guild.id;
const channelId = args[0] ? args[0].replace(/<#|>/g, '') : message.channel.id;
// Query the greetings data from the SQLite3 database
let greet = await new EmbedBuilder((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) : {});
});
});
// Access the specific guild's greetings
let guildGreetings = greet[guildId] || [];
const index = guildGreetings.findIndex(greeting => greeting.channelId === channelId);
if (index !== -1) {
guildGreetings.splice(index, 1);
greet[guildId] = guildGreetings;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été retiré de la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else if (guildGreetings.length < 5) {
guildGreetings.push({ channelId });
greet[guildId] = guildGreetings;
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => {
if (err) {
console.error(err.message);
}
});
const embed = new EmbedBuilder()
.setDescription(`Le salon <#${channelId}> a été ajouté à la liste des salutations.`)
.setColor('#0099ff');
message.channel.send({ embeds: [embed] });
} else {
const embed = new EmbedBuilder()
.setDescription('Il y a déjà 5 salons dans la liste des salutations. Vous ne pouvez pas en ajouter d\'autres.')
.setColor('#ff0000');
message.channel.send({ embeds: [embed] });
}
},
};
+12 -4
View File
@@ -1,20 +1,28 @@
const {Events} = require("discord.js")
const db = require('quick.db');
const PrevnameDb = new db.table("prevname");
const GestionDb = new db.table('gestion');
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.InteractionCreate,
async execute(interaction, client) {
const botId = client.user.id;
let owners = await GestionDb.get(`${botId}.owners`) || {};
let owners = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value).owners || {} : {});
});
});
if (!interaction.isButton()) return;
if (interaction.customId.startsWith('deletesuggestion_')) {
const userId = interaction.customId.split('_')[1];
const userId= interaction.customId.split('_')[1];
if (interaction.user.id !== userId && !Object.keys(owners).includes(interaction.user.id)) {
await interaction.reply({ content: "vous n'avez pas la permission de supprimer cette suggestion.", ephemeral: true });
return;
}
await interaction.message.delete();
} else if (interaction.customId.startsWith('deleteprevnames_')) {
const userId = interaction.customId.split('_')[1];
+19 -7
View File
@@ -1,21 +1,31 @@
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const {Events} = require("discord.js")
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberAdd ,
name: Events.GuildMemberAdd,
async execute(member) {
const botId = member.client.user.id;
const guildId = member.guild.id;
const guildGreetings = GestionDb.get(`${botId}.${guildId}.greetings`) || [];
if (guildGreetings.length > 0) {
let greet = 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) : {});
});
});
const guildGreetings = greet[guildId] || [];
if (guildGreetings.length > 0) {
const welcomeMessage = `Bienvenue <@${member.id}> sur le serveur ${member.guild.name} !`;
const messagePromises = [];
for (const greeting of guildGreetings) {
try {
const channel = await member.guild.channels.fetch(greeting.channelId);
if (channel && channel.type === 0) {
if (channel && channel.type === 0) {
messagePromises.push(
channel.send(welcomeMessage)
.then(message => {
@@ -24,11 +34,13 @@ module.exports = {
);
}
} catch (error) {
console.error(error);
}
}
try {
await Promise.all(messagePromises);
} catch (error) {
console.error(error);
}
}
},
+19 -5
View File
@@ -1,15 +1,28 @@
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
const {Events} = require("discord.js")
module.exports = {
name: 'guildMemberUpdate',
execute(oldMember, newMember) {
name: Events.GuildMemberAdd,
async execute(oldMember, newMember) {
const botId = newMember.client.user.id;
const guildId = newMember.guild.id;
const limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || [];
const blrank = GestionDb.get(`${botId}.${guildId}.blrank`) || {};
let data = await new Promise((resolve, reject) => {
db2.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 (blrank[newMember.id]) {
// Access the specific guild's blrank data
let blrank = data.blrank || {};
if (blrank[guildId] && blrank[guildId][newMember.id]) {
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
try {
@@ -20,6 +33,7 @@ module.exports = {
});
return;
}
const limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || [];
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
+24 -6
View File
@@ -1,6 +1,8 @@
const db = require('quick.db');
const GestionDb = new db.table('gestion');
const {Events} = require("discord.js")
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
// Setup SQLite3 database connection
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.VoiceStateUpdate,
@@ -9,10 +11,26 @@ module.exports = {
const guildId = newState.guild.id;
const botId = newState.client.user.id;
const channelId = newState.channelId;
const roles = GestionDb.get(`${botId}.${guildId}.rolevocal.${channelId}`) || [];
if (roles.length > 0) {
// Query the bot's data from the SQLite3 database
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) : {});
});
});
// Access the specific guild's rolevocal data
let rolevocal = data.rolevocal || {};
let guildRoles = rolevocal[guildId] || {};
let channelRoles = guildRoles[channelId] || [];
if (channelRoles.length > 0) {
const member = newState.member;
for (const roleId of roles) {
for (const roleId of channelRoles) {
const role = newState.guild.roles.cache.get(roleId);
if (role) {
try {
+22 -9
View File
@@ -1,12 +1,25 @@
const { ActionRowBuilder, ButtonBuilder,ButtonStyle , EmbedBuilder } = require('discord.js');
const db = require('quick.db');
const GestionDb = new db.table('gestion')
const {Events} = require("discord.js")
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.MessageCreate,
async execute(message) {
const botid = message.client.user.id;
const suggestChannelId = GestionDb.get(`${botid}.${message.guild.id}.suggestchannel`);
const botId = message.client.user.id;
const guildId = message.guild.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) : {});
});
});
const suggestChannelId = data.suggestChannel && data.suggestChannel[guildId];
if (message.channel.id === suggestChannelId && !message.author.bot) {
await message.delete();
@@ -24,9 +37,9 @@ module.exports = {
.setStyle(ButtonStyle.Danger)
);
const suggestionmesssage = await message.channel.send({ embeds: [embed], components: [row] });
suggestionmesssage.react('👎')
suggestionmesssage.react('👍')
const suggestionMessage = await message.channel.send({ embeds: [embed], components: [row] });
suggestionMessage.react('👎')
suggestionMessage.react('👍')
}
},
};
+56 -38
View File
@@ -1,7 +1,6 @@
const fs = require('fs');
const path = require('path');
const db = require('quick.db');
const GestionDb = new db.table('gestion')
const sqlite3 = require('sqlite3').verbose();
module.exports = (client) => {
const loadCommands = (dir) => {
@@ -12,7 +11,6 @@ module.exports = (client) => {
count += loadCommands(path.join(dir, file));
} else if (file.endsWith('.js')) {
try {
// Delete the cache for this command file
delete require.cache[require.resolve(filePath)];
const command = require(filePath);
client.commands.set(command.name, command);
@@ -23,63 +21,83 @@ module.exports = (client) => {
}
count++;
} catch (error) {
console.error(`Failed to load file: ${filePath}`); // Log any errors
console.error(`Failed to load file: ${filePath}`);
console.error(error);
}
}
});
return count;
}
const db = new sqlite3.Database('myDatabase.db');
async function getPermissionLevel(member, client) {
const botId = client.user.id;
const buyerId = ['1003985920162287696', '671763971803447298'];
let owners = await GestionDb.get(`${botId}.owners`) || {};
if (buyerId.includes(member.id)) {
return 11;
}
if (owners[member.id]) {
return 10;
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = await GestionDb.get(`${botId}.${member.guild.id}.p${i}`);
if (roleIds) {
// Si roleIds n'est pas un tableau, le convertir en tableau
if (!Array.isArray(roleIds)) {
roleIds = [roleIds];
}
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
}
}
return highestPermission;
}
const botId = client.user.id;
const guildId = member.guild.id;
const buyerId = ['1003985920162287696', '671763971803447298'];
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) : {});
});
});
let owners = data.owners || {};
if (buyerId.includes(member.id)) {
return 11;
}
if (owners[member.id]) {
return 10;
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = data.permissions && data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i];
if (roleIds) {
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
}
}
return highestPermission;
}
const totalCommands = loadCommands('../commands');
console.log(`Commands => ${totalCommands} commandes préfixées chargées sur le bot`);
client.on('messageCreate', async message => {
const botId = client.user.id;
const guildId = message.guild.id;
const botInfo = GestionDb.get(botId);
const permissions = botInfo.permissions;
const defaultprefix = "+";
let mainPrefix = await GestionDb.get(`${botId}.prefix`);
let serverPrefix = await GestionDb.get(`${botId}.${guildId}.prefix`);
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix !== undefined ? mainPrefix : defaultprefix;
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) : {});
});
});
const permissions = data.permissions || {};
const defaultPrefix = "+";
let mainPrefix = data.prefix || defaultPrefix;
let serverPrefix = data.permissions && data.permissions[guildId] && data.permissions[guildId].prefix || mainPrefix;
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix;
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
if (!client.commands.has(commandName)) return;
const command = client.commands.get(commandName)
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (command) {
const permissionLevel = await getPermissionLevel(message.member, client, guildId);
try {
if (permissionLevel === 11) {
if (permissionLevel === 11) {
command.execute(message, args, client);
} else if (permissionLevel >= permissions[command.name]) {
command.execute(message, args, client);