Files
bot_Tamiseur/src/commands/salonpostam/crack.ts
Zachary Guénot 60d0c01212
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 5m5s
Fix chmod
2025-06-09 19:10:35 +02:00

71 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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] })
}