mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-16 15:55:12 +02:00
finish organization event/command & add guild command in folder commands
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
const addCommand = require("../fonctions/addCommand");
|
||||
const { EmbedBuilder } = require("discord.js");
|
||||
const db = require("../db");
|
||||
|
||||
module.exports = addCommand({
|
||||
name: "level",
|
||||
description: "Affiche votre niveau et XP sur ce serveur.",
|
||||
aliases: ["lvl", "xp", "niveau"],
|
||||
permissions: [],
|
||||
botOwnerOnly: false,
|
||||
dm: false,
|
||||
scope: "guild",
|
||||
|
||||
guildCondition: async (guildId) => {
|
||||
return new Promise((resolve) => {
|
||||
db.get(
|
||||
"SELECT enabled FROM levels_config WHERE guild_id = ?",
|
||||
[guildId],
|
||||
(err, row) => {
|
||||
if (err) {
|
||||
console.error(`DB error in guildCondition for guild ${guildId}`, err);
|
||||
return resolve(false);
|
||||
}
|
||||
resolve(!!row?.enabled);
|
||||
}
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
executePrefix: async (client, message, args) => {
|
||||
const guildId = message.guild.id;
|
||||
const userId = message.author.id;
|
||||
|
||||
db.get(
|
||||
`SELECT xp, level FROM user_levels WHERE guild_id = ? AND user_id = ?`,
|
||||
[guildId, userId],
|
||||
async (err, row) => {
|
||||
if (err) {
|
||||
console.error("DB error fetching user level", err);
|
||||
return message.reply("Une erreur est survenue en récupérant votre niveau.");
|
||||
}
|
||||
|
||||
if (!row) {
|
||||
return message.reply("Vous n'avez pas encore de niveau dans ce serveur.");
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle(`${message.author.username} — Niveau`)
|
||||
.setDescription(`Vous êtes au **niveau ${row.level}** avec **${row.xp} XP**.`)
|
||||
.setColor("#00FF00")
|
||||
.setTimestamp()
|
||||
.setFooter({ text: `ID: ${userId}` });
|
||||
|
||||
await message.reply({ embeds: [embed] });
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
executeSlash: async (client, interaction) => {
|
||||
const guildId = interaction.guild.id;
|
||||
const userId = interaction.user.id;
|
||||
|
||||
db.get(
|
||||
`SELECT xp, level FROM user_levels WHERE guild_id = ? AND user_id = ?`,
|
||||
[guildId, userId],
|
||||
async (err, row) => {
|
||||
if (err) {
|
||||
console.error("DB error fetching user level", err);
|
||||
return interaction.reply({ content: "Une erreur est survenue en récupérant votre niveau.", ephemeral: true });
|
||||
}
|
||||
|
||||
if (!row) {
|
||||
return interaction.reply({ content: "Vous n'avez pas encore de niveau dans ce serveur.", ephemeral: true });
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle(`${interaction.user.username} — Niveau`)
|
||||
.setDescription(`Vous êtes au **niveau ${row.level}** avec **${row.xp} XP**.`)
|
||||
.setColor("#00FF00")
|
||||
.setTimestamp()
|
||||
.setFooter({ text: `ID: ${userId}` });
|
||||
|
||||
await interaction.reply({ embeds: [embed] });
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
slashData: new (require("discord.js").SlashCommandBuilder)()
|
||||
.setName("level")
|
||||
.setDescription("Affiche votre niveau et XP sur ce serveur."),
|
||||
});
|
||||
@@ -0,0 +1,101 @@
|
||||
const addCommand = require("../fonctions/addCommand");
|
||||
const { EmbedBuilder, SlashCommandBuilder } = require("discord.js");
|
||||
const db = require("../db");
|
||||
|
||||
module.exports = addCommand({
|
||||
name: "leveltop",
|
||||
description: "Affiche le top 10 des niveaux du serveur.",
|
||||
aliases: ["toplevel", "topxp", "leaderboard"],
|
||||
permissions: [],
|
||||
botOwnerOnly: false,
|
||||
dm: false,
|
||||
scope: "guild",
|
||||
|
||||
guildCondition: async (guildId) => {
|
||||
return new Promise((resolve) => {
|
||||
db.get(
|
||||
"SELECT enabled FROM levels_config WHERE guild_id = ?",
|
||||
[guildId],
|
||||
(err, row) => {
|
||||
if (err) {
|
||||
console.error(`DB error in guildCondition for guild ${guildId}`, err);
|
||||
return resolve(false);
|
||||
}
|
||||
resolve(!!row?.enabled);
|
||||
}
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
executePrefix: async (client, message, args) => {
|
||||
const guildId = message.guild.id;
|
||||
|
||||
db.all(
|
||||
`SELECT user_id, xp, level FROM user_levels WHERE guild_id = ? ORDER BY level DESC, xp DESC LIMIT 10`,
|
||||
[guildId],
|
||||
async (err, rows) => {
|
||||
if (err) {
|
||||
console.error("DB error fetching level top", err);
|
||||
return message.reply("Une erreur est survenue en récupérant le classement des niveaux.");
|
||||
}
|
||||
|
||||
if (rows.length === 0) {
|
||||
return message.reply("Aucun utilisateur n'a encore de niveau dans ce serveur.");
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("🏆 Top 10 des niveaux")
|
||||
.setColor("#FFD700")
|
||||
.setTimestamp()
|
||||
.setDescription(
|
||||
rows
|
||||
.map(
|
||||
(row, index) =>
|
||||
`**${index + 1}.** <@${row.user_id}> - Niveau **${row.level}** (${row.xp} XP)`
|
||||
)
|
||||
.join("\n")
|
||||
);
|
||||
|
||||
await message.reply({ embeds: [embed] });
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
executeSlash: async (client, interaction) => {
|
||||
const guildId = interaction.guild.id;
|
||||
|
||||
db.all(
|
||||
`SELECT user_id, xp, level FROM user_levels WHERE guild_id = ? ORDER BY level DESC, xp DESC LIMIT 10`,
|
||||
[guildId],
|
||||
async (err, rows) => {
|
||||
if (err) {
|
||||
console.error("DB error fetching level top", err);
|
||||
return interaction.reply({ content: "Une erreur est survenue en récupérant le classement des niveaux.", ephemeral: true });
|
||||
}
|
||||
|
||||
if (rows.length === 0) {
|
||||
return interaction.reply({ content: "Aucun utilisateur n'a encore de niveau dans ce serveur.", ephemeral: true });
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("🏆 Top 10 des niveaux")
|
||||
.setColor("#FFD700")
|
||||
.setTimestamp()
|
||||
.setDescription(
|
||||
rows
|
||||
.map(
|
||||
(row, index) =>
|
||||
`**${index + 1}.** <@${row.user_id}> - Niveau **${row.level}** (${row.xp} XP)`
|
||||
)
|
||||
.join("\n")
|
||||
);
|
||||
|
||||
await interaction.reply({ embeds: [embed] });
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
slashData: new SlashCommandBuilder()
|
||||
.setName("leveltop")
|
||||
.setDescription("Affiche le top 10 des niveaux du serveur."),
|
||||
});
|
||||
+65
-125
@@ -7,14 +7,26 @@ const {
|
||||
EmbedBuilder,
|
||||
} = require("discord.js");
|
||||
|
||||
module.exports = addCommand(
|
||||
(this.name = "ping"),
|
||||
(this.description = "Cette commande permet de vérifier la latence du bot."),
|
||||
(this.aliases = ["latency", "lag", "responseTime"]),
|
||||
(this.permissions = []),
|
||||
(this.botOwnerOnly = false),
|
||||
(this.dm = true),
|
||||
(this.executePrefix = async (client, message, args) => {
|
||||
module.exports = addCommand({
|
||||
name: "ping",
|
||||
description: "Cette commande permet de vérifier la latence du bot.",
|
||||
aliases: ["latency", "lag", "responseTime"],
|
||||
permissions: [],
|
||||
botOwnerOnly: false,
|
||||
dm: true,
|
||||
scope: "global",
|
||||
|
||||
slashOptions: [
|
||||
{
|
||||
type: "BOOLEAN",
|
||||
name: "actualiser",
|
||||
description:
|
||||
"Actualiser automatiquement la latence du bot toutes les 10 secondes pendant 2 minutes.",
|
||||
required: false,
|
||||
},
|
||||
],
|
||||
|
||||
executePrefix: async (client, message, args) => {
|
||||
const pingBtn = new ButtonBuilder()
|
||||
.setCustomId("pingBtn")
|
||||
.setLabel("🔄")
|
||||
@@ -22,61 +34,35 @@ module.exports = addCommand(
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(pingBtn);
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${message.author.tag}`,
|
||||
iconURL: message.author.displayAvatarURL(),
|
||||
});
|
||||
|
||||
const sendMessage = await message.reply({
|
||||
embeds: [embed],
|
||||
components: [row],
|
||||
});
|
||||
|
||||
const filter = (i) => i.customId === "pingBtn";
|
||||
const collector = sendMessage.createMessageComponentCollector({
|
||||
filter,
|
||||
time: 120000,
|
||||
});
|
||||
collector.on("collect", async (i) => {
|
||||
if (i.user.id !== message.author.id)
|
||||
return i.reply({
|
||||
content: "Vous n'êtes pas l'auteur du message.",
|
||||
ephemeral: true,
|
||||
});
|
||||
const embed = new EmbedBuilder()
|
||||
const embed = (user) =>
|
||||
new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${message.author.tag}`,
|
||||
iconURL: message.author.displayAvatarURL(),
|
||||
});
|
||||
.setFooter({ text: `Demandé par ${user.tag}`, iconURL: user.displayAvatarURL() });
|
||||
|
||||
sendMessage.edit({ embeds: [embed], components: [row] });
|
||||
i.reply({ content: "La latence a été rafraichie.", ephemeral: true });
|
||||
const sendMessage = await message.reply({ embeds: [embed(message.author)], components: [row] });
|
||||
|
||||
const filter = (i) => i.customId === "pingBtn";
|
||||
const collector = sendMessage.createMessageComponentCollector({ filter, time: 120_000 });
|
||||
|
||||
collector.on("collect", async (i) => {
|
||||
if (i.user.id !== message.author.id)
|
||||
return i.reply({ content: "Vous n'êtes pas l'auteur du message.", ephemeral: true });
|
||||
|
||||
await sendMessage.edit({ embeds: [embed(i.user)], components: [row] });
|
||||
await i.reply({ content: "La latence a été rafraichie.", ephemeral: true });
|
||||
});
|
||||
|
||||
collector.on("end", async () => {
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${message.author.tag}`,
|
||||
iconURL: message.author.displayAvatarURL(),
|
||||
});
|
||||
|
||||
sendMessage.edit({ embeds: [embed], components: [] });
|
||||
await sendMessage.edit({ embeds: [embed(message.author)], components: [] });
|
||||
});
|
||||
}),
|
||||
(this.executeSlash = async (client, interaction) => {
|
||||
},
|
||||
|
||||
executeSlash: async (client, interaction) => {
|
||||
const actualiser = interaction.options.getBoolean("actualiser") ?? false;
|
||||
|
||||
const pingBtn = new ButtonBuilder()
|
||||
.setCustomId("pingBtn")
|
||||
.setLabel("🔄")
|
||||
@@ -84,87 +70,41 @@ module.exports = addCommand(
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(pingBtn);
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${interaction.user.tag}`,
|
||||
iconURL: interaction.user.displayAvatarURL(),
|
||||
});
|
||||
const embed = (user) =>
|
||||
new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({ text: `Demandé par ${user.tag}`, iconURL: user.displayAvatarURL() });
|
||||
|
||||
if (interaction.options.getBoolean("actualiser") === false) {
|
||||
const sendMessage = await interaction.reply({
|
||||
embeds: [embed],
|
||||
components: [row],
|
||||
});
|
||||
const sendMessage = await interaction.reply({
|
||||
embeds: [embed(interaction.user)],
|
||||
components: actualiser ? [] : [row],
|
||||
fetchReply: true,
|
||||
});
|
||||
|
||||
if (!actualiser) {
|
||||
const filter = (i) => i.customId === "pingBtn";
|
||||
const collector = sendMessage.createMessageComponentCollector({
|
||||
filter,
|
||||
time: 120000,
|
||||
});
|
||||
const collector = sendMessage.createMessageComponentCollector({ filter, time: 120_000 });
|
||||
|
||||
collector.on("collect", async (i) => {
|
||||
if (i.user.id !== interaction.user.id)
|
||||
return i.reply({
|
||||
content: "Vous n'êtes pas l'auteur du message.",
|
||||
ephemeral: true,
|
||||
});
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${interaction.user.tag}`,
|
||||
iconURL: interaction.user.displayAvatarURL(),
|
||||
});
|
||||
return i.reply({ content: "Vous n'êtes pas l'auteur du message.", ephemeral: true });
|
||||
|
||||
sendMessage.edit({ embeds: [embed], components: [row] });
|
||||
i.reply({ content: "La latence a été rafraichie.", ephemeral: true });
|
||||
await sendMessage.edit({ embeds: [embed(i.user)], components: [row] });
|
||||
await i.reply({ content: "La latence a été rafraichie.", ephemeral: true });
|
||||
});
|
||||
|
||||
collector.on("end", async () => {
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${interaction.user.tag}`,
|
||||
iconURL: interaction.user.displayAvatarURL(),
|
||||
});
|
||||
|
||||
sendMessage.edit({ embeds: [embed], components: [] });
|
||||
await sendMessage.edit({ embeds: [embed(interaction.user)], components: [] });
|
||||
});
|
||||
} else {
|
||||
const sendMessage = await interaction.reply({ embeds: [embed] });
|
||||
const interval = setInterval(async () => {
|
||||
await sendMessage.edit({ embeds: [embed(interaction.user)] });
|
||||
}, 10_000);
|
||||
|
||||
const interval = setInterval(() => {
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Pong !")
|
||||
.setDescription(`La latence du bot est de \`${client.ws.ping}\`ms.`)
|
||||
.setColor("#0099FF")
|
||||
.setTimestamp()
|
||||
.setFooter({
|
||||
text: `Demandé par ${interaction.user.tag}`,
|
||||
iconURL: interaction.user.displayAvatarURL(),
|
||||
});
|
||||
|
||||
sendMessage.edit({ embeds: [embed] });
|
||||
}, 10000);
|
||||
setTimeout(() => {
|
||||
clearInterval(interval);
|
||||
}, 120000);
|
||||
setTimeout(() => clearInterval(interval), 120_000);
|
||||
}
|
||||
}),
|
||||
(this.slashOptions = new SlashCommandBuilder().addBooleanOption((option) =>
|
||||
option
|
||||
.setName("actualiser")
|
||||
.setDescription(
|
||||
"Actualiser automatiquement la latence du bot toute les 10 secondes pandant 2 minutes.",
|
||||
)
|
||||
.setRequired(false),
|
||||
)),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user