90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
import { EmbedBuilder, SlashCommandBuilder } from "discord.js";
|
||
import { formatText } from "../util/helpers.js";
|
||
|
||
export default {
|
||
name: "changelog",
|
||
description: "Zeigt die letzten Update-Beschreibungen eines Plugins an",
|
||
aliases: ["cl"],
|
||
guild: ["all"],
|
||
nsfw: false,
|
||
user_permissions: [],
|
||
bot_permissions: [],
|
||
args_required: 1,
|
||
args_usage: "[ressourcen_id] [anzahl] Beispiel: vn!changelog 72678 5",
|
||
cooldown: 5,
|
||
|
||
data: new SlashCommandBuilder()
|
||
.setName("changelog")
|
||
.setDescription("Zeigt die letzten Updates eines Plugins")
|
||
.addStringOption((opt) =>
|
||
opt.setName("ressourcen_id").setDescription("Spiget Ressourcen-ID").setRequired(true)
|
||
)
|
||
.addIntegerOption((opt) =>
|
||
opt
|
||
.setName("anzahl")
|
||
.setDescription("Anzahl der Updates (1–10, Standard: 3)")
|
||
.setMinValue(1)
|
||
.setMaxValue(10)
|
||
.setRequired(false)
|
||
),
|
||
|
||
async execute(client, ctx, args) {
|
||
const resourceID = ctx.isSlash
|
||
? ctx.interaction.options.getString("ressourcen_id")
|
||
: args[0];
|
||
|
||
let count = ctx.isSlash
|
||
? (ctx.interaction.options.getInteger("anzahl") ?? 3)
|
||
: (parseInt(args[1], 10) || 3);
|
||
|
||
count = Math.min(Math.max(count, 1), 10);
|
||
|
||
// Fetch resource name
|
||
let resourceName = resourceID;
|
||
try {
|
||
const resInfo = await fetch(`https://api.spiget.org/v2/resources/${resourceID}`);
|
||
if (resInfo.ok) {
|
||
const data = await resInfo.json();
|
||
resourceName = data.name ?? resourceID;
|
||
}
|
||
} catch { /* ignore */ }
|
||
|
||
// Fetch updates list
|
||
let updates;
|
||
try {
|
||
const res = await fetch(
|
||
`https://api.spiget.org/v2/resources/${resourceID}/updates?size=${count}&sort=-date`
|
||
);
|
||
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
||
updates = await res.json();
|
||
} catch (e) {
|
||
client.logger.error(e);
|
||
return ctx.reply("Update-Verlauf konnte nicht abgerufen werden. Bitte versuche es erneut.");
|
||
}
|
||
|
||
if (!Array.isArray(updates) || updates.length === 0) {
|
||
return ctx.reply(`Für Ressource \`${resourceID}\` wurden keine Updates gefunden.`);
|
||
}
|
||
|
||
const fields = updates.map((u, i) => {
|
||
const date = new Date(u.date * 1000).toLocaleDateString("de-DE");
|
||
let desc = formatText(Buffer.from(u.description, "base64").toString("utf8"));
|
||
if (desc.length > 300) desc = desc.substring(0, 297) + "...";
|
||
return {
|
||
name: `${i + 1}. ${u.title ?? "Update"} – v${u.likes ?? ""} (${date})`,
|
||
value: desc || "Keine Beschreibung.",
|
||
inline: false,
|
||
};
|
||
});
|
||
|
||
const changelogEmbed = new EmbedBuilder()
|
||
.setColor(ctx.guild.members.me.displayHexColor)
|
||
.setTitle(`📋 Changelog: ${resourceName}`)
|
||
.setDescription(`Die letzten **${updates.length}** Updates:`)
|
||
.addFields(fields)
|
||
.setFooter({ text: `Ressource ID: ${resourceID}` })
|
||
.setTimestamp();
|
||
|
||
return ctx.reply({ embeds: [changelogEmbed] });
|
||
},
|
||
}; |