import { EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import fs from "fs/promises"; export default { name: "list", description: "Listet alle Plugin-Update-Listener für diesen Server auf", aliases: [], guild: ["all"], nsfw: false, user_permissions: [PermissionsBitField.Flags.Administrator], bot_permissions: [], args_required: 0, args_usage: "", cooldown: 5, data: new SlashCommandBuilder() .setName("list") .setDescription("Listet alle beobachteten Plugins dieses Servers auf"), async execute(client, ctx) { const guildID = ctx.guild.id; const filePath = `./serverdata/${guildID}.json`; let data; try { const raw = await fs.readFile(filePath, "utf8"); data = JSON.parse(raw); } catch { return ctx.reply( `Dieser Server hat keine beobachteten Ressourcen. Nutze \`${client.config.prefix}add\` um eine hinzuzufügen.` ); } if (!data.watchedResources || data.watchedResources.length === 0) { return ctx.reply( `Dieser Server hat keine beobachteten Ressourcen. Nutze \`${client.config.prefix}add\` um eine hinzuzufügen.` ); } const list = data.watchedResources .map((r) => { const name = r.resourceName ? `**${r.resourceName}**` : `ID: \`${r.resourceID}\``; const version = r.lastCheckedVersion ? ` • v${r.lastCheckedVersion}` : ""; return `${name}${version}\n└ Kanal: <#${r.channelID}> • ID: \`${r.resourceID}\``; }) .join("\n\n"); const intervalInfo = data.updateInterval ? `⏱️ Update-Intervall: ${data.updateInterval} Minute(n)` : "⏱️ Update-Intervall: 5 Minuten (Standard)"; const listEmbed = new EmbedBuilder() .setColor(ctx.guild.members.me.displayHexColor) .setTitle(`📋 Beobachtete Plugins (${data.watchedResources.length})`) .setDescription(list) .setFooter({ text: intervalInfo }); return ctx.reply({ embeds: [listEmbed] }); }, };