81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
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] });
|
|
},
|
|
}; |