diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/episodepublic.js | 16 | ||||
-rw-r--r-- | modules/episodereply.js | 75 | ||||
-rw-r--r-- | modules/findepisode.js | 52 | ||||
-rw-r--r-- | modules/registers.js | 44 |
4 files changed, 164 insertions, 23 deletions
diff --git a/modules/episodepublic.js b/modules/episodepublic.js new file mode 100644 index 0000000..73318f5 --- /dev/null +++ b/modules/episodepublic.js @@ -0,0 +1,16 @@ +const { MessageButton } = require("discord.js"); + +module.exports = (interaction, series, episode) => { + if (typeof cooldowns[interaction.user.id] !== "undefined" && new Date() - cooldowns[interaction.user.id] < 30000) { + return new MessageButton() + .setCustomId("episode.public|" + series + "|" + episode) + .setLabel(l("Wait " + Math.ceil((30000 - (new Date() - cooldowns[interaction.user.id]))/1000) + " seconds", "Patientez " + Math.ceil((30000 - (new Date() - cooldowns[interaction.user.id]))/1000) + " secondes", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) + .setStyle("PRIMARY") + .setDisabled(true); + } else { + return new MessageButton() + .setCustomId("episode.public|" + series + "|" + episode) + .setLabel(l("Show to everypony", "Afficher à tous", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) + .setStyle("PRIMARY") + } +}
\ No newline at end of file diff --git a/modules/episodereply.js b/modules/episodereply.js new file mode 100644 index 0000000..79a05c1 --- /dev/null +++ b/modules/episodereply.js @@ -0,0 +1,75 @@ +const { MessageActionRow, MessageButton, MessageEmbed } = require("discord.js"); +const getEpisodePublic = require("./episodepublic"); +const fs = require("fs"); + +module.exports = async (interaction, series, episode, sdata, isPublic) => { + let sid = episode.split("-")[0]; + let spt = sid.substring(1); + let eid = episode.split("-")[1]; + let edata = sdata.seasons.filter(i => i.id === sid)[0].episodes.filter(i => i.local - 1 + 1 === eid - 1 + 1)[0]; + + let fields = [ + { name: l("Airing Date", "Date de diffusion", interaction.user.id, interaction.guild ? interaction.guild.id : 0), value: edata.date_pre, inline: true }, + { name: l("Written by", "Écrit par", interaction.user.id, interaction.guild ? interaction.guild.id : 0), value: edata.writer, inline: true }, + { name: l("Overall no.", "N° global", interaction.user.id, interaction.guild ? interaction.guild.id : 0), value: edata.global + "/" + sdata.seasons.map(i => { return i.count }).reduce((a, b) => { return a + b; }), inline: true }, + { name: l("Season no.", "N° dans la saison", interaction.user.id, interaction.guild ? interaction.guild.id : 0), value: edata.local + "/" + sdata.seasons.filter(i => i.id === sid)[0].count, inline: true }, + ] + + if (edata.characters.length > 0) { + fields.push({ name: l("Characters", "Personnages", interaction.user.id, interaction.guild ? interaction.guild.id : 0), value: edata.characters.join("\n"), inline: true }); + } + + let row; + if (interaction.guild && !isPublic) { + row = new MessageActionRow() + .addComponents( + getEpisodePublic(interaction, series, episode), + 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(edata.name)), + new MessageButton() + .setCustomId("result.report|" + edata.name) + .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(edata.name)), + new MessageButton() + .setCustomId("result.report|" + edata.name) + .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0)) + .setStyle("DANGER") + ) + } + + let reply = { + embeds: [ + new MessageEmbed() + .setColor("DEFAULT") + .setAuthor({ name: l("Season", "Saison", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " " + spt + " " + l("Episode", "Épisode", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " " + eid }) + .setTitle(edata.name) + .setDescription(edata.plot) + .setImage(edata.cover) + .addFields(fields) + .setFooter({ text: l("Content provided without warranty, use at your own risk.", "Contenu fourni sans aucune garantie, utilisez à vos risques et périls", interaction.user.id, interaction.guild ? interaction.guild.id : 0) }) + ], + components: [ + row + ] + }; + + if (!isPublic) { + reply.ephemeral = interaction.guild !== null; + } + + if (isPublic) { + await interaction.channel.send(reply); + } else { + await interaction.reply(reply); + } +}
\ No newline at end of file diff --git a/modules/findepisode.js b/modules/findepisode.js new file mode 100644 index 0000000..f37ed4f --- /dev/null +++ b/modules/findepisode.js @@ -0,0 +1,52 @@ +const Fuse = require('fuse.js'); + +module.exports = (series, query) => { + let episodes = []; + + for (let season of series.seasons) { + for (let episode of season.episodes) { + episodes.push({ + season: season.id, + episode: episode.local, + global: episode.global, + name: episode.name, + date: episode.date, + year: new Date(episode.date).getUTCFullYear(), + plot: episode.plot, + cast: episode.characters + }) + } + } + + const fuse = new Fuse(episodes, { + keys: [ 'season', 'episode', 'global', 'name', 'year', 'plot', 'cast' ] + }) + + let results = []; + for (let item of fuse.search(query)) { + results.push({ + name: item.item.season.toUpperCase() + "E" + item.item.episode + " - " + item.item.name + " (" + item.item.year + ")", + value: item.item.season + "-" + item.item.episode + }); + } + + let first = [ + null, + null, + null, + null, + null, + null, + null + ] + + findex = 0; + for (let result of results) { + if (!first.includes(result) && findex < 7) { + first[findex] = result + findex++ + } + } + + return first; +}
\ No newline at end of file diff --git a/modules/registers.js b/modules/registers.js index 7bf2b68..59ed699 100644 --- a/modules/registers.js +++ b/modules/registers.js @@ -1,4 +1,22 @@ -const { SlashCommandBuilder } = require('@discordjs/builders'); +const { SlashCommandBuilder, SlashCommandSubcommandGroupBuilder, SlashCommandSubcommandBuilder } = require('@discordjs/builders'); +const fs = require('fs'); + +let episodesCmd = new SlashCommandBuilder() + .setName("episode") + .setDescription("Gets info about a series' episode") + +for (let series of JSON.parse(fs.readFileSync("./data/series.json").toString())) { + let command = new SlashCommandSubcommandBuilder() + .setName(series.command.toLowerCase()) + .setDescription(series.title + " (" + series.date + ")") + .addStringOption(s => + s.setName("episode") + .setDescription("The episode to search for") + .setAutocomplete(true) + ) + + episodesCmd.addSubcommand(command) +} module.exports = [ new SlashCommandBuilder() @@ -18,16 +36,7 @@ module.exports = [ new SlashCommandBuilder() .setName('random') .setDescription("Picks a random pony"), - // new SlashCommandBuilder() - // .setName('lang') - // .setDescription("Changes the bot's language") - // .addStringOption(option => - // option.setName('locale') - // .setDescription('The selected language') - // .setRequired(true) - // .addChoice('Français', 'fr') - // .addChoice('English', 'en') - // ), + episodesCmd, new SlashCommandBuilder() .setName('config') .setDescription("Configure all aspects of the bot") @@ -65,16 +74,5 @@ module.exports = [ .addChoice('English', 'en') .addChoice('User prefered language (default)', 'off') ) - ), - // new SlashCommandBuilder() - // .setName('serverlang') - // .setDescription("Changes the bot's language on this server") - // .addStringOption(option => - // option.setName('locale') - // .setDescription('The selected language') - // .setRequired(true) - // .addChoice('Français', 'fr') - // .addChoice('English', 'en') - // .addChoice('User prefered language (default)', 'off') - // ) + ) ]
\ No newline at end of file |