diff options
author | Minteck <contact@minteck.org> | 2022-01-08 21:47:45 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-01-08 21:47:45 +0100 |
commit | be6c790e43be36cfa6669110c7064a67ad3c4623 (patch) | |
tree | 3e81dd5a8caaf3f9c9db6b21f858167f01983119 /handler/command.js | |
parent | ac2dea4a23ca72001e41c1dbf66ff1a0d01e217c (diff) | |
download | ponyfind-be6c790e43be36cfa6669110c7064a67ad3c4623.tar.gz ponyfind-be6c790e43be36cfa6669110c7064a67ad3c4623.tar.bz2 ponyfind-be6c790e43be36cfa6669110c7064a67ad3c4623.zip |
Update
Diffstat (limited to 'handler/command.js')
-rw-r--r--[-rwxr-xr-x] | handler/command.js | 168 |
1 files changed, 137 insertions, 31 deletions
diff --git a/handler/command.js b/handler/command.js index c1cfe22..da345eb 100755..100644 --- a/handler/command.js +++ b/handler/command.js @@ -1,10 +1,96 @@ const fs = require('fs');
const { MessageActionRow, MessageButton, MessageSelectMenu, MessageEmbed } = require('discord.js');
-const getResult = require('../result');
-const getEmbed = require('../embed');
+const admin = fs.readFileSync("./config/admin.txt");
+
+const getResult = require('../modules/result');
+const getEmbed = require('../modules/embed');
+const getPixel = require("../modules/pixel");
+
+const official = fs.readFileSync("./config/official.txt").toString().replace(/\r\n/g, "\n").split("\n");
+const fpserver = fs.readFileSync("./config/fpserver.txt").toString().trim();
+
+function bytesToPretty(bytes) {
+ if (bytes > 1000) {
+ if (bytes > 1000000) {
+ return (bytes / 1000000).toFixed(2) + " MB";
+ } else {
+ return (bytes / 1000).toFixed(2) + " KB";
+ }
+ } else {
+ return bytes + " B";
+ }
+}
+
+function secondsToPretty(seconds) {
+ if (seconds > 60) {
+ if (seconds > 3600) {
+ if (seconds > 216000) {
+ return Math.floor(seconds / 216000) + " day" + (Math.floor(seconds / 216000) > 1 ? "s" : "");
+ } else {
+ return Math.floor(seconds / 3600) + " hour" + (Math.floor(seconds / 3600) > 1 ? "s" : "");
+ }
+ } else {
+ return Math.floor(seconds / 60) + " minute" + (Math.floor(seconds / 60) > 1 ? "s" : "");
+ }
+ } else {
+ return Math.floor(seconds) + " second" + (Math.floor(seconds) > 1 ? "s" : "");
+ }
+}
module.exports = async (interaction) => {
+ if (interaction.commandName === 'stats') {
+ let suffix = "";
+ if (official.includes(interaction.guild.id)) {
+ suffix = ".official-" + interaction.guild.id;
+ } else {
+ if (interaction.guild.id === fpserver) {
+ suffix = ".francoponies-epk" + fs.readFileSync("./config/fpexperience.txt").toString();
+ }
+ }
+
+ let size = 0;
+ for (let file of fs.readdirSync("./data")) size += fs.readFileSync("./data/" + file).length;
+ let sizep = bytesToPretty(size);
+
+ let fields = [
+ { name: l("Software version", "Version du logiciel"), value: "v" + fs.readFileSync("./config/version.txt") + "." + fs.readFileSync("./.git/refs/heads/trunk").toString().substr(0, 8) + suffix, inline: false },
+ { name: l("Kernel version", "Version du noyau"), value: process.version, inline: true },
+ { name: l("Experience channel", "Canal d'expériences"), value: channel, inline: true },
+ { name: l("Known ponies", "Poneys connus"), value: Object.keys(JSON.parse(fs.readFileSync("./data/data.json").toString())).length.toString(), inline: true },
+ { name: l("Awaiting issue reports", "Rapports de problèmes en attente"), value: fs.readdirSync("./reports").length.toString(), inline: true },
+ { name: l("Database size", "Taille de la base de données"), value: sizep, inline: true },
+ { name: l("Memory usage", "Utilisation de la mémoire"), value: bytesToPretty(process.memoryUsage().rss + process.memoryUsage().heapTotal + process.memoryUsage().external + process.memoryUsage().arrayBuffers), inline: true },
+ { name: l("Uptime", "Durée de fonctionnement"), value: secondsToPretty(process.uptime()), inline: true },
+ ];
+
+ await interaction.reply({
+ ephemeral: true,
+ embeds: [
+ new MessageEmbed()
+ .setColor('#d6dc28')
+ .setTitle(l("Bot stats", "Statistiques du robot", interaction.user.id, interaction.guild.id))
+ .setDescription(l("Ponyfind is a Discord bot that helps you get easy and fast access to data relative to My Little Pony (generations 4 and 5).", "Ponyfind est un robot Discord qui vous aide à obtenir un accès simple et rapide à des données relatives à My Little Pony (générations 4 et 5).", interaction.user.id, interaction.guild.id))
+ .addFields(fields)
+ .setFooter(l("made with ♥ by Minteck, a My Little Pony fan", "fait avec ♥ par Minteck, une fan de My Little Pony", interaction.user.id, interaction.guild.id))
+ .setThumbnail(client.user.avatarURL())
+ ],
+ components: [
+ new MessageActionRow()
+ .addComponents(
+ new MessageButton()
+ .setURL(fs.readFileSync("./config/source.txt").toString())
+ .setLabel(l("Browse source code", "Explorer le code source", interaction.user.id, interaction.guild.id))
+ .setStyle("LINK"),
+ new MessageButton()
+ .setURL(fs.readFileSync("./config/invite.txt").toString())
+ .setLabel(l("Invite to your server", "Inviter sur votre serveur", interaction.user.id, interaction.guild.id))
+ .setStyle("LINK"),
+ )
+ ]
+ });
+ }
+
if (interaction.commandName === 'lang') {
lang = interaction.options.getString('locale');
if (lang === "fr") {
@@ -12,11 +98,11 @@ module.exports = async (interaction) => { } else {
langs[interaction.user.id] = "en";
}
- fs.writeFileSync("./userdata.json", JSON.stringify(langs, null, 4));
+ fs.writeFileSync("./user/userdata.json", JSON.stringify(langs, null, 4));
if (typeof servers[interaction.guild.id] !== "undefined") {
if (lang === "fr") {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#28dc46')
@@ -26,7 +112,7 @@ module.exports = async (interaction) => { });
} else {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#28dc46')
@@ -37,7 +123,7 @@ module.exports = async (interaction) => { }
} else {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#28dc46')
@@ -49,6 +135,19 @@ module.exports = async (interaction) => { }
if (interaction.commandName === 'serverlang') {
+ if (!interaction.guild.members.resolve(interaction.user).permissions.has("MANAGE_SERVER") || interaction.user.id === admin) {
+ await interaction.reply({
+ ephemeral: true,
+ embeds: [
+ new MessageEmbed()
+ .setColor('#dc2828')
+ .setTitle(l("Permission denied", "Accès refusé", interaction.user.id, interaction.guild.id))
+ .setDescription(l("You don't have sufficient permission to run this command. You need to be a bot administrator, or have the **Manage Server** permission.", "Vous ne disposez pas de permissions suffisantes pour exécuter cette commande. Vous devez être administrateur(ice) de robot, ou avoir la permission **Gérer le serveur**.", interaction.user.id, interaction.guild.id))
+ ]
+ });
+ return;
+ }
+
lang = interaction.options.getString('locale');
if (lang === "fr") {
servers[interaction.guild.id] = "fr";
@@ -57,10 +156,10 @@ module.exports = async (interaction) => { } else {
delete servers[interaction.guild.id];
}
- fs.writeFileSync("./servers.json", JSON.stringify(servers, null, 4));
+ fs.writeFileSync("./user/servers.json", JSON.stringify(servers, null, 4));
if (lang === "en" || lang === "fr") {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#28dc46')
@@ -70,7 +169,7 @@ module.exports = async (interaction) => { });
} else {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#28dc46')
@@ -87,23 +186,30 @@ module.exports = async (interaction) => { if (result.results.length > 0 && getEmbed(result.results[0], interaction.user.id, interaction.guild.id) !== false) {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
- getEmbed(result.results[0], interaction.user.id, interaction.guild.id)
+ new MessageEmbed()
+ .setColor('#d6dc28')
+ .setTitle(l("Results for", "Résultats pour", interaction.user.id, interaction.guild.id) + " \"" + query + "\"")
+ .setDescription(l("Here are the 3 first results corresponding to your query.", "Voici les 3 premiers résultats correspondants à votre recherche.", interaction.user.id, interaction.guild.id))
],
components: [
new MessageActionRow()
.addComponents(
new MessageButton()
- .setLabel(l("Read More", "Lire plus", interaction.user.id, interaction.guild.id))
- .setStyle("LINK")
- .setURL("https://mlp.fandom.com/wiki/" + encodeURI(result.results[0])),
+ .setCustomId("pony.display|" + result.first[0])
+ .setLabel(result.first[0])
+ .setStyle("PRIMARY"),
new MessageButton()
- .setCustomId("pony.pixel|" + result.results[0])
- .setLabel("Pixel Art")
- .setStyle("SECONDARY"),
+ .setCustomId("pony.display|" + result.first[1])
+ .setLabel(result.first[1])
+ .setStyle("PRIMARY"),
new MessageButton()
- .setCustomId("result.report|" + result.results[0])
+ .setCustomId("pony.display|" + result.first[2])
+ .setLabel(result.first[2])
+ .setStyle("PRIMARY"),
+ new MessageButton()
+ .setCustomId("result.report|" + query)
.setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild.id))
.setStyle("DANGER")
)
@@ -111,7 +217,7 @@ module.exports = async (interaction) => { });
} else {
await interaction.reply({
- ephemeral: false,
+ ephemeral: true,
embeds: [
new MessageEmbed()
.setColor('#dc2828')
@@ -119,18 +225,18 @@ module.exports = async (interaction) => { .setDescription(l("No results found. Please try with other keywords.", "Aucun résultat trouvé. Essayez avec d'autres mots clés.", interaction.user.id, interaction.guild.id))
],
components: [
- new MessageActionRow()
- .addComponents(
- new MessageButton()
- .setCustomId("result.suggest|" + query)
- .setLabel(l("Suggest a missing pony", "Proposer un poney manquant", interaction.user.id, interaction.guild.id))
- .setStyle("SECONDARY"),
- new MessageButton()
- .setCustomId("result.report")
- .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild.id))
- .setStyle("DANGER")
- )
- ]
+ new MessageActionRow()
+ .addComponents(
+ new MessageButton()
+ .setCustomId("result.suggest|" + query)
+ .setLabel(l("Suggest a missing pony", "Proposer un poney manquant", interaction.user.id, interaction.guild.id))
+ .setStyle("SECONDARY"),
+ new MessageButton()
+ .setCustomId("result.report|" + query)
+ .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild.id))
+ .setStyle("DANGER")
+ )
+ ]
});
}
}
|