ipdbot/commands/message.js
2022-04-18 15:32:07 +02:00

219 lines
No EOL
10 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const { client, logch } = require("../index.js");
module.exports = {
name: 'message',
description: "Permet d'envoyer des messages avec le bot",
execute(message, args) {
// Prompt help
if (!args[0] || args[0] == "help" || args[0] == "h") {
message.channel.send(`
Aide à propos de \`.message\` :
Pour utiliser la commande il vous suffit d'utiliser un des arguments suivants :
> list *liste l'ensemble des messages envoyés par le bot en indiquant l'ID du message*
> send ChannelID/nomDuChannel le message que vous souhaitez envoyer
> edit MessageID (trouvable grâce à l'argument list) nouveau contenu du message
> add MessageID 🙂 @Role *ajoute la réaction 🙂 en dessous du message et donne le @Role à ceux qui cliquent dessus*
> rem MessageID 🙂 *supprime la réaction 🙂 en dessous du message*
> delete MessageID *supprime le message choisi (IRREVERSIBLE)*`);
}
// list messages
else if (args[0] == "list") {
const listMsg = fs.readdirSync(`./data/messages/`).filter(file => file.endsWith('.json'));
console.log(listMsg);
if (listMsg.length == 0) {
console.log("pas de messages envoyés");
return message.channel.send("Aucun message n'a été envoyé via le bot");
}
nbMessages = 0;
messagetosend = "Liste des messages envoyés via le bot :\n";
for (const msg of listMsg) {
if (messagetosend.length >= 1400) {
message.channel.send(messagetosend);
messagetosend = "";
}
msgFileContent = JSON.parse(fs.readFileSync(path.resolve(`./data/messages/${msg}`)));
if (!msgFileContent.deleted) {
nbMessages += 1;
messagetosend += ` - ${msgFileContent.id} dans <#${msgFileContent.channelid}> : *"${msgFileContent.content.slice(0, 30)}..."*\n`
}
}
messagetosend += `${nbMessages} message(s) ont été envoyés via le bot`
message.channel.send(messagetosend)
}
// send message
else if (args[0] == "send") {
if (!args[2]) return message.channel.send("Merci de vérifier d'entrer un channel et un message à envoyer (.message help)")
// Check if this channel exists
channeltosendname = message.guild.channels.cache.find(channel => channel.name.toLowerCase() == args[1])
channeltosendid = client.channels.cache.get(args[1]);
if (channeltosendname) {
channeltosend = channeltosendname;
}
else if (channeltosendid) {
channeltosend = channeltosendid;
}
else return message.channel.send("Merci de vérifier d'avoir entré un nom de channel (ou ID) valide")
actualtimestamp = + new Date();
args.splice(0, 2);
messagecontent = args.join(" ");
channeltosend.send(messagecontent).then(sent => {
messageinfo = {
id: `${sent.channel.id}o${sent.id}`,
deleted: false,
channelid: sent.channel.id,
content: messagecontent,
created: actualtimestamp,
lastChange: actualtimestamp,
reactnumber: 0
}
const jsonStringmsg = JSON.stringify(messageinfo);
fs.writeFile(`./data/messages/${sent.channel.id}o${sent.id}.json`, jsonStringmsg, err => {
if (err) {
console.log(`Error writing message`, err)
} else {
console.log(`Successfully wrote message`)
}
});
message.react("✅");
message.channel.send("Message envoyé.")
});
}
// edit message
else if (args[0] == "edit") {
if (!args[2]) return message.channel.send("Merci de vérifier d'entrer un id de message correct et un nouveau message(.message help)");
try {
idChMsg = args[1].split(/\o+/);
argsmessage = args.slice(0);
argsmessage.splice(0, 2);
newcontent = argsmessage.join(" ");
client.channels.cache.get(idChMsg[0]).messages.fetch(idChMsg[1]).then(msg => msg.edit(newcontent));
// update message file
updatemsg = JSON.parse(fs.readFileSync(path.resolve(`./data/messages/${args[1]}.json`)));
actualtimestamp = + new Date();
updatemsg.content = newcontent;
updatemsg.lastChange = actualtimestamp;
const jsonStringmsg = JSON.stringify(updatemsg);
fs.writeFile(`./data/messages/${args[1]}.json`, jsonStringmsg, err => {
if (err) {
console.log(`Error writing message`, err)
} else {
console.log(`Successfully wrote message`)
}
})
message.react("✅");
message.channel.send("Message modifié.")
} catch (err) {
console.error(err);
return message.channel.send("Merci de vérifier d'entrer un id de message correct (.message list)");
}
}
// delete message
else if (args[0] == "delete" || args[0] == "del") {
if (!args[1]) return message.channel.send("Merci de vérifier d'entrer un id de message correct (.message help)");
try {
idChMsg = args[1].split(/\o+/);
client.channels.cache.get(idChMsg[0]).messages.fetch(idChMsg[1]).then(msg => msg.delete());
// update message file
updatemsg = JSON.parse(fs.readFileSync(path.resolve(`./data/messages/${args[1]}.json`)));
updatemsg.deleted = true;
actualtimestamp = + new Date();
updatemsg.lastChange = actualtimestamp;
const jsonStringmsg = JSON.stringify(updatemsg);
fs.writeFile(`./data/messages/${args[1]}.json`, jsonStringmsg, err => {
if (err) {
console.log(`Error writing message`, err)
} else {
console.log(`Successfully wrote message`)
}
})
message.react("✅");
message.channel.send("Message supprimé.")
} catch (err) {
console.error(err);
return message.channel.send("Merci de vérifier d'entrer un id de message correct (.message list)");
}
}
// add reaction
else if (args[0] == "add") {
if (!args[2]) return message.channel.send("Merci de mettre une emote valide");
try {
idChMsg = args[1].split(/\o+/);
client.channels.cache.get(idChMsg[0]).messages.fetch(idChMsg[1]).then(msg => msg.react(args[2]));
// update message file
updatemsg = JSON.parse(fs.readFileSync(path.resolve(`./data/messages/${args[1]}.json`)));
updatemsg.reactnumber += 1;
eval(`updatemsg.emoj${updatemsg.reactnumber} = args[2];`);
if (args[3] && args[3].length > 0) {
roleID = args[3].replace('<@&', '').replace('>', '');
rolefound = message.guild.roles.cache.find(r => r.id == roleID);
if (rolefound) {
eval(`updatemsg.action${updatemsg.reactnumber} = roleID;`);
}
else {
message.channel.send("Ceci n'est pas un rôle, l'emoj n'a donc été associé à aucun rôle");
eval(`updatemsg.action${updatemsg.reactnumber} = "none";`);
}
}
else {
message.channel.send("Vous n'avez pas précisé de rôle, l'emoj n'a donc été associé à aucun rôle");
eval(`updatemsg.action${updatemsg.reactnumber} = "none";`);
}
actualtimestamp = + new Date();
updatemsg.lastChange = actualtimestamp;
const jsonStringmsg = JSON.stringify(updatemsg);
fs.writeFile(`./data/messages/${args[1]}.json`, jsonStringmsg, err => {
if (err) {
console.log(`Error writing message`, err)
} else {
console.log(`Successfully wrote message`)
}
})
message.react("✅");
message.channel.send("Réaction ajoutée.")
} catch (err) {
console.error(err);
return message.channel.send("Merci de vérifier d'entrer un id de message correct (.message list) et/ou une emote valide");
}
}
// remove reaction
else if (args[0] == "rem") {
if (!args[2]) return message.channel.send("Merci de mettre une emote valide");
try {
idChMsg = args[1].split(/\o+/);
client.channels.cache.get(idChMsg[0]).messages.fetch(idChMsg[1]).then(msg => msg.reactions.cache.find(reaction => reaction.emoji.name == args[2]).remove());
// update message file
updatemsg = JSON.parse(fs.readFileSync(path.resolve(`./data/messages/${args[1]}.json`)));
for (let index = 1; index < updatemsg.reactnumber + 1; index++) {
eval(`if (updatemsg.emoj${index} == args[2]) updatemsg.emoj${index} = "Deleted"`);
}
actualtimestamp = + new Date();
updatemsg.lastChange = actualtimestamp;
const jsonStringmsg = JSON.stringify(updatemsg);
fs.writeFile(`./data/messages/${args[1]}.json`, jsonStringmsg, err => {
if (err) {
console.log(`Error writing message`, err)
} else {
console.log(`Successfully wrote message`)
}
})
message.react("✅");
message.channel.send("Réaction supprimée.")
} catch (err) {
console.error(err);
return message.channel.send("Merci de vérifier d'entrer un id de message correct (.message list) et/ou une emote valide");
}
}
}
}