Update from Git Manager GUI
This commit is contained in:
82
commands/setmention.js
Normal file
82
commands/setmention.js
Normal file
@@ -0,0 +1,82 @@
|
||||
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] });
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user