import { EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import fs from "fs/promises"; import { t } from "../util/i18n.js"; export default { name: "setlang", description: "Stellt die Sprache des Bots für diesen Server ein (DE/EN)", aliases: ["language", "lang"], guild: ["all"], nsfw: false, user_permissions: [PermissionsBitField.Flags.Administrator], bot_permissions: [], args_required: 1, args_usage: "[de|en] Beispiel: vn!setlang en", cooldown: 5, data: new SlashCommandBuilder() .setName("setlang") .setDescription("Set the bot language for this server (DE/EN)") .addStringOption((opt) => opt .setName("sprache") .setDescription("Sprache / Language") .setRequired(true) .addChoices( { name: "🇩🇪 Deutsch", value: "de" }, { name: "🇬🇧 English", value: "en" } ) ), async execute(client, ctx, args) { const input = ctx.isSlash ? ctx.interaction.options.getString("sprache") : args[0]?.toLowerCase(); if (!["de", "en"].includes(input)) { return ctx.reply("Ungültige Sprache. Nutze `de` oder `en`."); } 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 noch nicht vorhanden */ } saveData.lang = input; 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(t(input, "error.saveFailed")); } const flag = input === "de" ? "🇩🇪" : "🇬🇧"; const embed = new EmbedBuilder() .setColor(ctx.guild.members.me.displayHexColor) .setTitle(t(input, "setlang.title")) .setDescription(`${flag} ${t(input, "setlang.success")}`); return ctx.reply({ embeds: [embed] }); }, };