Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions .github/workflows/super-linter.yml
Original file line number Diff line number Diff line change
@@ -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


2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
12 changes: 6 additions & 6 deletions changelogs.js
Original file line number Diff line number Diff line change
@@ -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'

];
]
56 changes: 28 additions & 28 deletions commands/admin/clear.js
Original file line number Diff line number Diff line change
@@ -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: "<number>",
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: '<number>',
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}\``)
}
}
}
42 changes: 21 additions & 21 deletions commands/admin/delete_complete.js
Original file line number Diff line number Diff line change
@@ -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 <t:${Math.round(Date.now() / 1000 + 15)}:R>`);
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 <t:${Math.round(Date.now() / 1000 + 15)}:R>`)
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}\``)
}
}
}
45 changes: 22 additions & 23 deletions commands/admin/nsfw.js
Original file line number Diff line number Diff line change
@@ -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: "<actif|inactif>",
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: '<actif|inactif>',
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.`)
}
}
71 changes: 35 additions & 36 deletions commands/admin/ticket-category.js
Original file line number Diff line number Diff line change
@@ -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: "<category_channel>",
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: '<category_channel>',
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.')
}
}
}
66 changes: 33 additions & 33 deletions commands/admin/ticket-install.js
Original file line number Diff line number Diff line change
@@ -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.`)
}
}
}
Loading