/* * MIT License * * Copyright (c) 2022- Minteck * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ const fs = require('fs'); const {MessageActionRow, MessageButton, MessageSelectMenu, MessageEmbed} = require('discord.js'); const admin = fs.readFileSync("./config/admin.txt").toString().trim(); const list = Object.keys(JSON.parse(fs.readFileSync("./data/data.json").toString())); const getResult = require('../modules/colorfind'); const getEmbed = require('../modules/embed'); const getPixel = require("../modules/pixel"); const getPublic = require('../modules/public'); const official = fs.readFileSync("./config/official.txt").toString().replace(/\r\n/g, "\n").split("\n"); const fpserver = fs.readFileSync("./config/fpserver.txt").toString().trim(); module.exports = async (interaction) => { if (interaction.options.getString('query') !== null) { query = interaction.options.getString('query').toLowerCase(); result = getResult(query, interaction.user.id, interaction.guild ? interaction.guild.id : 0); if (result.results.length > 0 && getEmbed(result.results[0], interaction.user.id, interaction.guild ? interaction.guild.id : 0) !== false) { if (statsQueries[result.results[0]] !== undefined) { if (!statsQueries[result.results[0]].includes(query)) { statsQueries[result.results[0]].push(query); } } else { statsQueries[result.results[0]] = [ query ]; } fs.writeFile("./stats/queries.json", JSON.stringify(statsQueries), () => {}); if (result.results[0].toLowerCase().trim() === query.toLowerCase().trim()) { keys = [null, result.results[0]]; if (statsPonies[keys[1]] !== undefined) { statsPonies[keys[1]]++; } else { statsPonies[keys[1]] = 1; } fs.writeFile("./stats/ponies.json", JSON.stringify(statsPonies), () => {}); if (interaction.guild) { row = new MessageActionRow() .addComponents( getPublic(interaction, keys), new MessageButton() .setLabel(l("Read More", "Lire plus", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .setStyle("LINK") .setURL("https://mlp.fandom.com/wiki/" + encodeURI(keys[1])), new MessageButton() .setCustomId("pony.pixel|" + keys[1]) .setLabel("Pixel Art") .setDisabled(!fs.existsSync("./pixel/" + keys[1].toLowerCase())) .setStyle("SECONDARY"), new MessageButton() .setCustomId("result.report|" + keys[1]) .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .setStyle("DANGER") ) } else { row = new MessageActionRow() .addComponents( new MessageButton() .setLabel(l("Read More", "Lire plus", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .setStyle("LINK") .setURL("https://mlp.fandom.com/wiki/" + encodeURI(keys[1])), new MessageButton() .setCustomId("pony.pixel|" + keys[1]) .setLabel("Pixel Art") .setDisabled(!fs.existsSync("./pixel/" + keys[1].toLowerCase())) .setStyle("SECONDARY"), new MessageButton() .setCustomId("result.report|" + keys[1]) .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .setStyle("DANGER") ) } console.log("Replying (embed)"); await interaction.reply({ ephemeral: interaction.guild !== null, embeds: [ getEmbed(keys[1], interaction.user.id, interaction.guild ? interaction.guild.id : 0, false, interaction.user, interaction.member, interaction.guild) ], components: [ row ] }); } else { console.log("Replying (buttons)"); await interaction.reply({ ephemeral: interaction.guild !== null, embeds: [ new MessageEmbed() .setColor('#d6dc28') .setTitle(l("Results for", "Résultats pour", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " " + result.query) .setDescription(l("Here are the 5 first results corresponding to your criteria.", "Voici les 5 premiers résultats correspondants à vos critères.", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .addField(l("Your conditions:", "Vos conditions :", interaction.user.id, interaction.guild ? interaction.guild.id : 0), result.full) ], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId("pony.display|" + result.first[0]) .setLabel(result.first[0]) .setStyle(result.exact.includes(result.first[0]) ? "PRIMARY" : "SECONDARY"), new MessageButton() .setCustomId("pony.display|" + result.first[1]) .setLabel(result.first[1]) .setStyle(result.exact.includes(result.first[1]) ? "PRIMARY" : "SECONDARY"), new MessageButton() .setCustomId("pony.display|" + result.first[2]) .setLabel(result.first[2]) .setStyle(result.exact.includes(result.first[2]) ? "PRIMARY" : "SECONDARY"), new MessageButton() .setCustomId("pony.display|" + result.first[3]) .setLabel(result.first[3]) .setStyle(result.exact.includes(result.first[3]) ? "PRIMARY" : "SECONDARY"), new MessageButton() .setCustomId("pony.display|" + result.first[4]) .setLabel(result.first[4]) .setStyle(result.exact.includes(result.first[4]) ? "PRIMARY" : "SECONDARY"), ), ] }); } } else { console.log("Replying (no results)"); await interaction.reply({ ephemeral: interaction.guild !== null, embeds: [ new MessageEmbed() .setColor('#dc2828') .setTitle(l("Results for", "Résultats pour", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " " + result.query) .setDescription(l("No results found. Please try with other criteria.", "Aucun résultat trouvé. Essayez avec d'autres critères.", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) ], 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 ? interaction.guild.id : 0)) .setStyle("SECONDARY"), new MessageButton() .setCustomId("result.report|" + query) .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) .setStyle("DANGER") ) ] }); } } else { guild = interaction.guild; gid = interaction.guild ? interaction.guild.id : 0; uid = interaction.user.id; interaction.reply({ ephemeral: guild !== null, embeds: [ new MessageEmbed() .setColor('#d6dc28') .setTitle(l("Ponyfind's `/color` help", "Aide de la commande `/color` de Ponyfind", uid, guild ? gid : 0)) .setDescription(l("If this is the first time you want to use the `/color` command, you need to know how it works. This commands search for ponies by their mane/eyes/coat color(s), using a syntax like `[item]:[color]` (e.g. `mane:blue`).", "Si c'est la première fois que vous voulez utiliser la commande `/color`, vous devez savoir comment elle fonctionne. Cette commande permet de chercher des poneys par la/les couleur(s) de leur crinière/yeux/fourrure, en utilisant une syntaxe du style `[élément]:[couleur]` (par exemple `crinière:bleu`).", uid, guild ? gid : 0)) .addFields([ { name: l("Supported Colors", "Couleurs supportées", uid, guild ? gid : 0), value: l("`white`, `black`, `gray`, `red`, `orange`, `yellow`, `green`, `blue`, `purple`, `pink`, `brown`", "`blanc`, `noir`, `gris`, `rouge`, `orange`, `jaune`, `vert`, `bleu`, `violet`, `rose`, `marron`", uid, guild ? gid : 0) }, { name: l("Supported Items", "Éléments supportés", uid, guild ? gid : 0), value: l("`coat`, `mane`, `eyes`", "`fourrure`, `crinière`, `yeux`", uid, guild ? gid : 0) }, { name: l("Examples", "Exemples", uid, guild ? gid : 0), value: l("· `eyes:purple` shows all ponies with purple eyes\n· `coat:gray mane:yellow` shows all ponies with **both** a gray coat and yellow mane\n· `mane:red mane:yellow` shows all ponies with **both** a red and yellow mane", "· `yeux:violet` affiche tous les poneys avec des yeux violets\n· `fourrure:gris crinière:jaune` affiche tous les poneys avec **à la fois** une fourrure grise et une crinière jaune\n· `crinière:rouge crinière:jaune` affiche tous les poneys avec une crinière **à la fois** rouge et jaune", uid, guild ? gid : 0) } ]) .setFooter(l("made with ♥ by Minteck, a My Little Pony fan", "fait avec ♥ par Minteck, une fan de My Little Pony", uid, guild ? gid : 0)) ] }); } }