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

82 lines
2.4 KiB
JavaScript

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] });
},
};