Files
SpigotWatch/commands/setinterval.js
2026-02-25 18:51:08 +01:00

83 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"; }
}