import { EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import { requireOwner } from "../util/ownerOnly.js"; import { t, getLang } from "../util/i18n.js"; import fsSync from "fs"; import fs from "fs/promises"; const MIN_INTERVAL = 1; const MAX_INTERVAL = 60; export default { name: "setinterval", description: "Legt das Update-Check-Intervall für diesen Server fest (in Minuten)", aliases: ["interval"], guild: ["all"], nsfw: false, user_permissions: [PermissionsBitField.Flags.Administrator], bot_permissions: [], args_required: 1, args_usage: `[minuten] Beispiel: vn!setinterval 10 (erlaubt: ${MIN_INTERVAL}–${MAX_INTERVAL})`, cooldown: 5, data: new SlashCommandBuilder() .setName("setinterval") .setDescription("Legt das Update-Check-Intervall für diesen Server fest") .addIntegerOption((opt) => opt .setName("minuten") .setDescription(`Intervall in Minuten (${MIN_INTERVAL}–${MAX_INTERVAL})`) .setMinValue(MIN_INTERVAL) .setMaxValue(MAX_INTERVAL) .setRequired(true) ), async execute(client, ctx, args) { const lang = loadLang(ctx.guild.id); if (!await requireOwner(client, ctx, lang)) return; const minutes = ctx.isSlash ? ctx.interaction.options.getInteger("minuten") : parseInt(args[0], 10); if (isNaN(minutes) || minutes < MIN_INTERVAL || minutes > MAX_INTERVAL) { return ctx.reply( `Ungültiger Wert. Bitte gib eine Zahl zwischen **${MIN_INTERVAL}** und **${MAX_INTERVAL}** Minuten an.` ); } const guildID = ctx.guild.id; const filePath = `./serverdata/${guildID}.json`; let saveData = { watchedResources: [] }; try { const raw = await fs.readFile(filePath, "utf8"); saveData = JSON.parse(raw); } catch { // Datei existiert noch nicht – wird erstellt } saveData.updateInterval = minutes; try { await fs.mkdir("./serverdata", { recursive: true }); await fs.writeFile(filePath, JSON.stringify(saveData, null, 2)); } catch (e) { client.logger.error(e); return ctx.reply("Beim Speichern der Einstellung ist ein Fehler aufgetreten."); } const embed = new EmbedBuilder() .setColor(ctx.guild.members.me.displayHexColor) .setTitle("⏱️ Update-Intervall aktualisiert") .setDescription(`Das Update-Check-Intervall für diesen Server wurde auf **${minutes} Minute(n)** gesetzt.`) .setFooter({ text: "Der nächste Check erfolgt nach Ablauf des neuen Intervalls." }); return ctx.reply({ embeds: [embed] }); }, }; function loadLang(guildID) { try { const data = JSON.parse(fsSync.readFileSync(`./serverdata/${guildID}.json`, "utf8")); return getLang(data); } catch { return "de"; } }