aboutsummaryrefslogtreecommitdiff
path: root/handler/button.js
blob: 9cfbf951dcf210ff539fe00e7bbe68f8d1ca460a (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
const fs = require('fs');
const path = require('path');
const { MessageActionRow, MessageButton, MessageSelectMenu, MessageEmbed, MessageAttachment } = require('discord.js');

const getPixel = require('../modules/pixel.js');
const getEmbed = require("../modules/embed");

module.exports = async (interaction) => {
    keys = interaction.customId.split("|")

    if (keys[0] === "pony.display") {
        let row;
        if (interaction.guild) {
            row = new MessageActionRow()
                .addComponents(
                    new MessageButton()
                        .setCustomId("pony.public|" + keys[1])
                        .setLabel(l("Show to everypony", "Afficher à tous", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                        .setStyle("PRIMARY"),
                    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")
                )
        }
        await interaction.reply({
            ephemeral: interaction.guild !== null,
            embeds: [
                getEmbed(keys[1], interaction.user.id, interaction.guild ? interaction.guild.id : 0, false, interaction.user)
            ],
            components: [
                row
            ]
        });
    } else if (keys[0] === "pony.public") {
        if (typeof cooldowns[interaction.user.id] !== "undefined" && new Date() - cooldowns[interaction.user.id] < 30000) {
            await interaction.reply({
                ephemeral: interaction.guild !== null,
                embeds: [
                    new MessageEmbed()
                        .setColor('#dc2828')
                        .setTitle(l("Calm down!", "Calmez-vous !", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                        .setDescription(l("Please wait " + Math.ceil((30000 - (new Date() - cooldowns[interaction.user.id]))/1000) + " seconds before you can use this again.", "Patientez encore " + Math.ceil((30000 - (new Date() - cooldowns[interaction.user.id]))/1000) + " secondes avant de pouvoir réutiliser ça.", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                ]
            });
        } else {
            try {
                await interaction.channel.send({
                    ephemeral: false,
                    embeds: [
                        getEmbed(keys[1], interaction.user.id, interaction.guild ? interaction.guild.id : 0, true, interaction.user)
                    ],
                    components: [
                        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")
                            )
                    ]
                });
                await interaction.reply({
                    ephemeral: interaction.guild !== null,
                    embeds: [
                        new MessageEmbed()
                            .setColor('#28dc46')
                            .setTitle(l("Show to everypony", "Afficher à tous", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                            .setDescription(l("This pony has been sent publicly to this channel.", "Ce poney a été envoyé publiquement dans ce salon.", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                    ]
                });
                cooldowns[interaction.user.id] = new Date();
            } catch (e) {
                await interaction.reply({
                    ephemeral: interaction.guild !== null,
                    embeds: [
                        new MessageEmbed()
                            .setColor('#dc2828')
                            .setTitle(l("Show to everypony", "Afficher à tous", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                            .setDescription(l("We are unable to send a message to this channel, make sure the bot have sufficient permissions.", "Nous ne parvenons pas à envoyer un message dans ce salon, assurez-vous que le robot dispose de sufficient de permissions.", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                    ]
                });
            }
        }
    } else if (keys[0] === "result.report") {
        await interaction.reply({
            ephemeral: interaction.guild !== null,
            embeds: [
                new MessageEmbed()
                    .setColor('#dc2828')
                    .setTitle(l("Report an issue with", "Signaler un problème avec", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " \"" + keys[1] + "\"")
                    .setDescription(l("If you think the result to your query is problematic, you can report it so that the developers fix the issue.", "Si vous pensez que le résultat donné est problématique, vous pouvez le signaler pour que les développeurs corrigent le problème.", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
            ],
            components: [
                new MessageActionRow()
                    .addComponents(
                        new MessageSelectMenu()
                            .setCustomId('select')
                            .setPlaceholder(l("Select a type of issue", "Sélectionnez le type de problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                            .addOptions([
                                {
                                    label: l("Inappropriate", "Inapproprié", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("The result contains inappropriate content: chocking or violent.", "La réponse contient du contenu inapproprié à certains publics, choquant, ou violent.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.innapropriate|' + keys[1],
                                },
                                {
                                    label: l("Off topic", "Hors sujet", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("The result contains info that is unrelated to the aforementioned character.", "La réponse contient du contenu n'ayant pas de rapport avec le personnage évoqué.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.off|' + keys[1],
                                },
                                {
                                    label: l("Incoherent data", "Données incohérentes", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("The result contains incoherent data, due to a database error.", "La réponse contient des données incohérentes, dûes à une erreur dans la base de données.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.data|' + keys[1],
                                },
                                {
                                    label: l("Wrong result", "Mauvais résultat", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("The given result is not what was expected with this query.", "La réponse donnée n'est pas la réponse attendue par rapport à la demande.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.wrong|' + keys[1],
                                },
                                {
                                    label: l("Wrong image(s)", "Mauvaise(s) image(s)", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("One or more of the provided image(s) do(es)n't correspond to the shown character.", "Une ou plusieurs image(s) fournie(s) avec la réponse ne correspond(ent) pas au personnage affiché.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.image|' + keys[1],
                                },
                                {
                                    label: l("Wrong information", "Information erronée", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("A provided info does not correspond to the real info from a reliable source.", "Une information fournie ne correspond pas à la réelle information depuis une source fiable.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.missinfo|' + keys[1],
                                },
                                {
                                    label: l("Translation issue", "Problème de traduction", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    description: l("The English translation of a formerly French content is wrong and needs to be fixed.", "La version française d'un contenu originellement en anglais est erronée et doit être corrigée.", interaction.user.id, interaction.guild ? interaction.guild.id : 0),
                                    value: 'report.issue.translation|' + keys[1],
                                },
                            ]),
                    )
            ]
        });
    } else if (keys[0] === "pony.pixel") {
        await interaction.reply({
            ephemeral: interaction.guild !== null,
            embeds: [
                new MessageEmbed()
                    .setColor('#28dc46')
                    .setTitle(l("Pixel Art for", "Pixel Art correspondant à", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " \"" + keys[1] + "\"")
            ],
            files: [
                new MessageAttachment(fs.readFileSync(getPixel(keys[1])), path.basename(getPixel(keys[1])))
            ],
            components: [
                new MessageActionRow()
                    .addComponents(
                        new MessageButton()
                            .setCustomId("result.report|" + getPixel(keys[1]))
                            .setLabel(l("Report an issue", "Signaler un problème", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                            .setStyle("DANGER")
                    )
            ]
        });
    } else if (keys[0] === "result.suggest") {
        tid = "./reports/Telemetry-Request-" + (new Date().toISOString().replace(/[^a-zA-Z0-9]/gm, "-")) + ".txt";
        fs.writeFileSync(tid, "-------------------------\nPonyfind Telemetry Report\n-------------------------\n\nReport Type:\n     Pony Request Report\n\n-------------------------\n\nReporter:\n     " + interaction.user.tag + " (" + interaction.user.id + ")\n\nServer:\n     " + interaction.guild ? interaction.guild.name : "[Direct Messages]" + " (" + interaction.guild ? interaction.guild.id : 0 + ")\n\nChannel:\n     " + (interaction.channel ? interaction.channel.name : "[Direct Messages]") + " (" + (interaction.channel ? interaction.channel.id : 0) + ")\n\nItem:\n     " + keys[1] + "\n\nReport Type:\n     -");
        await interaction.reply({
            ephemeral: interaction.guild !== null,
            embeds: [
                new MessageEmbed()
                    .setColor('#28dc46')
                    .setTitle(l("Thanks for suggesting", "Merci d'avoir proposé", interaction.user.id, interaction.guild ? interaction.guild.id : 0) + " \"" + keys[1] + "\"" + l("!", " !", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                    .setDescription(l("Your suggestion has been sent to the developers. They can contact you later if your settings allow this to ask you more about your request.\nThanks for your help!", "Votre suggestion a bien été envoyée aux développeurs. Ils pourront vous recontacter si vos paramètres le permettent afin de vous poser plus de questions sur votre requête.\nMerci d'aider à améliorer notre système !", interaction.user.id, interaction.guild ? interaction.guild.id : 0))
                    .setFooter("Ticket ID: " + tid)
            ]
        });
    } else {
        throw new Error("Unknown Button ID");
    }
}