diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml index 28d6b41..3eae685 100644 --- a/.github/workflows/super-linter.yml +++ b/.github/workflows/super-linter.yml @@ -1,29 +1,42 @@ -# This workflow executes several linters on changed files based on languages used in your code base whenever -# you push a code or open a pull request. -# -# You can adjust the behavior by modifying this file. -# For more information, see: -# https://github.com/github/super-linter -name: Lint Code Base - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] +--- +name: Lint + +on: # yamllint disable-line rule:truthy + push: null + pull_request: null + +permissions: {} + jobs: - run-lint: + build: + name: Lint runs-on: ubuntu-latest + + permissions: + contents: read + packages: read + # To report GitHub Actions status checks + statuses: write + steps: - name: Checkout code uses: actions/checkout@v4 with: - # Full git history is needed to get a proper list of changed files within `super-linter` + # super-linter needs the full git history to get the + # list of files that changed across commits fetch-depth: 0 - - name: Lint Code Base - uses: github/super-linter@v4 + - name: Super-linter + uses: super-linter/super-linter@v7.3.0 # x-release-please-version env: - VALIDATE_ALL_CODEBASE: false - DEFAULT_BRANCH: "master" + # To report GitHub Actions status checks GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_YAML: false + VALIDATE_YAML_PRETTIER: false + VALIDATE_MARKDOWN_PRETTIER: false + VALIDATE_JSON_PRETTIER: false + VALIDATE_JSCPD: false + VALIDATE_JAVASCRIPT_PRETTIER: false + VALIDATE_JAVASCRIPT_STANDARD: false + + diff --git a/README.md b/README.md index c8fd063..91ca08a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Bienvenue sur **Mr_BOT**, un bot Discord complet et créé de toutes pièces, prêt à être utilisé et modifié selon vos besoins ! Ce projet est actuellement actif et utilise plusieurs API gratuites pour offrir une variété de fonctionnalités à votre serveur Discord. +[![Lint](https://github.com/Ludo-code/Mr_BOT/actions/workflows/super-linter.yml/badge.svg)](https://github.com/Ludo-code/Mr_BOT/actions/workflows/super-linter.yml) + ## Fonctionnalités principales - Intégration avec l'API Tenor pour la gestion de GIFs. diff --git a/changelogs.js b/changelogs.js index b3bc3e2..4acf214 100644 --- a/changelogs.js +++ b/changelogs.js @@ -1,8 +1,8 @@ export default [ - "Nouveauté des mises à jour : \n\n- le 08/09/2023 Reprise du développement, suppression des vieilles commandes abandon de Sheweny et Discord-Akairo.", - "Nouveauté des mises à jour : \n\n- le 12/09/2023 Ajout de commande NSFW supplémentaire.", - "Nouveauté des mises à jour : \n\n- le 26/09/2023 Correction de divers bugs dont 1 critique.", - "Nouveauté des mises à jour : \n\n- le 21/10/2024 Correction de divers bugs, Uniformisation des quotes", - "Nouveauté des mises à jour : \n\n- le 20/11/2024 Nouvelles aides", + 'Nouveauté des mises à jour : \n\n- le 08/09/2023 Reprise du développement, suppression des vieilles commandes abandon de Sheweny et Discord-Akairo.', + 'Nouveauté des mises à jour : \n\n- le 12/09/2023 Ajout de commande NSFW supplémentaire.', + 'Nouveauté des mises à jour : \n\n- le 26/09/2023 Correction de divers bugs dont 1 critique.', + 'Nouveauté des mises à jour : \n\n- le 21/10/2024 Correction de divers bugs, Uniformisation des quotes', + 'Nouveauté des mises à jour : \n\n- le 20/11/2024 Nouvelles aides' -]; \ No newline at end of file +] diff --git a/commands/admin/clear.js b/commands/admin/clear.js index 5cc5d33..157725b 100644 --- a/commands/admin/clear.js +++ b/commands/admin/clear.js @@ -1,33 +1,33 @@ -import { PermissionsBitField } from "discord.js"; +import { PermissionsBitField } from 'discord.js' export const command = { - name: "efface", - aliases: ["delete", "erase", "effacer", "éffacer", "clear"], - description: "Supprime un certain nombre de messages !", - usage: "", - args: true, - staffOnly: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageMessages], - async execute(message, args) { - const amount = parseInt(args[0]) + 1; + name: 'efface', + aliases: ['delete', 'erase', 'effacer', 'éffacer', 'clear'], + description: 'Supprime un certain nombre de messages !', + usage: '', + args: true, + staffOnly: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageMessages], + async execute (message, args) { + const amount = parseInt(args[0]) + 1 - if (isNaN(amount)) { - return message.reply("La valeur mise ne ressemble pas à un nombre."); - } else if (amount < 1 || amount > 100) { - return message.reply("Vous avez besoin d\'entrer un nombre entre 1 et 100. Si vous souhaitez supprimer tout les messages `efface_complet` permet de le faire."); - } + if (isNaN(amount)) { + return message.reply('La valeur mise ne ressemble pas à un nombre.') + } else if (amount < 1 || amount > 100) { + return message.reply("Vous avez besoin d'entrer un nombre entre 1 et 100. Si vous souhaitez supprimer tout les messages `efface_complet` permet de le faire.") + } - try { - await message.channel.bulkDelete(amount); + try { + await message.channel.bulkDelete(amount) - message.channel.send(`Supression de ${amount - 1} messages. Demandé par ${message.author.username}`) - .then(msg => { - setTimeout(() => msg.delete(), 2000) - }) - .catch(err => message.channel.send(err)); - } catch (error) { - console.error(error); - message.channel.send(`Impossible de supprimer les messages ! Utiliser \`efface_complet\` à la place si vous souhaitez suprrimer tout les messages.\n\`Erreur : ${error.message}\``); - } - }, -}; + message.channel.send(`Supression de ${amount - 1} messages. Demandé par ${message.author.username}`) + .then(msg => { + setTimeout(() => msg.delete(), 2000) + }) + .catch(err => message.channel.send(err)) + } catch (error) { + console.error(error) + message.channel.send(`Impossible de supprimer les messages ! Utiliser \`efface_complet\` à la place si vous souhaitez suprrimer tout les messages.\n\`Erreur : ${error.message}\``) + } + } +} diff --git a/commands/admin/delete_complete.js b/commands/admin/delete_complete.js index 8a2fa0e..50bba17 100644 --- a/commands/admin/delete_complete.js +++ b/commands/admin/delete_complete.js @@ -1,23 +1,23 @@ -import { PermissionsBitField } from "discord.js"; +import { PermissionsBitField } from 'discord.js' export const command = { - name: "efface_complet", - aliases: ["erase_complete", "clear_complete", "clear_complete"], - description: "Supprime la totalité des messages du salon.", - staffOnly: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageChannels], - async execute(message, args) { - try { - await message.channel.send(`Le salon va être supprimé dans `); - setTimeout(async () => { - let clonedChannel = await message.channel.clone(); - const originalPosition = message.channel.position; - await message.channel.delete().catch(() => null); - await clonedChannel.setPosition(originalPosition); - }, 15000); - } catch (error) { - console.error(error); - await message.channel.send(`Impossible de faire focntionner cette commande. \`Erreur : ${error.message}\``); - } - }, -}; + name: 'efface_complet', + aliases: ['erase_complete', 'clear_complete', 'clear_complete'], + description: 'Supprime la totalité des messages du salon.', + staffOnly: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageChannels], + async execute (message) { + try { + await message.channel.send(`Le salon va être supprimé dans `) + setTimeout(async () => { + const clonedChannel = await message.channel.clone() + const originalPosition = message.channel.position + await message.channel.delete().catch(() => null) + await clonedChannel.setPosition(originalPosition) + }, 15000) + } catch (error) { + console.error(error) + await message.channel.send(`Impossible de faire focntionner cette commande. \`Erreur : ${error.message}\``) + } + } +} diff --git a/commands/admin/nsfw.js b/commands/admin/nsfw.js index e815213..ed5c51a 100644 --- a/commands/admin/nsfw.js +++ b/commands/admin/nsfw.js @@ -1,28 +1,27 @@ -import { PermissionsBitField } from "discord.js"; -import { Guild } from "../../schema/schema.js"; +import { PermissionsBitField } from 'discord.js' +import { Guild } from '../../schema/schema.js' export const command = { - name: "nsfw", - description: "Active/Désactive les commande NSFW sur un serveur !", - args: true, - usage: "", - staffOnly: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { + name: 'nsfw', + description: 'Active/Désactive les commande NSFW sur un serveur !', + args: true, + usage: '', + staffOnly: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message, args) { + if (!args || !args[0] || !['actif', 'inactif'].includes(args[0]?.toLowerCase())) { + return await message.reply('Merci de dire soit `actif` ou `inactif` dans la commande.') + } - if (!args || !args[0] || !["actif", "inactif"].includes(args[0]?.toLowerCase())) { - return await message.reply(`Merci de dire soit \`actif\` ou \`inactif\` dans la commande.`) - } + const [g] = await Guild.findOrCreate({ + where: { + guildId: message.guild.id + } + }) - let [g] = await Guild.findOrCreate({ - where: { - guildId: message.guild.id, - } - }); + g.nsfwEnabled = args[0].toLowerCase() == 'actif' + await g.save() - g.nsfwEnabled = args[0].toLowerCase() == "actif" ? true : false; - await g.save(); - - await message.reply(`Le NSFW est ${args[0]} sur ce serveur.`); - }, -}; + await message.reply(`Le NSFW est ${args[0]} sur ce serveur.`) + } +} diff --git a/commands/admin/ticket-category.js b/commands/admin/ticket-category.js index 3072be9..61b2980 100644 --- a/commands/admin/ticket-category.js +++ b/commands/admin/ticket-category.js @@ -1,43 +1,42 @@ -import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChannelType, EmbedBuilder, PermissionsBitField } from "discord.js"; -import { Guild } from "../../schema/schema.js"; +import { ChannelType, PermissionsBitField } from 'discord.js' +import { Guild } from '../../schema/schema.js' export const command = { - name: "catégorie-ticket", - aliases: ["categorie-ticket", "ticket-category"], - description: "Permet de définir une catégorie dans laquel les ticket seront créer.", - args: true, - usage: "", - staffOnly: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { + name: 'catégorie-ticket', + aliases: ['categorie-ticket', 'ticket-category'], + description: 'Permet de définir une catégorie dans laquel les ticket seront créer.', + args: true, + usage: '', + staffOnly: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message, args) { + try { + let channel = message.mentions.channels.first() + if (!channel && args[0]) { try { - let channel = message.mentions.channels.first(); - if (!channel && args[0]) { - try { - channel = await message.guild.channels.cache.get(args[0]); - } catch (error) { - console.error(error); - } - } - - if (!channel || channel.type != ChannelType.GuildCategory) { - return await message.reply(`Merci de mentionner le nom de la catégorie ou donner son ID.`); - } + channel = await message.guild.channels.cache.get(args[0]) + } catch (error) { + console.error(error) + } + } - let [g] = await Guild.findOrCreate({ - where: { - guildId: message.guild.id, - } - }); + if (!channel || channel.type != ChannelType.GuildCategory) { + return await message.reply('Merci de mentionner le nom de la catégorie ou donner son ID.') + } - g.ticketCategoryChannelID = channel.id; - await g.save(); + const [g] = await Guild.findOrCreate({ + where: { + guildId: message.guild.id + } + }) - await message.reply(`La catégorie de cration des ticket est maintenant sur ${channel}.`); + g.ticketCategoryChannelID = channel.id + await g.save() - } catch (error) { - console.error(error); - await message.reply(`Impossible de créer la catégorie.`); - } - }, -}; + await message.reply(`La catégorie de cration des ticket est maintenant sur ${channel}.`) + } catch (error) { + console.error(error) + await message.reply('Impossible de créer la catégorie.') + } + } +} diff --git a/commands/admin/ticket-install.js b/commands/admin/ticket-install.js index 77f6aad..d9ee128 100644 --- a/commands/admin/ticket-install.js +++ b/commands/admin/ticket-install.js @@ -1,39 +1,39 @@ -import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChannelType, EmbedBuilder, PermissionsBitField } from "discord.js"; +import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChannelType, EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "ticket-install", - description: "Permet d\'envoyer le message de création de ticket", - staffOnly: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let channel = message.mentions.channels.first() || message.channel; - if (channel.type != ChannelType.GuildText) { - return await message.reply(`Merci de donner le nom d"un salon...`); - } + name: 'ticket-install', + description: "Permet d'envoyer le message de création de ticket", + staffOnly: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + const channel = message.mentions.channels.first() || message.channel + try { + if (channel.type != ChannelType.GuildText) { + return await message.reply('Merci de donner le nom d"un salon...') + } - let embed = new EmbedBuilder() - .setTitle(`Ticket`) - .setDescription(`Cliquez sur le bouton 🎫 pour vous créez un ticket.`); + const embed = new EmbedBuilder() + .setTitle('Ticket') + .setDescription('Cliquez sur le bouton 🎫 pour vous créez un ticket.') - let row = new ActionRowBuilder() - .setComponents( - new ButtonBuilder() - .setCustomId("ticketcreate") - .setEmoji("🎫") - .setLabel("Créer un ticket") - .setStyle(ButtonStyle.Primary) - ); + const row = new ActionRowBuilder() + .setComponents( + new ButtonBuilder() + .setCustomId('ticketcreate') + .setEmoji('🎫') + .setLabel('Créer un ticket') + .setStyle(ButtonStyle.Primary) + ) - await channel.send({ - embeds: [embed], - components: [row], - }); + await channel.send({ + embeds: [embed], + components: [row] + }) - await message.reply(`Le message de création de ticket à été mis avec succès dans ${channel}`); - } catch (error) { - console.error(error); - await message.reply(`Impossible de mettre le message de création de ticket dans ${channel}. Merci de vérifier si le bot à les permissions d"envoyer un message et d"intégrer des liens dans ce salon.`); - } - }, -}; + await message.reply(`Le message de création de ticket à été mis avec succès dans ${channel}`) + } catch (error) { + console.error(error) + await message.reply(`Impossible de mettre le message de création de ticket dans ${channel}. Merci de vérifier si le bot à les permissions d"envoyer un message et d"intégrer des liens dans ce salon.`) + } + } +} diff --git a/commands/general/bug.js b/commands/general/bug.js index 91d9ef7..34c949e 100644 --- a/commands/general/bug.js +++ b/commands/general/bug.js @@ -1,56 +1,56 @@ -import { AttachmentBuilder, Colors, EmbedBuilder, PermissionsBitField } from "discord.js"; -import config from "../../config.js"; -const { ownerId } = config; +import { AttachmentBuilder, Colors, EmbedBuilder, PermissionsBitField } from 'discord.js' +import config from '../../config.js' +const { ownerId } = config export const command = { - name: "bug", - description: "Permet de rapporter un bug. Il est possible de joindre un fichier ou plusieurs.", - usage: "", - args: true, - cooldown: 43200, - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { - if (!args?.length) return; + name: 'bug', + description: 'Permet de rapporter un bug. Il est possible de joindre un fichier ou plusieurs.', + usage: '', + args: true, + cooldown: 43200, + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message, args) { + if (!args?.length) return - let msg = args.join(" "); - let attachments = message.attachments.map(a => { - return new AttachmentBuilder(a.url); - }) - - let owner; - try { - owner = await message.client.users.fetch(ownerId); - } catch (error) { - console.error(error); - } + const msg = args.join(' ') + const attachments = message.attachments.map(a => { + return new AttachmentBuilder(a.url) + }) - if (!owner) return; + let owner + try { + owner = await message.client.users.fetch(ownerId) + } catch (error) { + console.error(error) + } - let embed = new EmbedBuilder() - .setTitle(`Bug report par ${message.author.username}`) - .setDescription(msg) - .addFields( - { - name: "Utilisateur", - value: `> nom ${message.author.username}\n> ID: ${message.author.id}` - } - ) - .setThumbnail(message.author.displayAvatarURL({ - size: 1024, - forceStatic: false, - extension: "png" - })) - .setColor(Colors.DarkPurple) - try { - await owner.send({ - embeds: [embed], - files: attachments, - }); + if (!owner) return - await message.reply("✅ Le rapport de bug à bien été envoyé.") - } catch (error) { - console.error(error); - await message.reply("❌ Impossible d\'envoyer le rapport de bug.") + const embed = new EmbedBuilder() + .setTitle(`Bug report par ${message.author.username}`) + .setDescription(msg) + .addFields( + { + name: 'Utilisateur', + value: `> nom ${message.author.username}\n> ID: ${message.author.id}` } - }, -}; + ) + .setThumbnail(message.author.displayAvatarURL({ + size: 1024, + forceStatic: false, + extension: 'png' + })) + .setColor(Colors.DarkPurple) + try { + await owner.send({ + embeds: [embed], + files: attachments + }) + + await message.reply('✅ Le rapport de bug à bien été envoyé.') + } catch (error) { + console.error(error) + await message.reply("❌ Impossible d'envoyer le rapport de bug.") + } + } +} diff --git a/commands/general/changelog.js b/commands/general/changelog.js index 0879652..6d6e99c 100644 --- a/commands/general/changelog.js +++ b/commands/general/changelog.js @@ -1,13 +1,13 @@ -import { PermissionsBitField } from "discord.js"; -import changelogs from "../../changelogs.js"; +import { PermissionsBitField } from 'discord.js' +import changelogs from '../../changelogs.js' export const command = { - name: "changelog", - description: "Permet d\'afficher le journal des changements", - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { - if (!changelogs?.length) return await message.reply("Il n'y a pas de changelog pour le moment"); - let text = changelogs.map(c => `\`\`\`\n${c}\n\`\`\``).join("\n"); - await message.reply(`# Changelogs\n${text}`); - }, -}; + name: 'changelog', + description: "Permet d'afficher le journal des changements", + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message) { + if (!changelogs?.length) return await message.reply("Il n'y a pas de changelog pour le moment") + const text = changelogs.map(c => `\`\`\`\n${c}\n\`\`\``).join('\n') + await message.reply(`# Changelogs\n${text}`) + } +} diff --git a/commands/general/close-ticket.js b/commands/general/close-ticket.js index 476fee0..3a7fc70 100644 --- a/commands/general/close-ticket.js +++ b/commands/general/close-ticket.js @@ -1,27 +1,27 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import { Ticket } from "../../schema/schema.js"; +import { PermissionsBitField } from 'discord.js' +import { Ticket } from '../../schema/schema.js' export const command = { - name: "fermer", - aliases: ["fermeture"], - description: "Permet de fermer le ticket.", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageChannels], - async execute(message, args) { - let t = await Ticket.findOne({ - where: { - channelId: message.channel.id, - guildId: message.guild.id, - } - }); + name: 'fermer', + aliases: ['fermeture'], + description: 'Permet de fermer le ticket.', + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ManageChannels], + async execute (message) { + const t = await Ticket.findOne({ + where: { + channelId: message.channel.id, + guildId: message.guild.id + } + }) - if (!t || (message.author.id != t.toJSON()?.userId && !message.member.permissions.has(PermissionsBitField.Flags.Administrator))) { - return await message.reply(`Désolé! Ceci n"est pas votre canal de ticket. Veuillez exécuter cette commande dans votre canal de ticket pour fermer le ticket.`); - } + if (!t || (message.author.id != t.toJSON()?.userId && !message.member.permissions.has(PermissionsBitField.Flags.Administrator))) { + return await message.reply('Désolé! Ceci n"est pas votre canal de ticket. Veuillez exécuter cette commande dans votre canal de ticket pour fermer le ticket.') + } - if (t) await t.destroy().catch(e => console.log(e)); - await message.reply(`Fermeture du ticket et supression du salon `) - setTimeout(async () => { - await message.channel.delete(); - }, 10 * 1000); - }, -}; + if (t) await t.destroy().catch(e => console.log(e)) + await message.reply(`Fermeture du ticket et supression du salon `) + setTimeout(async () => { + await message.channel.delete() + }, 10 * 1000) + } +} diff --git a/commands/general/help-nsfw.js b/commands/general/help-nsfw.js index 43ebc1e..c77948e 100644 --- a/commands/general/help-nsfw.js +++ b/commands/general/help-nsfw.js @@ -1,146 +1,149 @@ -import { Colors, EmbedBuilder, PermissionsBitField, ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"; -import config from "../../config.js"; +import { Colors, EmbedBuilder, PermissionsBitField, ActionRowBuilder, ButtonBuilder, ButtonStyle } from 'discord.js' +import config from '../../config.js' -const { prefix } = config; +const { prefix } = config export const command = { - name: "aide_nsfw", - aliases: ["aide-nsfw", "help-nsfw"], - description: "Affiche l\'aide des commandes nsfw.", - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let commandName = args[0]; - const cmd = message.client.commands.get(commandName) || - message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); - - if (cmd) { - if (!cmd.nsfw) { - return await message.reply(`Merci d"utiliser **${prefix}aide** pour les commandes non nsfw.`) - } - - let descText = cmd.description ? cmd.description : ""; - descText += ( - `\n\n**Nsfw : ** ${cmd.nsfw ? `\`actif\`` : `\`inactif\``}` - + `\n**Argument(s) requis : ** ${cmd.args ? `\`actif\`` : `\`inactif\``}\n` - ); - - let cmdembed = new EmbedBuilder() - .setTitle(cmd.name) - .setDescription(descText) - .setColor("Random"); - - if (cmd.usage) cmdembed.addFields({ - name: "Utilisation", - value: `\`${prefix}${cmd.name} ${cmd.usage}\`` - }); - if (cmd.aliases?.length) cmdembed.addFields({ - name: `Alias`, - value: `\`${cmd.aliases.join("`, `")}\`` - }); - - return await message.reply({ embeds: [cmdembed] }); - } else { - let commands = message.client.commands.map(c => c).filter(c => c.nsfw && typeof c.name == "string").sort((a, b) => a.name.localeCompare(b.name)); - let chunkSize = 10; - let embeds = []; - - for (let i = 0; i < commands.length; i += chunkSize) { - const chunk = commands.slice(i, i + chunkSize); - let txt = chunk.map(c => `» ${c.name} ‣ ${c.description}`).join("\n"); - let embed = new EmbedBuilder() - .setTitle("Commandes") - .setDescription(txt) - .setColor(Colors.Blue) - .setFooter({ - text: `Page: ${embeds.length + 1}/${Math.ceil(commands.length / chunkSize)}`, - }); - - embeds.push(embed); - } - - let currentPage = 0; - - const replyMessage = await message.reply({ - embeds: [embeds[currentPage]], - components: [ - new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId("first") - .setLabel("⏮️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId("prev") - .setLabel("◀️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId("next") - .setLabel("▶️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1), - new ButtonBuilder() - .setCustomId("last") - .setLabel("⏭️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1) - ) - ], - }); - - const filter = (interaction) => interaction.user.id === message.author.id; - - const collector = replyMessage.createMessageComponentCollector({ filter, time: 60000 }); - - collector.on("collect", async (interaction) => { - if (interaction.customId === "prev") { - currentPage--; - } else if (interaction.customId === "next") { - currentPage++; - } else if (interaction.customId === "first") { - currentPage = 0; - } else if (interaction.customId === "last") { - currentPage = embeds.length - 1; - } - - await interaction.update({ - embeds: [embeds[currentPage]], - components: [ - new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId("first") - .setLabel("⏮️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId("prev") - .setLabel("◀️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId("next") - .setLabel("▶️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1), - new ButtonBuilder() - .setCustomId("last") - .setLabel("⏭️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1) - ) - ], - }); - }); - - collector.on("end", async () => { - await replyMessage.edit({ components: [] }); - }); - } - - } catch (e) { - console.error(e); + name: 'aide_nsfw', + aliases: ['aide-nsfw', 'help-nsfw'], + description: "Affiche l'aide des commandes nsfw.", + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message, args) { + try { + const commandName = args[0] + const cmd = message.client.commands.get(commandName) || + message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)) + + if (cmd) { + if (!cmd.nsfw) { + return await message.reply(`Merci d"utiliser **${prefix}aide** pour les commandes non nsfw.`) } - }, -}; + + let descText = cmd.description ? cmd.description : '' + descText += ( + `\n\n**Nsfw : ** ${cmd.nsfw ? '`actif`' : '`inactif`'}` + + `\n**Argument(s) requis : ** ${cmd.args ? '`actif`' : '`inactif`'}\n` + ) + + const cmdembed = new EmbedBuilder() + .setTitle(cmd.name) + .setDescription(descText) + .setColor('Random') + + if (cmd.usage) { + cmdembed.addFields({ + name: 'Utilisation', + value: `\`${prefix}${cmd.name} ${cmd.usage}\`` + }) + } + if (cmd.aliases?.length) { + cmdembed.addFields({ + name: 'Alias', + value: `\`${cmd.aliases.join('`, `')}\`` + }) + } + + return await message.reply({ embeds: [cmdembed] }) + } else { + const commands = message.client.commands.map(c => c).filter(c => c.nsfw && typeof c.name === 'string').sort((a, b) => a.name.localeCompare(b.name)) + const chunkSize = 10 + const embeds = [] + + for (let i = 0; i < commands.length; i += chunkSize) { + const chunk = commands.slice(i, i + chunkSize) + const txt = chunk.map(c => `» ${c.name} ‣ ${c.description}`).join('\n') + const embed = new EmbedBuilder() + .setTitle('Commandes') + .setDescription(txt) + .setColor(Colors.Blue) + .setFooter({ + text: `Page: ${embeds.length + 1}/${Math.ceil(commands.length / chunkSize)}` + }) + + embeds.push(embed) + } + + let currentPage = 0 + + const replyMessage = await message.reply({ + embeds: [embeds[currentPage]], + components: [ + new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId('first') + .setLabel('⏮️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId('prev') + .setLabel('◀️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId('next') + .setLabel('▶️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1), + new ButtonBuilder() + .setCustomId('last') + .setLabel('⏭️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1) + ) + ] + }) + + const filter = (interaction) => interaction.user.id === message.author.id + + const collector = replyMessage.createMessageComponentCollector({ filter, time: 60000 }) + + collector.on('collect', async (interaction) => { + if (interaction.customId === 'prev') { + currentPage-- + } else if (interaction.customId === 'next') { + currentPage++ + } else if (interaction.customId === 'first') { + currentPage = 0 + } else if (interaction.customId === 'last') { + currentPage = embeds.length - 1 + } + + await interaction.update({ + embeds: [embeds[currentPage]], + components: [ + new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId('first') + .setLabel('⏮️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId('prev') + .setLabel('◀️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId('next') + .setLabel('▶️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1), + new ButtonBuilder() + .setCustomId('last') + .setLabel('⏭️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1) + ) + ] + }) + }) + + collector.on('end', async () => { + await replyMessage.edit({ components: [] }) + }) + } + } catch (e) { + console.error(e) + } + } +} diff --git a/commands/general/help.js b/commands/general/help.js index f375b43..0273611 100644 --- a/commands/general/help.js +++ b/commands/general/help.js @@ -1,94 +1,98 @@ -import { Colors, EmbedBuilder, PermissionsBitField, ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"; -import config from "../../config.js"; +import { Colors, EmbedBuilder, PermissionsBitField, ActionRowBuilder, ButtonBuilder, ButtonStyle } from 'discord.js' +import config from '../../config.js' -const { prefix } = config; +const { prefix } = config export const command = { - name: "aide", - aliases: ["help"], - description: "Affiche la liste de toutes les commandes", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let commandName = args[0]; - const cmd = message.client.commands.get(commandName) || - message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); + name: 'aide', + aliases: ['help'], + description: 'Affiche la liste de toutes les commandes', + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message, args) { + try { + const commandName = args[0] + const cmd = message.client.commands.get(commandName) || + message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)) - if (cmd) { - if (cmd.nsfw) { - return await message.reply(`Merci d'utiliser **${prefix}aide-nsfw** pour obtenir la liste des commandes nsfw.`); - } + if (cmd) { + if (cmd.nsfw) { + return await message.reply(`Merci d'utiliser **${prefix}aide-nsfw** pour obtenir la liste des commandes nsfw.`) + } - let descText = cmd.description ? cmd.description : ""; - descText += ( - `\n\n**Nsfw : ** ${cmd.nsfw ? `\`actif\`` : `\`inactif\``}` - + `\n**Argument(s) requis : ** ${cmd.args ? `\`actif\`` : `\`inactif\``}\n` - ); + let descText = cmd.description ? cmd.description : '' + descText += ( + `\n\n**Nsfw : ** ${cmd.nsfw ? '`actif`' : '`inactif`'}` + + `\n**Argument(s) requis : ** ${cmd.args ? '`actif`' : '`inactif`'}\n` + ) - let cmdembed = new EmbedBuilder() - .setTitle(cmd.name) - .setDescription(descText) - .setColor("Random"); + const cmdembed = new EmbedBuilder() + .setTitle(cmd.name) + .setDescription(descText) + .setColor('Random') - if (cmd.usage) cmdembed.addFields({ - name: "Utilisation", - value: `\`${prefix}${cmd.name} ${cmd.usage}\`` - }); - if (cmd.aliases?.length) cmdembed.addFields({ - name: `Alias`, - value: `\`${cmd.aliases.join("`, `")}\`` - }); + if (cmd.usage) { + cmdembed.addFields({ + name: 'Utilisation', + value: `\`${prefix}${cmd.name} ${cmd.usage}\`` + }) + } + if (cmd.aliases?.length) { + cmdembed.addFields({ + name: 'Alias', + value: `\`${cmd.aliases.join('`, `')}\`` + }) + } - return await message.reply({ embeds: [cmdembed] }); - } else { - let commands = message.client.commands.map(c => c).filter(c => !c.nsfw && typeof c.name === "string").sort((a, b) => a.name.localeCompare(b.name)); - const chunkSize = 10; - const embeds = []; + return await message.reply({ embeds: [cmdembed] }) + } else { + const commands = message.client.commands.map(c => c).filter(c => !c.nsfw && typeof c.name === 'string').sort((a, b) => a.name.localeCompare(b.name)) + const chunkSize = 10 + const embeds = [] - for (let i = 0; i < commands.length; i += chunkSize) { - const chunk = commands.slice(i, i + chunkSize); - const txt = chunk.map(c => `» ${c.name} ‣ ${c.description}`).join("\n"); - const embed = new EmbedBuilder() - .setTitle("Commandes") - .setDescription(txt) - .setColor(Colors.Blue) - .setFooter({ text: `Page: ${embeds.length + 1}/${Math.ceil(commands.length / chunkSize)}` }); + for (let i = 0; i < commands.length; i += chunkSize) { + const chunk = commands.slice(i, i + chunkSize) + const txt = chunk.map(c => `» ${c.name} ‣ ${c.description}`).join('\n') + const embed = new EmbedBuilder() + .setTitle('Commandes') + .setDescription(txt) + .setColor(Colors.Blue) + .setFooter({ text: `Page: ${embeds.length + 1}/${Math.ceil(commands.length / chunkSize)}` }) - embeds.push(embed); - } + embeds.push(embed) + } - const currentPage = 0; + const currentPage = 0 - const row = new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId(`aide_first_${currentPage}_${embeds.length}`) - .setLabel("⏮️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId(`aide_prev_${currentPage}_${embeds.length}`) - .setLabel("◀️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId(`aide_next_${currentPage}_${embeds.length}`) - .setLabel("▶️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1), - new ButtonBuilder() - .setCustomId(`aide_last_${currentPage}_${embeds.length}`) - .setLabel("⏭️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === embeds.length - 1) - ); + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId(`aide_first_${currentPage}_${embeds.length}`) + .setLabel('⏮️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId(`aide_prev_${currentPage}_${embeds.length}`) + .setLabel('◀️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId(`aide_next_${currentPage}_${embeds.length}`) + .setLabel('▶️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1), + new ButtonBuilder() + .setCustomId(`aide_last_${currentPage}_${embeds.length}`) + .setLabel('⏭️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === embeds.length - 1) + ) - await message.reply({ - embeds: [embeds[currentPage]], - components: [row], - }); - } - } catch (e) { - console.error(e); - } - }, -}; + await message.reply({ + embeds: [embeds[currentPage]], + components: [row] + }) + } + } catch (e) { + console.error(e) + } + } +} diff --git a/commands/general/idea.js b/commands/general/idea.js index 1332c76..d0d32ce 100644 --- a/commands/general/idea.js +++ b/commands/general/idea.js @@ -1,57 +1,57 @@ -import { AttachmentBuilder, Colors, EmbedBuilder, PermissionsBitField } from "discord.js"; -import config from "../../config.js"; -const { ownerId } = config; +import { AttachmentBuilder, Colors, EmbedBuilder, PermissionsBitField } from 'discord.js' +import config from '../../config.js' +const { ownerId } = config export const command = { - name: "idee", - aliases: ["idée"], - description: "Permet de rapporter une idée. Il est possible de joindre un fichier ou plusieurs.", - usage: "", - args: true, - cooldown: 43200, - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { - if (!args?.length) return; + name: 'idee', + aliases: ['idée'], + description: 'Permet de rapporter une idée. Il est possible de joindre un fichier ou plusieurs.', + usage: '', + args: true, + cooldown: 43200, + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message, args) { + if (!args?.length) return - let msg = args.join(" "); - let attachments = message.attachments.map(a => { - return new AttachmentBuilder(a.url); - }) + const msg = args.join(' ') + const attachments = message.attachments.map(a => { + return new AttachmentBuilder(a.url) + }) - let owner; - try { - owner = await message.client.users.fetch(ownerId); - } catch (error) { - console.error(error); - } - - if (!owner) return; + let owner + try { + owner = await message.client.users.fetch(ownerId) + } catch (error) { + console.error(error) + } - let embed = new EmbedBuilder() - .setTitle(`Idée de ${message.author.username}`) - .setDescription(msg) - .addFields( - { - name: "Utilisateur", - value: `> nom : ${message.author.username}\n> ID: ${message.author.id}` - } - ) - .setThumbnail(message.author.displayAvatarURL({ - size: 1024, - forceStatic: false, - extension: "png" - })) - .setColor(Colors.Yellow) - try { - await owner.send({ - embeds: [embed], - files: attachments, - }); + if (!owner) return - await message.reply("✅ L\'idée à bien été envoyé.") - } catch (error) { - console.error(error); - await message.reply("❌ Impossible d\'envoyer l\'idée.") + const embed = new EmbedBuilder() + .setTitle(`Idée de ${message.author.username}`) + .setDescription(msg) + .addFields( + { + name: 'Utilisateur', + value: `> nom : ${message.author.username}\n> ID: ${message.author.id}` } - }, -}; + ) + .setThumbnail(message.author.displayAvatarURL({ + size: 1024, + forceStatic: false, + extension: 'png' + })) + .setColor(Colors.Yellow) + try { + await owner.send({ + embeds: [embed], + files: attachments + }) + + await message.reply("✅ L'idée à bien été envoyé.") + } catch (error) { + console.error(error) + await message.reply("❌ Impossible d'envoyer l'idée.") + } + } +} diff --git a/commands/general/ping.js b/commands/general/ping.js index 064928f..bbda9c3 100644 --- a/commands/general/ping.js +++ b/commands/general/ping.js @@ -1,25 +1,25 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "ping", - aliases: ["beep", "pong"], - description: "Permet de connaître la latence du bot.", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - let sent = await message.reply({ - content: `🎉 Pong!`, - }); - try { - let embed = new EmbedBuilder() - .setTitle("🎉 Pong!") - .setDescription(`- Bâtement de coeur : **${message.client.ws.ping}ms**\n- Latence : **${sent.createdTimestamp - message.createdTimestamp}ms**.`) - .setColor("Random") - sent.edit({ - content: "", - embeds: [embed] - }); - } catch (e) { - console.error(e); - } - }, -}; + name: 'ping', + aliases: ['beep', 'pong'], + description: 'Permet de connaître la latence du bot.', + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + const sent = await message.reply({ + content: '🎉 Pong!' + }) + try { + const embed = new EmbedBuilder() + .setTitle('🎉 Pong!') + .setDescription(`- Bâtement de coeur : **${message.client.ws.ping}ms**\n- Latence : **${sent.createdTimestamp - message.createdTimestamp}ms**.`) + .setColor('Random') + sent.edit({ + content: '', + embeds: [embed] + }) + } catch (e) { + console.error(e) + } + } +} diff --git a/commands/general/vote.js b/commands/general/vote.js index 2d65546..0479110 100644 --- a/commands/general/vote.js +++ b/commands/general/vote.js @@ -1,12 +1,12 @@ -import { PermissionsBitField } from "discord.js"; -import config from "../../config.js"; -const { voteURL } = config; +import { PermissionsBitField } from 'discord.js' +import config from '../../config.js' +const { voteURL } = config export const command = { - name: "vote", - aliases: ["voting"], - description: "Envoie le lien pour voter", - clientpermissions: [PermissionsBitField.Flags.SendMessages], - async execute(message, args) { - await message.reply(voteURL || "Pas d\'url de vote pour le moment"); - }, -}; + name: 'vote', + aliases: ['voting'], + description: 'Envoie le lien pour voter', + clientpermissions: [PermissionsBitField.Flags.SendMessages], + async execute (message) { + await message.reply(voteURL || "Pas d'url de vote pour le moment") + } +} diff --git a/commands/info/avatar.js b/commands/info/avatar.js index a548bb5..dbcfea0 100644 --- a/commands/info/avatar.js +++ b/commands/info/avatar.js @@ -1,29 +1,29 @@ -import { ChannelType, EmbedBuilder, PermissionsBitField } from "discord.js"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "avatar", - description: "Permet de récupérer l\'avatar d\'une personne", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let member = message.mentions.members.first() || message.member; + name: 'avatar', + description: "Permet de récupérer l'avatar d'une personne", + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const member = message.mentions.members.first() || message.member - let embed = new EmbedBuilder() - .setTitle(`L\'avatar de ${member.nickname || member.user.username}`) - .setImage(member.user.displayAvatarURL({ - size: 2048, - extension: "png", - forceStatic: false - })) - .setFooter({ - text: `Demandé par : @${message.author.username} [${message.author.id}]` - }); + const embed = new EmbedBuilder() + .setTitle(`L'avatar de ${member.nickname || member.user.username}`) + .setImage(member.user.displayAvatarURL({ + size: 2048, + extension: 'png', + forceStatic: false + })) + .setFooter({ + text: `Demandé par : @${message.author.username} [${message.author.id}]` + }) - await message.reply({ - embeds: [embed], - }) - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/info/info-bot.js b/commands/info/info-bot.js index 040d660..8fa5540 100644 --- a/commands/info/info-bot.js +++ b/commands/info/info-bot.js @@ -1,31 +1,31 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import config from "../../config.js"; -const { websiteURL, githubURL, supportServerURL } = config; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import config from '../../config.js' +const { websiteURL, githubURL, supportServerURL } = config export const command = { - name: "info-bot", - description: "Affiche les informations sur le bot", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let desc = `## Statistiques\n- Serveurs : **${message.client.guilds.cache.size}**\n- Utilisateurs : **${message.client.guilds.cache.reduce((acc, val) => acc + (val.memberCount ?? 0), 0)}**\n- Salons : **${message.client.channels.cache.size}**\n\n`; - desc += `## Liens\n- Site Internet: ${websiteURL}\n- GitHub : ${githubURL}\n- Serveur de Support: ${supportServerURL}` - let embed = new EmbedBuilder() - .setDescription(desc) - .setThumbnail(message.client.user.displayAvatarURL({ - size: 1024, - extension: "png", - forceStatic: false - })) - .setFooter({ - text: `Demandé par : @${message.author.username} [${message.author.id}]` - }); + name: 'info-bot', + description: 'Affiche les informations sur le bot', + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + let desc = `## Statistiques\n- Serveurs : **${message.client.guilds.cache.size}**\n- Utilisateurs : **${message.client.guilds.cache.reduce((acc, val) => acc + (val.memberCount ?? 0), 0)}**\n- Salons : **${message.client.channels.cache.size}**\n\n` + desc += `## Liens\n- Site Internet: ${websiteURL}\n- GitHub : ${githubURL}\n- Serveur de Support: ${supportServerURL}` + const embed = new EmbedBuilder() + .setDescription(desc) + .setThumbnail(message.client.user.displayAvatarURL({ + size: 1024, + extension: 'png', + forceStatic: false + })) + .setFooter({ + text: `Demandé par : @${message.author.username} [${message.author.id}]` + }) - await message.reply({ - embeds: [embed], - }) - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/info/info-serv.js b/commands/info/info-serv.js index 946761b..0872160 100644 --- a/commands/info/info-serv.js +++ b/commands/info/info-serv.js @@ -1,63 +1,65 @@ -import { ChannelType, EmbedBuilder, PermissionsBitField } from "discord.js"; +import { ChannelType, EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "info-serv", - aliases: ["serverinfo"], - description: "Permet d\'obtenir les informations du serveur.", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let guild = message.guild; + name: 'info-serv', + aliases: ['serverinfo'], + description: "Permet d'obtenir les informations du serveur.", + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const guild = message.guild - let memberscached = message.client.membersCachedInServer.get(guild.id); - if (!memberscached) { - await guild.members.fetch(); - message.client.membersCachedInServer.set(guild.id, true); - } + const memberscached = message.client.membersCachedInServer.get(guild.id) + if (!memberscached) { + await guild.members.fetch() + message.client.membersCachedInServer.set(guild.id, true) + } - let botsCount = guild.members.cache.map(m => m).filter(m => m.user.bot).length; - let channels = guild.channels.cache.map(m => m); - let textChannels = channels.filter(c => c.type == ChannelType.GuildText).length; - let voiceChannels = channels.filter(c => c.type == ChannelType.GuildVoice).length; - let announcementChannels = channels.filter(c => c.type == ChannelType.GuildAnnouncement).length; - let forumChannels = channels.filter(c => c.type == ChannelType.GuildForum).length; - let stageChannels = channels.filter(c => c.type == ChannelType.GuildStageVoice).length; + const botsCount = guild.members.cache.map(m => m).filter(m => m.user.bot).length + const channels = guild.channels.cache.map(m => m) + const textChannels = channels.filter(c => c.type == ChannelType.GuildText).length + const voiceChannels = channels.filter(c => c.type == ChannelType.GuildVoice).length + const announcementChannels = channels.filter(c => c.type == ChannelType.GuildAnnouncement).length + const forumChannels = channels.filter(c => c.type == ChannelType.GuildForum).length + const stageChannels = channels.filter(c => c.type == ChannelType.GuildStageVoice).length - let embed = new EmbedBuilder() - .setTitle(`${guild.name} [${guild.id}]`) - .setColor("Random") - .addFields( - { - name: "Membres", - value: `- **${guild.memberCount}** membres\n - **${botsCount}** bots\n - **${guild.memberCount - botsCount}** membres non-bot\n- Propriétaire : **${guild.members.cache.get(guild.ownerId).user.username}** (ID : **${guild.ownerId}**)`, - inline: true - }, - { - name: "Salons", - value: `- **${textChannels}** Textuelle, **${voiceChannels}** Vocaux, **${announcementChannels}** Annonce, **${forumChannels}** Forum, **${stageChannels}** Évènements\n- Salons Systèmes : ${guild.systemChannelId ? `<#${guild.systemChannelId}>` : "**Aucun**"}\n- Salon AFK : ${guild.afkChannelId ? `<#${guild.afkChannelId}>` : "**Aucun**"}`, - inline: true - }, - { - name: "Autres", - value: `- Crée le : \n- Roles: **${guild.roles.cache.map(r => r).filter(r => r.id != guild.id).length}**\n- Emojis: **${guild.emojis.cache.size}**`, - } - ) - .setFooter({ - text: `Demandé par : @${message.author.username} [${message.author.id}]` - }) - .setTimestamp(); + const embed = new EmbedBuilder() + .setTitle(`${guild.name} [${guild.id}]`) + .setColor('Random') + .addFields( + { + name: 'Membres', + value: `- **${guild.memberCount}** membres\n - **${botsCount}** bots\n - **${guild.memberCount - botsCount}** membres non-bot\n- Propriétaire : **${guild.members.cache.get(guild.ownerId).user.username}** (ID : **${guild.ownerId}**)`, + inline: true + }, + { + name: 'Salons', + value: `- **${textChannels}** Textuelle, **${voiceChannels}** Vocaux, **${announcementChannels}** Annonce, **${forumChannels}** Forum, **${stageChannels}** Évènements\n- Salons Systèmes : ${guild.systemChannelId ? `<#${guild.systemChannelId}>` : '**Aucun**'}\n- Salon AFK : ${guild.afkChannelId ? `<#${guild.afkChannelId}>` : '**Aucun**'}`, + inline: true + }, + { + name: 'Autres', + value: `- Crée le : \n- Roles: **${guild.roles.cache.map(r => r).filter(r => r.id != guild.id).length}**\n- Emojis: **${guild.emojis.cache.size}**` + } + ) + .setFooter({ + text: `Demandé par : @${message.author.username} [${message.author.id}]` + }) + .setTimestamp() - if (message.guild.icon) embed.setThumbnail(message.guild.iconURL({ - size: 1024, - extension: "png", - forceStatic: false - })) + if (message.guild.icon) { + embed.setThumbnail(message.guild.iconURL({ + size: 1024, + extension: 'png', + forceStatic: false + })) + } - await message.reply({ - embeds: [embed], - }) - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/info/user.js b/commands/info/user.js index 120530d..04ef4cc 100644 --- a/commands/info/user.js +++ b/commands/info/user.js @@ -1,48 +1,48 @@ -import { ChannelType, EmbedBuilder, PermissionsBitField } from "discord.js"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "info-utilisateur", - aliases: ["userinfo", "infoutilisateur", "info_utilisateur"], - description: "Voir les informations de l\'utilisateur", - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let member = message.mentions.members.first() || message.member; + name: 'info-utilisateur', + aliases: ['userinfo', 'infoutilisateur', 'info_utilisateur'], + description: "Voir les informations de l'utilisateur", + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const member = message.mentions.members.first() || message.member - let embed = new EmbedBuilder() - .setDescription(`**${member.nickname || member.user.username}** - <@${member.user.id}> [**${member.user.id}**]`) - .setColor("Random") - .addFields( - { - name: "Date de Création du compte", - value: `- \n- `, - inline: true - }, - { - name: "Date à laquel il à rejoint le serveur", - value: `- \n- `, - inline: true - }, - { - name: "Info", - value: `- Nom d\'utilisateur : **${member.user.username}**\n- Pseudonyme : **${member.nickname || "Aucun"}**\n- Tag : **${member.user.tag}**\nID: **${member.user.id}**`, - }, - ) - .setThumbnail(member.user.displayAvatarURL({ - size: 1024, - extension: "png", - forceStatic: false - })) - .setFooter({ - text: `Demandé par : @${message.author.username} [${message.author.id}]` - }) - .setTimestamp(); + const embed = new EmbedBuilder() + .setDescription(`**${member.nickname || member.user.username}** - <@${member.user.id}> [**${member.user.id}**]`) + .setColor('Random') + .addFields( + { + name: 'Date de Création du compte', + value: `- \n- `, + inline: true + }, + { + name: 'Date à laquel il à rejoint le serveur', + value: `- \n- `, + inline: true + }, + { + name: 'Info', + value: `- Nom d'utilisateur : **${member.user.username}**\n- Pseudonyme : **${member.nickname || 'Aucun'}**\n- Tag : **${member.user.tag}**\nID: **${member.user.id}**` + } + ) + .setThumbnail(member.user.displayAvatarURL({ + size: 1024, + extension: 'png', + forceStatic: false + })) + .setFooter({ + text: `Demandé par : @${message.author.username} [${message.author.id}]` + }) + .setTimestamp() - await message.reply({ - embeds: [embed], - }) - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/blowjob.js b/commands/nsfw/blowjob.js index fd23fee..ebbfea7 100644 --- a/commands/nsfw/blowjob.js +++ b/commands/nsfw/blowjob.js @@ -1,36 +1,35 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "suce", - aliases: ["blowjob", "sucer"], - description: "Envoie une image de quelqu\'un qui suce.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/blowjob", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'suce', + aliases: ['blowjob', 'sucer'], + description: "Envoie une image de quelqu'un qui suce.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/blowjob', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais sucer.`) - .setColor("Random") - .setImage(res.file); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais sucer.`) + .setColor('Random') + .setImage(res.file) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/blowjob_pic.js b/commands/nsfw/blowjob_pic.js index d301f76..dcbf9ff 100644 --- a/commands/nsfw/blowjob_pic.js +++ b/commands/nsfw/blowjob_pic.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "suce_img", - aliases: ["suce-img", "suceimg"], - description: "Permet d\'envoyer une image de quelqu\'un qui suce.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/blowjob", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de quelqu"un qui suce pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'suce_img', + aliases: ['suce-img', 'suceimg'], + description: "Permet d'envoyer une image de quelqu'un qui suce.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/blowjob', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de quelqu"un qui suce pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/boobs.js b/commands/nsfw/boobs.js index 6075034..d977d06 100644 --- a/commands/nsfw/boobs.js +++ b/commands/nsfw/boobs.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "tetons", - aliases: ["seins", "boobs"], - description: "Permet d\'envoyer une image seins.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/boobs", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de seins pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'tetons', + aliases: ['seins', 'boobs'], + description: "Permet d'envoyer une image seins.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/boobs', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de seins pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/cum.js b/commands/nsfw/cum.js index 873d559..ebc26e8 100644 --- a/commands/nsfw/cum.js +++ b/commands/nsfw/cum.js @@ -1,36 +1,35 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "cum_gif", - aliases: ["ejac_gif", "ejaculation_gif", "cumgif", "cum-gif", "ejac-gif", "ejacgif"], - description: "Envoie une image de quelqu\'un qui éjacule.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/cum", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'cum_gif', + aliases: ['ejac_gif', 'ejaculation_gif', 'cumgif', 'cum-gif', 'ejac-gif', 'ejacgif'], + description: "Envoie une image de quelqu'un qui éjacule.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/cum', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait innonder.`) - .setColor("Random") - .setImage(res.file); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait innonder.`) + .setColor('Random') + .setImage(res.file) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/cum_pic.js b/commands/nsfw/cum_pic.js index b002966..2cbfab2 100644 --- a/commands/nsfw/cum_pic.js +++ b/commands/nsfw/cum_pic.js @@ -1,36 +1,35 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "cum_img", - aliases: ["ejac_img", "ejaculation_img", "cumimg", "cum-img", "ejac-img", "ejacimg"], - description: "Envoie une image de quelqu\'un qui éjacule.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/cum", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'cum_img', + aliases: ['ejac_img', 'ejaculation_img', 'cumimg', 'cum-img', 'ejac-img', 'ejacimg'], + description: "Envoie une image de quelqu'un qui éjacule.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/cum', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait recouvrir.`) - .setColor("Random") - .setImage(res.file); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait recouvrir.`) + .setColor('Random') + .setImage(res.file) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/femboy.js b/commands/nsfw/femboy.js index 7541682..2829842 100644 --- a/commands/nsfw/femboy.js +++ b/commands/nsfw/femboy.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "femboy", - aliases: ["trans", "transgenre"], - description: "Permet d\'envoyer une image d\'une transgenre.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/trap", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image d"une transgenre pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'femboy', + aliases: ['trans', 'transgenre'], + description: "Permet d'envoyer une image d'une transgenre.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/trap', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image d"une transgenre pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/femdom.js b/commands/nsfw/femdom.js index f4d4144..b623654 100644 --- a/commands/nsfw/femdom.js +++ b/commands/nsfw/femdom.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "femdom", - aliases: ["femmedominante", "dominante", "domine"], - description: "Permet d\'envoyer une image de femdom.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/femdom", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de femdom pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'femdom', + aliases: ['femmedominante', 'dominante', 'domine'], + description: "Permet d'envoyer une image de femdom.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/femdom', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de femdom pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/futa.js b/commands/nsfw/futa.js index ed35a79..3799f42 100644 --- a/commands/nsfw/futa.js +++ b/commands/nsfw/futa.js @@ -1,36 +1,35 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "futa", - aliases: ["futanari"], - description: "Permet d\'envoyer une image d\'une futanari.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/futa", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'futa', + aliases: ['futanari'], + description: "Permet d'envoyer une image d'une futanari.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/futa', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais défleurer par surprise.`) - .setColor("Random") - .setImage(res.file); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais défleurer par surprise.`) + .setColor('Random') + .setImage(res.file) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/hentai.js b/commands/nsfw/hentai.js index 223bcc8..0935f7c 100644 --- a/commands/nsfw/hentai.js +++ b/commands/nsfw/hentai.js @@ -1,32 +1,32 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "hentai", - description: "Permet d\'envoyer une image de hentai.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/hentai", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de hentai pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'hentai', + description: "Permet d'envoyer une image de hentai.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/hentai', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de hentai pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/kitsune.js b/commands/nsfw/kitsune.js index ad4205f..05cf540 100644 --- a/commands/nsfw/kitsune.js +++ b/commands/nsfw/kitsune.js @@ -1,32 +1,32 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "kitsune", - description: "Permet d\'envoyer une image d\'une kitsune.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/kitsune", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de kitsune pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'kitsune', + description: "Permet d'envoyer une image d'une kitsune.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/kitsune', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de kitsune pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/kuni.js b/commands/nsfw/kuni.js index 11ebede..5e720e9 100644 --- a/commands/nsfw/kuni.js +++ b/commands/nsfw/kuni.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "cuni", - aliases: ["kuni"], - description: "Permet d\'envoyer une image d\'un cuni.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/kuni", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de cuni pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'cuni', + aliases: ['kuni'], + description: "Permet d'envoyer une image d'un cuni.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/kuni', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de cuni pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/neko.js b/commands/nsfw/neko.js index 5151ffd..5ed285a 100644 --- a/commands/nsfw/neko.js +++ b/commands/nsfw/neko.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "neko_gif", - aliases: ["nekogif", "nekonuegif", "neko-gif"], - description: "Permet d\'envoyer une image de neko.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/neko", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de neko pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'neko_gif', + aliases: ['nekogif', 'nekonuegif', 'neko-gif'], + description: "Permet d'envoyer une image de neko.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/neko', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de neko pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/neko_pic.js b/commands/nsfw/neko_pic.js index 851092f..ffacf93 100644 --- a/commands/nsfw/neko_pic.js +++ b/commands/nsfw/neko_pic.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "neko_img", - aliases: ["nekoimg", "nekonueimg"], - description: "Permet d\'envoyer une image d\'une neko nue.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/neko", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image d"une neko nue pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'neko_img', + aliases: ['nekoimg', 'nekonueimg'], + description: "Permet d'envoyer une image d'une neko nue.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/neko', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image d"une neko nue pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/orgasm.js b/commands/nsfw/orgasm.js index 42d26b2..4827f5f 100644 --- a/commands/nsfw/orgasm.js +++ b/commands/nsfw/orgasm.js @@ -1,33 +1,33 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "orgasm", - aliases: ["gasm", "orgasmic"], - description: "Permet d\'envoyer une image d\'un orgasm.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/gasm", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image d"orgasm" pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'orgasm', + aliases: ['gasm', 'orgasmic'], + description: "Permet d'envoyer une image d'un orgasm.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/gasm', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image d"orgasm" pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/pantyhose.js b/commands/nsfw/pantyhose.js index b6c5a32..362765f 100644 --- a/commands/nsfw/pantyhose.js +++ b/commands/nsfw/pantyhose.js @@ -1,34 +1,34 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "pantyhose", - aliases: ["collant", "bas"], - description: "Permet d\'envoyer une image de collant.", - cooldwon: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/pantyhose", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); + name: 'pantyhose', + aliases: ['collant', 'bas'], + description: "Permet d'envoyer une image de collant.", + cooldwon: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/pantyhose', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de femme en collant pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); + if (!res?.file) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image de femme en collant pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/petplay.js b/commands/nsfw/petplay.js index aa7d41d..a989e40 100644 --- a/commands/nsfw/petplay.js +++ b/commands/nsfw/petplay.js @@ -1,34 +1,34 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "petplay", - aliases: ["pet_play", "pet-play"], - description: "Permet d\'envoyer une image de petplay.", - cooldwon: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/petplay", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); + name: 'petplay', + aliases: ['pet_play', 'pet-play'], + description: "Permet d'envoyer une image de petplay.", + cooldwon: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/petplay', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de petplay pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); + if (!res?.file) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image de petplay pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/pussy.js b/commands/nsfw/pussy.js index 81aeed8..450a80f 100644 --- a/commands/nsfw/pussy.js +++ b/commands/nsfw/pussy.js @@ -1,34 +1,34 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "chatte_gif", - aliases: ["pussy_gif", "pussy-gif", "pussygif", "chatte-gif", "chattegif"], - description: "Permet d\'envoyer une image d\'une chatte.", - cooldwon: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/pussy", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); + name: 'chatte_gif', + aliases: ['pussy_gif', 'pussy-gif', 'pussygif', 'chatte-gif', 'chattegif'], + description: "Permet d'envoyer une image d'une chatte.", + cooldwon: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/pussy', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image d"une chatte pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); + if (!res?.file) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image d"une chatte pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/pussy_pic.js b/commands/nsfw/pussy_pic.js index 62b931e..a1ed47b 100644 --- a/commands/nsfw/pussy_pic.js +++ b/commands/nsfw/pussy_pic.js @@ -1,34 +1,34 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "chatte_img", - aliases: ["pussy_img", "pussy-img", "pussyimg", "chatte-img", "chatteimg"], - description: "Permet d\'envoyer une image d\'une chatte.", - cooldwon: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/pussy", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); + name: 'chatte_img', + aliases: ['pussy_img', 'pussy-img', 'pussyimg', 'chatte-img', 'chatteimg'], + description: "Permet d'envoyer une image d'une chatte.", + cooldwon: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/pussy', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image d"une chatte pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); + if (!res?.file) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image d"une chatte pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/slimes.js b/commands/nsfw/slimes.js index 26a593d..c727506 100644 --- a/commands/nsfw/slimes.js +++ b/commands/nsfw/slimes.js @@ -1,32 +1,32 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "slime", - description: "Permet d\'envoyer une image de quelqu\'un qui se fait engluer.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/slimes", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de slime pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'slime', + description: "Permet d'envoyer une image de quelqu'un qui se fait engluer.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/slimes', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de slime pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/tentacle.js b/commands/nsfw/tentacle.js index d5c80de..dee4f63 100644 --- a/commands/nsfw/tentacle.js +++ b/commands/nsfw/tentacle.js @@ -1,32 +1,32 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "tentacle", - description: "Permet d\'envoyer une image de tentacle.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/gif/tentacle", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de tentacle pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'tentacle', + description: "Permet d'envoyer une image de tentacle.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/gif/tentacle', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de tentacle pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/yaoi.js b/commands/nsfw/yaoi.js index dafb797..7c9c7b5 100644 --- a/commands/nsfw/yaoi.js +++ b/commands/nsfw/yaoi.js @@ -1,35 +1,34 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "yaoi", - description: "Envoie une image de quelqu\'un qui se fait baiser pas un homme.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/yaoi", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'yaoi', + description: "Envoie une image de quelqu'un qui se fait baiser pas un homme.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/yaoi', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` + } + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais baiser.`) - .setColor("Random") - .setImage(res.file); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fais baiser.`) + .setColor('Random') + .setImage(res.file) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/nsfw/yuri.js b/commands/nsfw/yuri.js index 0d12823..623e8c5 100644 --- a/commands/nsfw/yuri.js +++ b/commands/nsfw/yuri.js @@ -1,32 +1,32 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "yuri", - description: "Permet d\'envoyer une image de femme qui baise.", - cooldown: 10, - nsfw: true, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://gallery.fluxpoint.dev/api/nsfw/img/yuri", { - headers: { - "Authorization": `${process.env.FLUXPOINT_API_KEY}` - } -}))?.json(); - if (!res?.file) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de yuri pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.file); - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); + name: 'yuri', + description: "Permet d'envoyer une image de femme qui baise.", + cooldown: 10, + nsfw: true, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://gallery.fluxpoint.dev/api/nsfw/img/yuri', { + headers: { + Authorization: `${process.env.FLUXPOINT_API_KEY}` } - }, -}; + }))?.json() + if (!res?.file) return await message.reply("Impossible de récupérer l'image") + + const embed = new EmbedBuilder() + .setTitle(`Une image de yuri pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.file) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/others/cat.js b/commands/others/cat.js index 75f6071..90b576a 100644 --- a/commands/others/cat.js +++ b/commands/others/cat.js @@ -1,23 +1,22 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' export const command = { - name: "chat", - description: "Envoie une image de chat aléatoire.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let embed = new EmbedBuilder() - .setTitle(`Une image de chat pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(`https://cataas.com/cat/says/%20?noCache=${Date.now()}_${String(Math.random()).replace(/\./g,"")}`); + name: 'chat', + description: 'Envoie une image de chat aléatoire.', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const embed = new EmbedBuilder() + .setTitle(`Une image de chat pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(`https://cataas.com/cat/says/%20?noCache=${Date.now()}_${String(Math.random()).replace(/\./g, '')}`) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/others/fox_girl.js b/commands/others/fox_girl.js index 93ab5ce..dac207b 100644 --- a/commands/others/fox_girl.js +++ b/commands/others/fox_girl.js @@ -1,27 +1,27 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "fox_girl", - aliases: ["foxgirl", "fox-girl"], - description: "Envoie une image de fox girl aléatoire", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/fox_girl"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de fox girl pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.url); + name: 'fox_girl', + aliases: ['foxgirl', 'fox-girl'], + description: 'Envoie une image de fox girl aléatoire', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/fox_girl'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image de fox girl pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.url) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/others/panda.js b/commands/others/panda.js index 581a8aa..ce49a1a 100644 --- a/commands/others/panda.js +++ b/commands/others/panda.js @@ -1,26 +1,26 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "panda", - description: "Envoie une image de Panda aléatoire.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://some-random-api.com/img/panda"))?.json(); - if (!res?.link) return await message.reply("Impossible de récupérer l\'image."); - - let embed = new EmbedBuilder() - .setTitle(`Une image de panda pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.link); + name: 'panda', + description: 'Envoie une image de Panda aléatoire.', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://some-random-api.com/img/panda'))?.json() + if (!res?.link) return await message.reply("Impossible de récupérer l'image.") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image de panda pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.link) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/blush.js b/commands/roleplay/blush.js index 60c05ac..2548dff 100644 --- a/commands/roleplay/blush.js +++ b/commands/roleplay/blush.js @@ -1,27 +1,27 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "rougit", - aliases: ["rougir"], - description: "Envoie une image de personne qui rougis aléatoire.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.best/api/v2/blush"))?.json(); - if (!res?.results[0].url) return await message.reply("Impossible de récupérer l\'image."); - - let embed = new EmbedBuilder() - .setTitle(`${message.member.nickname || message.author.username} rougit.`) - .setColor("Random") - .setImage(res.results[0].url); + name: 'rougit', + aliases: ['rougir'], + description: 'Envoie une image de personne qui rougis aléatoire.', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.best/api/v2/blush'))?.json() + if (!res?.results[0].url) return await message.reply("Impossible de récupérer l'image.") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`${message.member.nickname || message.author.username} rougit.`) + .setColor('Random') + .setImage(res.results[0].url) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/calin.js b/commands/roleplay/calin.js index 8b4865e..d49e600 100644 --- a/commands/roleplay/calin.js +++ b/commands/roleplay/calin.js @@ -1,29 +1,28 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "calin", - description: "Envoie une image de câlin aléatoire.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/hug"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'calin', + description: 'Envoie une image de câlin aléatoire.', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/hug'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} te fais un câlin.`) - .setColor("Random") - .setImage(res.url); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} te fais un câlin.`) + .setColor('Random') + .setImage(res.url) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/crying.js b/commands/roleplay/crying.js index 8582413..4e97396 100644 --- a/commands/roleplay/crying.js +++ b/commands/roleplay/crying.js @@ -1,28 +1,28 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "pleure", - description: "Envoie une image de quelq\'un qui pleure", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.best/api/v2/cry"))?.json(); - if (!res?.results || !res?.results[0]?.url) return await message.reply("impossible de récupérer l\'image"); + name: 'pleure', + description: "Envoie une image de quelq'un qui pleure", + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.best/api/v2/cry'))?.json() + if (!res?.results || !res?.results[0]?.url) return await message.reply("impossible de récupérer l'image") - let mentionedmember = message.mentions.members.first(); + const mentionedmember = message.mentions.members.first() - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} pleure !`) - .setColor("Random") - .setImage(res.results[0].url); + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} pleure !`) + .setColor('Random') + .setImage(res.results[0].url) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/good_night.js b/commands/roleplay/good_night.js index 35524d3..0f8578d 100644 --- a/commands/roleplay/good_night.js +++ b/commands/roleplay/good_night.js @@ -1,30 +1,30 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; -import "dotenv/config"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' +import 'dotenv/config' export const command = { - name: "bonne_nuit", - aliases: ["bonnenuit", "bonne-nuit"], - description: "Envoie une image aléatoire de Bonne Nuit.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch(`https://g.tenor.com/v1/random?id=8776030&key=${process.env.TENOR_API_KEY}&limit=1&q=good+night+anime`))?.json(); - if (!res?.results || !res.results[0]?.media || !res.results[0]?.media[0]?.gif?.url) return await message.reply("Impossible d\obtenir l\image"); + name: 'bonne_nuit', + aliases: ['bonnenuit', 'bonne-nuit'], + description: 'Envoie une image aléatoire de Bonne Nuit.', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch(`https://g.tenor.com/v1/random?id=8776030&key=${process.env.TENOR_API_KEY}&limit=1&q=good+night+anime`))?.json() + if (!res?.results || !res.results[0]?.media || !res.results[0]?.media[0]?.gif?.url) return await message.reply("Impossible d'obtenir l'image") - let mentionedmember = message.mentions.members.first(); + const mentionedmember = message.mentions.members.first() - let embed = new EmbedBuilder() - .setTitle(`Bonne Nuit, ${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)}`) - .setColor("Random") - .setImage(res.results[0]?.media[0]?.gif?.url); + const embed = new EmbedBuilder() + .setTitle(`Bonne Nuit, ${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)}`) + .setColor('Random') + .setImage(res.results[0]?.media[0]?.gif?.url) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/kissing.js b/commands/roleplay/kissing.js index 1b09889..db98b53 100644 --- a/commands/roleplay/kissing.js +++ b/commands/roleplay/kissing.js @@ -1,30 +1,29 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "embrasse", - aliases: ["embrasser", "bisou", "bisous"], - description: "Envoie une image de quelqu\'un qui embrasse.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/kiss"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image"); + name: 'embrasse', + aliases: ['embrasser', 'bisou', 'bisous'], + description: "Envoie une image de quelqu'un qui embrasse.", + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/kiss'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image") - let mentionedmember = message.mentions.members.first(); + const mentionedmember = message.mentions.members.first() - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait embrasser.`) - .setColor("Random") - .setImage(res.url); + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait embrasser.`) + .setColor('Random') + .setImage(res.url) - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/neko.js b/commands/roleplay/neko.js index 4f80063..cc3e8e1 100644 --- a/commands/roleplay/neko.js +++ b/commands/roleplay/neko.js @@ -1,26 +1,26 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "neko", - description: "Envoie une image de neko aléatoire", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/neko"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`Une image de neko pour toi, ${message.member.nickname || message.author.username}`) - .setColor("Random") - .setImage(res.url); + name: 'neko', + description: 'Envoie une image de neko aléatoire', + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/neko'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`Une image de neko pour toi, ${message.member.nickname || message.author.username}`) + .setColor('Random') + .setImage(res.url) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/slap.js b/commands/roleplay/slap.js index 3d5a0d9..e310348 100644 --- a/commands/roleplay/slap.js +++ b/commands/roleplay/slap.js @@ -1,30 +1,29 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "gifle", - aliases: ["baffe"], - description: "Envoie une image de quelqu\'un qui gifle", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/slap"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image"); + name: 'gifle', + aliases: ['baffe'], + description: "Envoie une image de quelqu'un qui gifle", + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/slap'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image") - let mentionedmember = message.mentions.members.first(); + const mentionedmember = message.mentions.members.first() - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait gifler.`) - .setColor("Random") - .setImage(res.url); + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait gifler.`) + .setColor('Random') + .setImage(res.url) - - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/tapote.js b/commands/roleplay/tapote.js index c590170..e859efb 100644 --- a/commands/roleplay/tapote.js +++ b/commands/roleplay/tapote.js @@ -1,29 +1,28 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "tapote", - description: "Permet d\'envoyer une image de quelqu\'un qui tapote", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.life/api/v2/img/pat"))?.json(); - if (!res?.url) return await message.reply("Impossible de récupérer l\'image."); - - let mentionedmember = message.mentions.members.first(); + name: 'tapote', + description: "Permet d'envoyer une image de quelqu'un qui tapote", + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.life/api/v2/img/pat'))?.json() + if (!res?.url) return await message.reply("Impossible de récupérer l'image.") - let embed = new EmbedBuilder() - .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait tapoter.`) - .setColor("Random") - .setImage(res.url); + const mentionedmember = message.mentions.members.first() + const embed = new EmbedBuilder() + .setTitle(`${mentionedmember ? (mentionedmember.nickname || mentionedmember.user.username) : (message.member.nickname || message.author.username)} se fait tapoter.`) + .setColor('Random') + .setImage(res.url) - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/commands/roleplay/wave.js b/commands/roleplay/wave.js index 8757f01..0087cc5 100644 --- a/commands/roleplay/wave.js +++ b/commands/roleplay/wave.js @@ -1,27 +1,27 @@ -import { EmbedBuilder, PermissionsBitField } from "discord.js"; -import fetch from "node-fetch"; +import { EmbedBuilder, PermissionsBitField } from 'discord.js' +import fetch from 'node-fetch' export const command = { - name: "bonjour", - aliases: ["salut", "bonsoir"], - description: "Permet d\'envoyer une image d\'une personne qui salut.", - cooldown: 10, - clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], - async execute(message, args) { - try { - let res = await (await fetch("https://nekos.best/api/v2/wave"))?.json(); - if (!res?.results[0].url) return await message.reply("Impossible de récupérer l\'image"); - - let embed = new EmbedBuilder() - .setTitle(`${message.member.nickname || message.author.username} salut tout le monde.`) - .setColor("Random") - .setImage(res.results[0].url); + name: 'bonjour', + aliases: ['salut', 'bonsoir'], + description: "Permet d'envoyer une image d'une personne qui salut.", + cooldown: 10, + clientpermissions: [PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.EmbedLinks], + async execute (message) { + try { + const res = await (await fetch('https://nekos.best/api/v2/wave'))?.json() + if (!res?.results[0].url) return await message.reply("Impossible de récupérer l'image") - await message.reply({ - embeds: [embed], - }); - } catch (error) { - console.error(error); - } - }, -}; + const embed = new EmbedBuilder() + .setTitle(`${message.member.nickname || message.author.username} salut tout le monde.`) + .setColor('Random') + .setImage(res.results[0].url) + + await message.reply({ + embeds: [embed] + }) + } catch (error) { + console.error(error) + } + } +} diff --git a/config.js b/config.js index d443864..21f175f 100644 --- a/config.js +++ b/config.js @@ -1,9 +1,9 @@ export default { - prefix: "m*", - ownerId: "268432158262165504", - clientId: "636098912859717634", - voteURL: "https://top.gg/bot/636098912859717634?s=0418acfa64d7e", - websiteURL: "https://mr-bot.tech-ludo.fr", - githubURL: "https://github.com/Ludo-code/Mr_BOT", - supportServerURL: "https://discord.com/invite/4z5zvdae7r", + prefix: 'm*', + ownerId: '268432158262165504', + clientId: '636098912859717634', + voteURL: 'https://top.gg/bot/636098912859717634?s=0418acfa64d7e', + websiteURL: 'https://mr-bot.tech-ludo.fr', + githubURL: 'https://github.com/Ludo-code/Mr_BOT', + supportServerURL: 'https://discord.com/invite/4z5zvdae7r' } diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d484827 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,9 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; + + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + {languageOptions: { globals: globals.node }}, + pluginJs.configs.recommended, +]; diff --git a/events/client/ready.js b/events/client/ready.js index f43a61d..7ca653a 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -26,14 +26,7 @@ export const event = { return; } const makePushRequest = () => { - https.get(uptimeKumaUrl, (res) => { - let data = ""; - res.on("data", (chunk) => { - data += chunk; - }); - res.on("end", () => { - //console.log("Réponse de Uptime Kuma:", data); - }); + https.get(uptimeKumaUrl, () => { }).on("error", (err) => { console.error("Erreur lors de la requête Uptime Kuma:", err.message); }); diff --git a/events/guild/interactionCreate.js b/events/guild/interactionCreate.js index f3cb97a..6f416d0 100644 --- a/events/guild/interactionCreate.js +++ b/events/guild/interactionCreate.js @@ -1,15 +1,15 @@ -import { Events } from "discord.js"; -import handleButton from "../../handler/buttonhandler.js"; +import { Events } from 'discord.js' +import handleButton from '../../handler/buttonhandler.js' export const event = { - name: Events.InteractionCreate, - async execute(interaction) { - if (interaction.isButton()) { - try { - await handleButton(interaction); - } catch (error) { - console.error(error); - } - } - }, -}; + name: Events.InteractionCreate, + async execute (interaction) { + if (interaction.isButton()) { + try { + await handleButton(interaction) + } catch (error) { + console.error(error) + } + } + } +} diff --git a/events/guild/messageCreate.js b/events/guild/messageCreate.js index 75ca797..fdf5b00 100644 --- a/events/guild/messageCreate.js +++ b/events/guild/messageCreate.js @@ -1,140 +1,140 @@ -import { ChannelType, Collection, Events, PermissionsBitField } from "discord.js"; -import winston from "winston"; -import "winston-daily-rotate-file"; -import { Guild } from "../../schema/schema.js"; -import config from "../../config.js"; -import PermissionsFR from "../../permissionsFR.js"; +import { ChannelType, Collection, Events, PermissionsBitField } from 'discord.js' +import winston from 'winston' +import 'winston-daily-rotate-file' +import { Guild } from '../../schema/schema.js' +import config from '../../config.js' +import PermissionsFR from '../../lang/FR/permissionsFR.js' -const { prefix } = config; -const cooldowns = new Collection(); +const { prefix } = config +const cooldowns = new Collection() const logger = winston.createLogger({ - level: "info", - format: winston.format.combine( - winston.format.timestamp(), - winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`) - ), - transports: [ - new winston.transports.Console(), - new winston.transports.DailyRotateFile({ - filename: "logs/Mr_BOT-%DATE%.log", - datePattern: "DD-MM-YYYY", - maxSize: "20m", - maxFiles: "180d", - zippedArchive: true, - }), - ], -}); + level: 'info', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`) + ), + transports: [ + new winston.transports.Console(), + new winston.transports.DailyRotateFile({ + filename: 'logs/Mr_BOT-%DATE%.log', + datePattern: 'DD-MM-YYYY', + maxSize: '20m', + maxFiles: '180d', + zippedArchive: true + }) + ] +}) export const event = { - name: Events.MessageCreate, - once: false, - async execute(message) { - try { - const { client } = message; - - if (message.channel.type === ChannelType.DM) return; - if (!message.content.toLowerCase().startsWith(prefix.toLowerCase()) || message.author.bot) return; - - const args = message.content.slice(prefix.length).trim().split(/ +/); - const commandName = args.shift().toLowerCase(); - - const command = client.commands.get(commandName) || - client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); - - if (!command) { - logger.info(`Commande inconnue: ${commandName} par ${message.author.tag} (${message.author.id})`); - return; - } - - if (command.staffOnly && !message.member.permissions.has(PermissionsBitField.Flags.Administrator)) { - logger.warn(`Tentative d"exécution de commande réservée au staff: ${commandName} par ${message.author.tag}`); - return await message.reply("Tu as besoin de la permission `Administrateur` pour exécuter cette commande..."); - } - - if (command.clientpermissions) { - let missingperms = message.guild.members.me.permissionsIn(message.channel).missing(new PermissionsBitField(command.clientpermissions)); - missingperms = missingperms.toString().toUpperCase(); - let frenchMissingPerms = ""; - for (const [key, values] of Object.entries(PermissionsFR)) { - if (values.includes(PermissionsFR[key]) && missingperms.includes(key)) { - frenchMissingPerms += PermissionsFR[key] + "; "; - } - } - frenchMissingPerms = frenchMissingPerms.slice(0, -2); - - if (missingperms?.length) { - logger.warn(`Permissions manquantes pour exécuter ${commandName}: ${frenchMissingPerms}`); - try { - return await message.reply(`Désolé tu n"as pas \`${frenchMissingPerms}\` comme permission pour exécuter cette commande.`); - } catch (error) { - logger.error(`Erreur lors de l"envoi de la réponse pour permissions manquantes: ${error.message}`); - try { - await message.author.send("Désolé, je ne peux pas envoyer de message dans le serveur...Je n\'ai peut-être pas la permission `Envoyer des messages`."); - } catch (error) { - logger.error(`Erreur lors de l"envoi du DM à l"utilisateur: ${error.message}`); - } - } - return; - } + name: Events.MessageCreate, + once: false, + async execute (message) { + try { + const { client } = message + + if (message.channel.type === ChannelType.DM) return + if (!message.content.toLowerCase().startsWith(prefix.toLowerCase()) || message.author.bot) return + + const args = message.content.slice(prefix.length).trim().split(/ +/) + const commandName = args.shift().toLowerCase() + + const command = client.commands.get(commandName) || + client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)) + + if (!command) { + logger.info(`Commande inconnue: ${commandName} par ${message.author.tag} (${message.author.id})`) + return + } + + if (command.staffOnly && !message.member.permissions.has(PermissionsBitField.Flags.Administrator)) { + logger.warn(`Tentative d"exécution de commande réservée au staff: ${commandName} par ${message.author.tag}`) + return await message.reply('Tu as besoin de la permission `Administrateur` pour exécuter cette commande...') + } + + if (command.clientpermissions) { + let missingperms = message.guild.members.me.permissionsIn(message.channel).missing(new PermissionsBitField(command.clientpermissions)) + missingperms = missingperms.toString().toUpperCase() + let frenchMissingPerms = '' + for (const [key, values] of Object.entries(PermissionsFR)) { + if (values.includes(PermissionsFR[key]) && missingperms.includes(key)) { + frenchMissingPerms += PermissionsFR[key] + '; ' + } + } + frenchMissingPerms = frenchMissingPerms.slice(0, -2) + + if (missingperms?.length) { + logger.warn(`Permissions manquantes pour exécuter ${commandName}: ${frenchMissingPerms}`) + try { + return await message.reply(`Désolé tu n"as pas \`${frenchMissingPerms}\` comme permission pour exécuter cette commande.`) + } catch (error) { + logger.error(`Erreur lors de l"envoi de la réponse pour permissions manquantes: ${error.message}`) + try { + await message.author.send("Désolé, je ne peux pas envoyer de message dans le serveur...Je n'ai peut-être pas la permission `Envoyer des messages`.") + } catch (error) { + logger.error(`Erreur lors de l"envoi du DM à l"utilisateur: ${error.message}`) } + } + return + } + } - if (command.cooldown && typeof command.cooldown === "number") { - if (!cooldowns.has(command.name)) { - cooldowns.set(command.name, new Collection()); - } - - const now = Date.now(); - const timestamps = cooldowns.get(command.name); - const cooldownAmount = Math.floor(command.cooldown) * 1000; - - if (!timestamps.has(`${message.guild.id}_${message.author.id}`)) { - timestamps.set(`${message.guild.id}_${message.author.id}`, now); - setTimeout(() => timestamps.delete(`${message.guild.id}_${message.author.id}`), cooldownAmount); - } else { - const expirationTime = timestamps.get(`${message.guild.id}_${message.author.id}`) + cooldownAmount; - const timeLeft = (expirationTime - now) / 1000; - if (now < expirationTime && timeLeft > 0.9) { - logger.info(`Cooldown actif pour ${commandName} par ${message.author.tag}, restant: ${timeLeft.toFixed(1)}s`); - return await message.reply({ content: `⏰ Merci d"attendre avant d"utiliser la commande **${command.name}** de nouveau.`, ephemeral: true }); - } - timestamps.set(`${message.guild.id}_${message.author.id}`, now); - setTimeout(() => timestamps.delete(`${message.guild.id}_${message.author.id}`), cooldownAmount); - } - } + if (command.cooldown && typeof command.cooldown === 'number') { + if (!cooldowns.has(command.name)) { + cooldowns.set(command.name, new Collection()) + } - if (command.nsfw) { - let [g] = await Guild.findOrCreate({ - where: { - guildId: message.guild.id, - } - }); - - if (!message.channel.nsfw) { - logger.warn(`Commande NSFW utilisée en dehors d"un salon NSFW: ${commandName} par ${message.author.tag}`); - return message.reply("Tu ne peux pas exécuter des commandes NSFW en dehors d\'un salon de ce type !"); - } - - if (!g || !g.toJSON()?.nsfwEnabled) { - logger.warn(`Commandes NSFW désactivées sur le serveur: ${commandName} par ${message.author.tag}`); - return await message.reply("Les commandes NSFW sont désactivées sur ce serveur..."); - } - } + const now = Date.now() + const timestamps = cooldowns.get(command.name) + const cooldownAmount = Math.floor(command.cooldown) * 1000 + + if (!timestamps.has(`${message.guild.id}_${message.author.id}`)) { + timestamps.set(`${message.guild.id}_${message.author.id}`, now) + setTimeout(() => timestamps.delete(`${message.guild.id}_${message.author.id}`), cooldownAmount) + } else { + const expirationTime = timestamps.get(`${message.guild.id}_${message.author.id}`) + cooldownAmount + const timeLeft = (expirationTime - now) / 1000 + if (now < expirationTime && timeLeft > 0.9) { + logger.info(`Cooldown actif pour ${commandName} par ${message.author.tag}, restant: ${timeLeft.toFixed(1)}s`) + return await message.reply({ content: `⏰ Merci d"attendre avant d"utiliser la commande **${command.name}** de nouveau.`, ephemeral: true }) + } + timestamps.set(`${message.guild.id}_${message.author.id}`, now) + setTimeout(() => timestamps.delete(`${message.guild.id}_${message.author.id}`), cooldownAmount) + } + } + + if (command.nsfw) { + const [g] = await Guild.findOrCreate({ + where: { + guildId: message.guild.id + } + }) + + if (!message.channel.nsfw) { + logger.warn(`Commande NSFW utilisée en dehors d"un salon NSFW: ${commandName} par ${message.author.tag}`) + return message.reply("Tu ne peux pas exécuter des commandes NSFW en dehors d'un salon de ce type !") + } - if (command.args && !args.length) { - logger.info(`Arguments manquants pour la commande ${commandName} par ${message.author.tag}`); - let reply = `Tu n"as entré aucun nom de commande correct, ${message.author}!`; - if (command.usage) { - reply += `\nL"usage correct est : \`${prefix}${command.name} ${command.usage}\``; - } - return message.channel.send(reply); - } + if (!g || !g.toJSON()?.nsfwEnabled) { + logger.warn(`Commandes NSFW désactivées sur le serveur: ${commandName} par ${message.author.tag}`) + return await message.reply('Les commandes NSFW sont désactivées sur ce serveur...') + } + } - logger.info(`Exécution de la commande ${commandName} par ${message.author.tag}`); - await command.execute(message, args, commandName); - } catch (error) { - logger.error(`Erreur lors de l"exécution de la commande: ${error.message}`); - message.reply("Désolé, une erreur est survenue lors de l\'exécution de la commande !"); + if (command.args && !args.length) { + logger.info(`Arguments manquants pour la commande ${commandName} par ${message.author.tag}`) + let reply = `Tu n"as entré aucun nom de commande correct, ${message.author}!` + if (command.usage) { + reply += `\nL"usage correct est : \`${prefix}${command.name} ${command.usage}\`` } - }, -}; + return message.channel.send(reply) + } + + logger.info(`Exécution de la commande ${commandName} par ${message.author.tag}`) + await command.execute(message, args, commandName) + } catch (error) { + logger.error(`Erreur lors de l"exécution de la commande: ${error.message}`) + message.reply("Désolé, une erreur est survenue lors de l'exécution de la commande !") + } + } +} diff --git a/handler/buttonhandler.js b/handler/buttonhandler.js index 0fd2d36..05af201 100644 --- a/handler/buttonhandler.js +++ b/handler/buttonhandler.js @@ -1,140 +1,139 @@ -import { ChannelType, PermissionFlagsBits, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js"; -import { Guild, Ticket } from "../schema/schema.js"; +import { ChannelType, PermissionFlagsBits, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from 'discord.js' +import { Guild, Ticket } from '../schema/schema.js' const handleButton = async (interaction) => { - if (!interaction.isButton()) return; - - if (interaction.customId == "ticketcreate") { - try { - await interaction.deferUpdate({ - fetchReply: true, - ephemeral: true - }); - - let [g] = await Guild.findOrCreate({ - where: { - guildId: interaction.guild.id, - } - }); - - let channelexists = await interaction.guild.channels.cache.find(c => c.name == `ticket_${interaction.user.id}`); - - if (channelexists) { - return await interaction.followUp({ - content: `Un ticket a déjà été ouvert pour vous : ${channelexists}.`, - ephemeral: true - }); - } - - let parentTicketChannel = interaction.guild.channels.cache.get(g.ticketCategoryChannelID); - - let ticketchannel = await interaction.guild.channels.create({ - name: `ticket_${interaction.user.id}`, - type: ChannelType.GuildText, - ...(parentTicketChannel && { parent: parentTicketChannel?.id }), - permissionOverwrites: [ - { - id: interaction.guild.id, - deny: [PermissionFlagsBits.ViewChannel], - }, - { - id: interaction.guild.client?.user?.id, - allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.EmbedLinks, PermissionFlagsBits.ReadMessageHistory], - }, - { - id: interaction.user.id, - allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.EmbedLinks, PermissionFlagsBits.AttachFiles, PermissionFlagsBits.ReadMessageHistory], - }, - ], - }); - - await Ticket.create({ - userId: interaction.user.id, - guildId: interaction.guild.id, - channelId: ticketchannel.id - }); - - await interaction.followUp({ - content: `Ticket créé pour vous (${ticketchannel}).`, - ephemeral: true - }); - - } catch (error) { - console.error(error); + if (!interaction.isButton()) return + + if (interaction.customId == 'ticketcreate') { + try { + await interaction.deferUpdate({ + fetchReply: true, + ephemeral: true + }) + + const [g] = await Guild.findOrCreate({ + where: { + guildId: interaction.guild.id } + }) + + const channelexists = await interaction.guild.channels.cache.find(c => c.name == `ticket_${interaction.user.id}`) + + if (channelexists) { + return await interaction.followUp({ + content: `Un ticket a déjà été ouvert pour vous : ${channelexists}.`, + ephemeral: true + }) + } + + const parentTicketChannel = interaction.guild.channels.cache.get(g.ticketCategoryChannelID) + + const ticketchannel = await interaction.guild.channels.create({ + name: `ticket_${interaction.user.id}`, + type: ChannelType.GuildText, + ...(parentTicketChannel && { parent: parentTicketChannel?.id }), + permissionOverwrites: [ + { + id: interaction.guild.id, + deny: [PermissionFlagsBits.ViewChannel] + }, + { + id: interaction.guild.client?.user?.id, + allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.EmbedLinks, PermissionFlagsBits.ReadMessageHistory] + }, + { + id: interaction.user.id, + allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.EmbedLinks, PermissionFlagsBits.AttachFiles, PermissionFlagsBits.ReadMessageHistory] + } + ] + }) + + await Ticket.create({ + userId: interaction.user.id, + guildId: interaction.guild.id, + channelId: ticketchannel.id + }) + + await interaction.followUp({ + content: `Ticket créé pour vous (${ticketchannel}).`, + ephemeral: true + }) + } catch (error) { + console.error(error) } - - if (interaction.customId.startsWith("aide_")) { - try { - await interaction.deferUpdate(); - - const [, action, currentPageStr, totalPagesStr] = interaction.customId.split("_"); - const currentPage = parseInt(currentPageStr, 10); - - const commands = Array.from(interaction.client.commands.values()) - .filter(cmd => !cmd.nsfw && typeof cmd.name === "string") - .sort((a, b) => a.name.localeCompare(b.name)); - - const chunkSize = 10; - const totalCommands = commands.length; - const totalPages = Math.ceil(totalCommands / chunkSize); - - let newPage = currentPage; - if (action === "first") newPage = 0; - else if (action === "prev") newPage = Math.max(0, currentPage - 1); - else if (action === "next") newPage = Math.min(totalPages - 1, currentPage + 1); - else if (action === "last") newPage = totalPages - 1; - - const start = newPage * chunkSize; - const end = start + chunkSize; - const pageCommands = commands.slice(start, end); - const commandList = pageCommands - .map(cmd => `» ${cmd.name} ‣ ${cmd.description || "Aucune description."}`) - .join("\n"); - - const updatedEmbed = new EmbedBuilder() - .setTitle("Commandes") - .setDescription(commandList) - .setColor("Blue") - .setFooter({ text: `Page: ${newPage + 1}/${totalPages}` }); - - const row = new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId(`aide_first_${newPage}_${totalPages}`) - .setLabel("⏮️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(newPage === 0), - new ButtonBuilder() - .setCustomId(`aide_prev_${newPage}_${totalPages}`) - .setLabel("◀️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(newPage === 0), - new ButtonBuilder() - .setCustomId(`aide_next_${newPage}_${totalPages}`) - .setLabel("▶️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(newPage === totalPages - 1), - new ButtonBuilder() - .setCustomId(`aide_last_${newPage}_${totalPages}`) - .setLabel("⏭️") - .setStyle(ButtonStyle.Secondary) - .setDisabled(newPage === totalPages - 1) - ); - - await interaction.editReply({ - embeds: [updatedEmbed], - components: [row], - }); - } catch (error) { - console.error(error); - if (!interaction.deferred && !interaction.replied) { - await interaction.reply({ - content: "Une erreur est survenue lors de la manipulation de ce bouton.", - ephemeral: true, - }); - } - } + } + + if (interaction.customId.startsWith('aide_')) { + try { + await interaction.deferUpdate() + + const [, action, currentPageStr] = interaction.customId.split('_') + const currentPage = parseInt(currentPageStr, 10) + + const commands = Array.from(interaction.client.commands.values()) + .filter(cmd => !cmd.nsfw && typeof cmd.name === 'string') + .sort((a, b) => a.name.localeCompare(b.name)) + + const chunkSize = 10 + const totalCommands = commands.length + const totalPages = Math.ceil(totalCommands / chunkSize) + + let newPage = currentPage + if (action === 'first') newPage = 0 + else if (action === 'prev') newPage = Math.max(0, currentPage - 1) + else if (action === 'next') newPage = Math.min(totalPages - 1, currentPage + 1) + else if (action === 'last') newPage = totalPages - 1 + + const start = newPage * chunkSize + const end = start + chunkSize + const pageCommands = commands.slice(start, end) + const commandList = pageCommands + .map(cmd => `» ${cmd.name} ‣ ${cmd.description || 'Aucune description.'}`) + .join('\n') + + const updatedEmbed = new EmbedBuilder() + .setTitle('Commandes') + .setDescription(commandList) + .setColor('Blue') + .setFooter({ text: `Page: ${newPage + 1}/${totalPages}` }) + + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId(`aide_first_${newPage}_${totalPages}`) + .setLabel('⏮️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(newPage === 0), + new ButtonBuilder() + .setCustomId(`aide_prev_${newPage}_${totalPages}`) + .setLabel('◀️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(newPage === 0), + new ButtonBuilder() + .setCustomId(`aide_next_${newPage}_${totalPages}`) + .setLabel('▶️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(newPage === totalPages - 1), + new ButtonBuilder() + .setCustomId(`aide_last_${newPage}_${totalPages}`) + .setLabel('⏭️') + .setStyle(ButtonStyle.Secondary) + .setDisabled(newPage === totalPages - 1) + ) + + await interaction.editReply({ + embeds: [updatedEmbed], + components: [row] + }) + } catch (error) { + console.error(error) + if (!interaction.deferred && !interaction.replied) { + await interaction.reply({ + content: 'Une erreur est survenue lors de la manipulation de ce bouton.', + ephemeral: true + }) + } } + } } -export default handleButton; +export default handleButton diff --git a/index.js b/index.js index 9efdc1f..e33c0eb 100644 --- a/index.js +++ b/index.js @@ -1,51 +1,51 @@ -import "dotenv/config"; -import fs from "node:fs"; -import path, { dirname } from "node:path"; -import { fileURLToPath } from "url"; -const __dirname = dirname(fileURLToPath(import.meta.url)); +import 'dotenv/config' +import fs from 'node:fs' +import path, { dirname } from 'node:path' +import { fileURLToPath } from 'url' -import { Client, Collection, GatewayIntentBits } from "discord.js"; +import { Client, Collection, GatewayIntentBits } from 'discord.js' +const __dirname = dirname(fileURLToPath(import.meta.url)) const client = new Client({ - intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers] + intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers] }) -client.commands = new Collection(); -client.membersCachedInServer = new Collection(); +client.commands = new Collection() +client.membersCachedInServer = new Collection() -const commandsPath = path.join(__dirname, "commands"); +const commandsPath = path.join(__dirname, 'commands') const commandFolers = fs.readdirSync(commandsPath).filter(file => fs.statSync(path.join(commandsPath, file)).isDirectory()) for (const folder of commandFolers) { - let files = fs.readdirSync(path.join(commandsPath, `${folder}`)).filter(f => f.endsWith(".js")); - for (const file of files) { - const command = (await import(`./commands/${folder}/${file}`)).command; - - if ("name" in command && "execute" in command) { - client.commands.set(command.name, command); - console.log(`✔️ La commande suivante à été chargé : ${command.name}`); - } else { - console.log(`[ATTENTION] La commande "./commands/${folder}/${file}" manque un "name" ou une propriété "execute"`); - } + const files = fs.readdirSync(path.join(commandsPath, `${folder}`)).filter(f => f.endsWith('.js')) + for (const file of files) { + const command = (await import(`./commands/${folder}/${file}`)).command + + if ('name' in command && 'execute' in command) { + client.commands.set(command.name, command) + console.log(`✔️ La commande suivante à été chargé : ${command.name}`) + } else { + console.log(`[ATTENTION] La commande "./commands/${folder}/${file}" manque un "name" ou une propriété "execute"`) } + } } -const eventsPath = path.join(__dirname, "events"); +const eventsPath = path.join(__dirname, 'events') const eventFolers = fs.readdirSync(eventsPath).filter(file => fs.statSync(path.join(eventsPath, file)).isDirectory()) for (const folder of eventFolers) { - let files = fs.readdirSync(path.join(eventsPath, `${folder}`)).filter(f => f.endsWith(".js")); - for (const file of files) { - const event = (await import(`./events/${folder}/${file}`)).event; - - if (event.once) { - client.once(event.name, (...args) => event.execute(...args)); - } else { - client.on(event.name, (...args) => event.execute(...args)); - } - - console.log(`📣 L"évènement suivant à été chargé : ${event.name}`) + const files = fs.readdirSync(path.join(eventsPath, `${folder}`)).filter(f => f.endsWith('.js')) + for (const file of files) { + const event = (await import(`./events/${folder}/${file}`)).event + + if (event.once) { + client.once(event.name, (...args) => event.execute(...args)) + } else { + client.on(event.name, (...args) => event.execute(...args)) } + + console.log(`📣 L"évènement suivant à été chargé : ${event.name}`) + } } -client.login(process.env.BOT_TOKEN); +client.login(process.env.BOT_TOKEN) diff --git a/lang/FR/permissionsFR.js b/lang/FR/permissionsFR.js new file mode 100644 index 0000000..56babbc --- /dev/null +++ b/lang/FR/permissionsFR.js @@ -0,0 +1,48 @@ +const PermissionsFR = { + CREATEINSTANTINVITE: 'Créer une invitation', + BANMEMBERS: 'Bannir des membres', + KICKMEMBERS: 'Expulser des membres', + ADMINISTRATOR: 'Administrateur', + MANAGECHANNELS: 'Gérer les salons', + MANAGEGUILD: 'Gérer le serveur', + ADDREACTIONS: 'Ajouter des réactions', + VIEWAUDITLOG: 'Voir les logs du serveur', + PRIORITYSPEAKER: 'Voix prioritaire', + STREAM: 'Vidéo', + VIEWCHANNEL: 'Voir les salons', + SENDMESSAGES: 'Envoyer des messages', + SENDTTSMESSAGES: 'Envoyer des messages de synthèse vocale', + MANAGEMESSAGES: 'Gérer les messages', + EMBEDLINKS: 'Intégrer des liens', + ATTACHFILES: 'Joindre des fichiers', + READMESSAGEHISTORY: 'Voir les anciens messages', + MENTIONEVERYONE: 'Mentionner @everyone, @here et tous les rôles', + USEEXTERNALEMOJIS: 'Utiliser des emojis externes', + VIEWGUILDINSIGHTS: 'Voir les analyses de serveur', + CONNECT: 'Se connecter', + SPEAK: 'Parler', + MUTEMEMBERS: 'Rendre les membres muets', + DEAFENMEMBERS: 'Mettre en sourdine des membres', + MOVEMEMBERS: 'Déplacer des membres', + USEVAD: 'Utiliser la Détection de la voix', + CHANGENICKNAME: 'Chnager le pseudo', + MANAGENICKNAMES: 'Gérer les pseudos', + MANAGEROLES: 'Gérer les rôles', + MANAGEWEBHOOKS: 'Gérer les webhooks', + MANAGEGUILDEXPRESSIONS: 'Gérer les expressions', + USEAPPLICATIONCOMMANDS: 'Utiliser les commandes de l\' application', + REQUESTTOSPEAK: 'Demande de prise de parole', + MANAGEEVENTS: 'Gérer les évènements', + MANAGETHREADS: 'Gérer les fils', + CREATEPUBLICTHREADS: 'Créer des fils publics', + CREATEPRIVATETHREADS: 'Créer des fils privés', + USEEXTERNALSTICKERS: 'Utiliser des autocollants externes', + SENDMESSAGESINTHREADS: 'Envoyer des messages dans les fils', + USEEMBEDDEDACTIVITIES: 'Utiliser les Activités', + MODERATEMEMBERS: 'Exclure temporairement des membres', + VIEWCREATORMONETIZATIONANALYTICS: 'Voir les analyses de la monétisation du serveur', + USESOUNDBOARD: 'Utiliser Soundboard', + USEEXTERNALSOUNDS: 'Utiliser des sons externes', + SENDVOICEMESSAGES: 'Envoyer des messages vocaux' +} +export default PermissionsFR diff --git a/package.json b/package.json index 8c4ff13..abed00f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mrbot", - "version": "3.1.1", + "version": "3.2.0", "type": "module", "description": "Mr Bot", "main": "index.js", @@ -11,12 +11,17 @@ "author": "Ludo-code", "license": "ISC", "dependencies": { - "discord.js": "^14.17.3", + "discord.js": "^14.18.0", "dotenv": "^16.4.7", "mariadb": "^3.4.0", "node-fetch": "^3.3.2", "sequelize": "^6.37.5", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "eslint": "^9.21.0", + "globals": "^16.0.0" } } diff --git a/permissionsFR.js b/permissionsFR.js deleted file mode 100644 index 5fc0038..0000000 --- a/permissionsFR.js +++ /dev/null @@ -1,48 +0,0 @@ -const PermissionsFR = { - CREATEINSTANTINVITE: "Créer une invitation", - KICKMEMBERS: "Expulser des membres", - BANMEMBERS: "Bannir des membres", - ADMINISTRATOR: "Administrateur", - MANAGECHANNELS: "Gérer les salons", - MANAGEGUILD: "Gérer le serveur", - ADDREACTIONS: "Ajouter des réactions", - VIEWAUDITLOG: "Voir les logs du serveur", - PRIORITYSPEAKER: "Voix prioritaire", - STREAM: "Vidéo", - VIEWCHANNEL: "Voir les salons", - SENDMESSAGES: "Envoyer des messages", - SENDTTSMESSAGES: "Envoyer des messages de synthèse vocale", - MANAGEMESSAGES: "Gérer les messages", - EMBEDLINKS: "Intégrer des liens", - ATTACHFILES: "Joindre des fichiers", - READMESSAGEHISTORY: "Voir les anciens messages", - MENTIONEVERYONE: "Mentionner @everyone, @here et tous les rôles", - USEEXTERNALEMOJIS: "Utiliser des emojis externes", - VIEWGUILDINSIGHTS: "Voir les analyses de serveur", - CONNECT: "Se connecter", - SPEAK: "Parler", - MUTEMEMBERS: "Rendre les membres muets", - DEAFENMEMBERS: "Mettre en sourdine des membres", - MOVEMEMBERS: "Déplacer des membres", - USEVAD: "Utiliser la Détection de la voix", - CHANGENICKNAME: "Chnager le pseudo", - MANAGENICKNAMES: "Gérer les pseudos", - MANAGEROLES: "Gérer les rôles", - MANAGEWEBHOOKS: "Gérer les webhooks", - MANAGEGUILDEXPRESSIONS: "Gérer les expressions", - USEAPPLICATIONCOMMANDS: "Utiliser les commandes de l\' application", - REQUESTTOSPEAK: "Demande de prise de parole", - MANAGEEVENTS: "Gérer les évènements", - MANAGETHREADS: "Gérer les fils", - CREATEPUBLICTHREADS: "Créer des fils publics", - CREATEPRIVATETHREADS: "Créer des fils privés", - USEEXTERNALSTICKERS: "Utiliser des autocollants externes", - SENDMESSAGESINTHREADS: "Envoyer des messages dans les fils", - USEEMBEDDEDACTIVITIES: "Utiliser les Activités", - MODERATEMEMBERS: "Exclure temporairement des membres", - VIEWCREATORMONETIZATIONANALYTICS: "Voir les analyses de la monétisation du serveur", - USESOUNDBOARD: "Utiliser Soundboard", - USEEXTERNALSOUNDS: "Utiliser des sons externes", - SENDVOICEMESSAGES: "Envoyer des messages vocaux", - }; - export default PermissionsFR; \ No newline at end of file diff --git a/schema/schema.js b/schema/schema.js index d42c7db..a04e8e9 100644 --- a/schema/schema.js +++ b/schema/schema.js @@ -1,32 +1,49 @@ -import { DataTypes, Sequelize } from "sequelize"; -import "dotenv/config"; +import { DataTypes, Sequelize } from 'sequelize' +import 'dotenv/config' const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USERNAME, process.env.DB_PASSWORD, { - dialect: process.env.DB_DIALECT, - host: process.env.DB_HOST, - port: process.env.DB_PORT, - logging: () => {} -}); + dialect: process.env.DB_DIALECT, + host: process.env.DB_HOST, + port: process.env.DB_PORT, + logging: () => {} +}) try { - await sequelize.authenticate(); - console.log("Connection à la bdd réussi !"); -} catch (error) { - console.log("Connection à la base de donné en échec"); + await sequelize.authenticate() + console.log('Connection à la bdd réussi !') +} catch { + console.log('Connection à la base de donné en échec') } -const Guild = sequelize.define("Guild", { - guildId: DataTypes.STRING, - ticketCategoryChannelID: DataTypes.STRING, - nsfwEnabled: DataTypes.BOOLEAN, -}); +const Guild = sequelize.define('Guild', { + guildId: { + type: DataTypes.STRING + }, + ticketCategoryChannelID: { + type: DataTypes.STRING + }, + nsfwEnabled: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + defaultLanguage: { + type: DataTypes.STRING, + defaultValue: 'FR' + } +}) -const Ticket = sequelize.define("Ticket", { - userId: DataTypes.STRING, - channelId: DataTypes.STRING, - guildId: DataTypes.STRING, -}); +const Ticket = sequelize.define('Ticket', { + userId: { + type: DataTypes.STRING + }, + channelId: { + type: DataTypes.STRING + }, + guildId: { + type: DataTypes.STRING + } +}) -await sequelize.sync(); +await sequelize.sync() -export { Guild, Ticket }; +export { Guild, Ticket }