83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
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"; }
|
||
} |