aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/episodepublic.js16
-rw-r--r--modules/episodereply.js75
-rw-r--r--modules/findepisode.js52
-rw-r--r--modules/registers.js44
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