Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 5m5s
71 lines
2.8 KiB
TypeScript
71 lines
2.8 KiB
TypeScript
import { SlashCommandBuilder, EmbedBuilder, MessageFlags } from "discord.js"
|
||
import type { ChatInputCommandInteraction, MessageReaction, User } from "discord.js"
|
||
import { search, repo, torrent, download, magnet } from "@/utils/crack"
|
||
import type { CrackGame } from "@/types"
|
||
import { t } from "@/utils/i18n"
|
||
|
||
export const data = new SlashCommandBuilder()
|
||
.setName("crack")
|
||
.setDescription("Download a crack from online-fix.me")
|
||
.setDescriptionLocalizations({ fr: "Télécharge un crack sur online-fix.me" })
|
||
.addStringOption(option => option
|
||
.setName("game")
|
||
.setDescription("What game do you want to download?")
|
||
.setNameLocalizations({ fr: "jeu" })
|
||
.setDescriptionLocalizations({ fr: "Quel jeu tu veux télécharger ?" })
|
||
.setRequired(true)
|
||
)
|
||
|
||
export async function execute(interaction: ChatInputCommandInteraction) {
|
||
await interaction.deferReply()
|
||
|
||
const query = interaction.options.getString("game", true)
|
||
let games = await search(query)
|
||
if (!Array.isArray(games)) return interaction.followUp({ content: t(interaction.locale, "salonpostam.crack.no_games_found", { query }), flags: MessageFlags.Ephemeral })
|
||
|
||
let game = {} as CrackGame
|
||
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})`
|
||
const message = await interaction.followUp({ content: t(interaction.locale, "salonpostam.crack.multiple_games_found", { query, list }) })
|
||
|
||
const 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 = (reaction: MessageReaction, user: User) => {
|
||
if (reaction.emoji.name) return (emojis.includes(reaction.emoji.name) && user.id === interaction.user.id)
|
||
return false
|
||
}
|
||
await message.awaitReactions({ filter, max: 1, time: 5000, errors: ["time"] }).then(collected => {
|
||
console.log(collected)
|
||
const reaction = collected.first()
|
||
const index = emojis.indexOf(reaction?.emoji.name ?? "")
|
||
|
||
if (!games) return
|
||
game = games[index]
|
||
})
|
||
.catch(() => { return interaction.followUp({ content: t(interaction.locale, "salonpostam.crack.selection_timeout"), flags: MessageFlags.Ephemeral }) })
|
||
} else game = games[0]
|
||
|
||
const url = await repo(game)
|
||
if (!url) return
|
||
|
||
const file = await torrent(url)
|
||
if (!file) return
|
||
|
||
const filePath = await download(url, file)
|
||
if (!filePath) return
|
||
|
||
const link = magnet(filePath)
|
||
const embed = new EmbedBuilder()
|
||
.setColor("#ffc370")
|
||
.setTitle(game.name)
|
||
.setURL(game.link)
|
||
.setDescription(t(interaction.locale, "salonpostam.crack.game_found", { query, link: `https://angels-dev.fr/magnet/${link}` }))
|
||
|
||
await interaction.followUp({ embeds: [embed], files: [filePath] })
|
||
}
|