import { EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import fs from "fs/promises"; import { t, getLang } from "../util/i18n.js"; export default { name: "setmention", description: "Legt eine Rolle fest die bei Updates einer Ressource gepingt wird", aliases: [], guild: ["all"], nsfw: false, user_permissions: [PermissionsBitField.Flags.Administrator], bot_permissions: [], args_required: 1, args_usage: "[ressourcen_id] [@rolle] Beispiel: vn!setmention 72678 @Updates (ohne Rolle = entfernen)", cooldown: 5, data: new SlashCommandBuilder() .setName("setmention") .setDescription("Sets a role to ping when a plugin gets an update") .addStringOption((opt) => opt.setName("ressourcen_id").setDescription("Spiget Ressourcen-ID").setRequired(true) ) .addRoleOption((opt) => opt.setName("rolle").setDescription("Zu pingende Rolle (weglassen = entfernen)").setRequired(false) ), async execute(client, ctx, args) { const guildID = ctx.guild.id; const filePath = `./serverdata/${guildID}.json`; let saveData; try { const raw = await fs.readFile(filePath, "utf8"); saveData = JSON.parse(raw); } catch { return ctx.reply("Dieser Server hat keine beobachteten Ressourcen."); } const lang = getLang(saveData); const resourceID = ctx.isSlash ? ctx.interaction.options.getString("ressourcen_id") : args[0]; const role = ctx.isSlash ? ctx.interaction.options.getRole("rolle") : ctx.mentions?.roles?.first() ?? null; const watched = saveData.watchedResources.find( (r) => String(r.resourceID) === String(resourceID) ); if (!watched) { return ctx.reply(t(lang, "setmention.notWatched", { id: resourceID })); } const name = watched.resourceName ?? resourceID; if (role) { watched.mentionRoleID = role.id; } else { delete watched.mentionRoleID; } try { await fs.writeFile(filePath, JSON.stringify(saveData, null, 2)); } catch (e) { client.logger.error(e); return ctx.reply(t(lang, "error.saveFailed")); } const msg = role ? t(lang, "setmention.set", { name, roleID: role.id }) : t(lang, "setmention.removed", { name }); const embed = new EmbedBuilder() .setColor(ctx.guild.members.me.displayHexColor) .setDescription(msg); return ctx.reply({ embeds: [embed] }); }, };