58 lines
2.8 KiB
TypeScript
Executable File
58 lines
2.8 KiB
TypeScript
Executable File
import { SlashCommandBuilder, EmbedBuilder, ChatInputCommandInteraction, MessageReaction, User }from 'discord.js'
|
||
import * as crack from '../../utils/crack'
|
||
|
||
export default {
|
||
data: new SlashCommandBuilder().setName('crack').setDescription('Télécharge un crack sur le site online-fix.me !')
|
||
.addStringOption(option => option.setName('jeu').setDescription('Quel jeu tu veux DL ?').setRequired(true)),
|
||
async execute(interaction: ChatInputCommandInteraction) {
|
||
await interaction.deferReply()
|
||
|
||
let query = interaction.options.getString('jeu')
|
||
if (!query) return
|
||
|
||
let games = await crack.search(query) as crack.Game[]
|
||
if (!Array.isArray(games)) {
|
||
//if (games.toString() == "TypeError: Cannot read properties of undefined (reading 'split')") return interaction.followUp({ content: `J'ai rien trouvé pour "${query}" !` })
|
||
//else return interaction.followUp({ content: "Une erreur s'est produite ! ```" + games + "```" })
|
||
return interaction.followUp({ content: `J'ai rien trouvé pour "${query}" !` })
|
||
}
|
||
|
||
let game = {} as crack.Game
|
||
if (games.length > 1) {
|
||
games = games.slice(0, 9)
|
||
let list = ''
|
||
for (let i = 0; i < games.length; i++) list += `\n${i + 1}. ${games[i].name} (${games[i].link})`
|
||
let message = await interaction.followUp({ content: `J'ai trouvé plusieurs jeux pour "${query}" ! ${list}` })
|
||
|
||
let emojis = ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣']
|
||
for (let i = 0; i < games.length; i++) await message.react(emojis[i])
|
||
|
||
// Wait for a reaction to be added by the interaction author.
|
||
const filter: any = (reaction: MessageReaction, user: User) => { if (reaction.emoji.name) return emojis.includes(reaction.emoji.name) && user.id === interaction.user.id }
|
||
await message.awaitReactions({ filter, max: 1, time: 5000, errors: ['time'] }).then(collected => {
|
||
console.log(collected)
|
||
if (!collected.first) return
|
||
let reaction = collected.first()
|
||
let index = emojis.indexOf(reaction?.emoji.name ?? '')
|
||
game = games[index]
|
||
}).catch(() => { return interaction.followUp({ content: 'T\'as mis trop de temps à choisir !' }) })
|
||
}
|
||
else game = games[0]
|
||
|
||
let url = await crack.repo(game)
|
||
if (!url) return
|
||
let file = await crack.torrent(url)
|
||
if (!file) return
|
||
let filePath = await crack.download(url, file)
|
||
if (!filePath) return
|
||
let link = await crack.magnet(filePath)
|
||
|
||
let embed = new EmbedBuilder()
|
||
.setColor('#ffc370')
|
||
.setTitle(game.name)
|
||
.setURL(game.link)
|
||
.setDescription(`Voici ce que j'ai trouvé pour "${query}".\nTu peux aussi cliquer sur [ce lien](https://angels-dev.fr/magnet/${link}) pour pouvoir télécharger le jeu direct !`)
|
||
|
||
await interaction.followUp({ embeds: [embed], files: [filePath] })
|
||
}
|
||
} |