aboutsummaryrefslogtreecommitdiff
path: root/commands/episode.js
blob: b7d536a3bafa548e6e041c204b58600d6b7dd2aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
 * 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 getEpisodePublic = require("../modules/episodepublic");
const episodeReply = require("../modules/episodereply");
const getEpisodes = require("../modules/findepisode");

const series = JSON.parse(fs.readFileSync("./data/series.json").toString());

module.exports = async (interaction) => {
    let select = interaction.options.getSubcommand();
    let episode = interaction.options.getString('episode').toLowerCase();
    let ep_orig = episode;
    let sdata = series.filter(i => i.command.toLowerCase() === select)[0];

    // Check if it's a valid episode
    try {
        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];
    } catch (e) { // If it's not, run the search engine
        try {
            episode = getEpisodes(series.filter(i => i.command.toLowerCase() === select)[0], episode)[0].value;

            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];
        } catch (e) { // If no result is found, return an error message
            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) + " \"" + ep_orig + "\"")
                        .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 ? interaction.guild.id : 0))
                ],
                components: [
                    new MessageActionRow()
                        .addComponents(
                            new MessageButton()
                                .setCustomId("result.report|" + ep_orig)
                                .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                                .setStyle("DANGER")
                        )
                ]
            });
            return;
        }
    }

    if (statsEpisodes[select + "-" + episode] !== undefined) {
        statsEpisodes[select + "-" + episode]++;
    } else {
        statsEpisodes[select + "-" + episode] = 1;
    }
    fs.writeFile("./stats/episodes.json", JSON.stringify(statsEpisodes), () => {});

    if (typeof episode === "string") {
        await episodeReply(interaction, select, episode, sdata);
    }
}