import { EmbedBuilder, SlashCommandBuilder } from "discord.js"; import { Spiget } from "spiget"; import { generateAvatarLink, generateAuthorURL, generateResourceIconURL, generateResourceURL, } from "../util/helpers.js"; const spiget = new Spiget("Viper-Network"); export default { name: "plugin", description: "Ruft ein Plugin anhand seiner Ressourcen-ID ab und gibt Details zurück", aliases: [], guild: ["all"], nsfw: false, user_permissions: [], bot_permissions: [], args_required: 1, args_usage: "[ressourcen_id]", cooldown: 5, data: new SlashCommandBuilder() .setName("plugin") .setDescription("Zeigt Details zu einem Plugin an") .addStringOption((opt) => opt.setName("ressourcen_id").setDescription("Spiget Ressourcen-ID").setRequired(true) ), async execute(client, ctx, args) { const resourceID = ctx.isSlash ? ctx.interaction.options.getString("ressourcen_id") : args[0]; let resource; try { resource = await spiget.getResource(resourceID); } catch (e) { client.logger.error(e); return ctx.reply(`Ups! \`${resourceID}\` ist keine gültige Ressourcen-ID!`); } let author; try { author = await resource.getAuthor(); } catch (e) { client.logger.error(e); return ctx.reply(`Ups! Der Autor für Ressource \`${resourceID}\` konnte nicht gefunden werden.`); } let latestVersion; try { const res = await fetch(`https://api.spigotmc.org/legacy/update.php?resource=${resourceID}`); if (!res.ok) throw new Error(`HTTP ${res.status}`); latestVersion = (await res.text()).trim(); } catch (e) { client.logger.error(e); return ctx.reply("Versionsinformationen konnten nicht abgerufen werden. Bitte versuche es erneut."); } const authorURL = generateAuthorURL(author.name, author.id); const authorAvatarURL = generateAvatarLink(author.id); const resourceIconURL = generateResourceIconURL(resource); const resourceURL = generateResourceURL(resourceID); const embed = new EmbedBuilder() .setAuthor({ name: `Autor: ${author.name}`, iconURL: authorAvatarURL, url: authorURL }) .setColor(ctx.guild.members.me.displayHexColor) .setTitle(resource.name) .setDescription(resource.tag) .addFields([ { name: "📦 Version", value: latestVersion, inline: true }, { name: "⬇️ Download", value: resourceURL, inline: true }, ]) .setThumbnail(resourceIconURL) .setTimestamp(); return ctx.reply({ embeds: [embed] }); }, };