Réécriture complète 4.0
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 6m16s

This commit is contained in:
Zachary Guénot
2025-06-09 16:29:12 +02:00
parent f2c6388da6
commit ddd617317c
133 changed files with 8092 additions and 4332 deletions

View File

@@ -1,58 +1,70 @@
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 = (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)
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] })
}
}
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] })
}