Rollen-Ping beim Devlog: Erwähnung + Abo-Button
- Setting devlog_ping_role_id (Rollen-Dropdown auf der Setup-Seite, leer = aus) - Devlog-Post erwähnt die Rolle (allowedMentions gescoped) und trägt einen 🔔-Button, über den Member die Rolle selbst an-/abmelden (ephemere Bestätigung) - API liefert vergebbare Rollen (ohne @everyone/managed), PUT validiert Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+34
-2
@@ -1,7 +1,7 @@
|
||||
// Discord-Client: Commands laden, registrieren und Interactions verarbeiten
|
||||
import { Client, Collection, Events, GatewayIntentBits, Partials, REST, Routes } from 'discord.js';
|
||||
import { Client, Collection, Events, GatewayIntentBits, MessageFlags, Partials, REST, Routes } from 'discord.js';
|
||||
import { config } from '../config.js';
|
||||
import { devlogChannelId } from '../runtime-settings.js';
|
||||
import { devlogChannelId, devlogPingRoleId } from '../runtime-settings.js';
|
||||
import { archiveDevlogMessage, removeDevlog } from './devlog-archive.js';
|
||||
import * as ping from './commands/ping.js';
|
||||
import * as devlogBackfill from './commands/devlog-backfill.js';
|
||||
@@ -58,6 +58,38 @@ export async function startBot() {
|
||||
});
|
||||
|
||||
client.on(Events.InteractionCreate, async (interaction) => {
|
||||
// 🔔-Button unterm Devlog: Ping-Rolle selbst an-/abmelden
|
||||
if (interaction.isButton() && interaction.customId === 'devlog_ping_toggle') {
|
||||
const roleId = devlogPingRoleId();
|
||||
try {
|
||||
if (!roleId || !interaction.inGuild()) {
|
||||
throw new Error('Keine Ping-Rolle konfiguriert');
|
||||
}
|
||||
const member = interaction.member;
|
||||
const hasRole = member.roles.cache.has(roleId);
|
||||
if (hasRole) {
|
||||
await member.roles.remove(roleId);
|
||||
} else {
|
||||
await member.roles.add(roleId);
|
||||
}
|
||||
await interaction.reply({
|
||||
content: hasRole
|
||||
? '🔕 Devlog-Benachrichtigungen **abbestellt**.'
|
||||
: '🔔 Devlog-Benachrichtigungen **abonniert** — du wirst ab jetzt gepingt.',
|
||||
flags: MessageFlags.Ephemeral,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[ping-rolle] Toggle fehlgeschlagen:', error);
|
||||
await interaction
|
||||
.reply({
|
||||
content: '❌ Konnte die Rolle nicht ändern — dem Bot fehlt vermutlich „Rollen verwalten" oder die Rolle steht über seiner.',
|
||||
flags: MessageFlags.Ephemeral,
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!interaction.isChatInputCommand()) return;
|
||||
|
||||
const command = client.commands.get(interaction.commandName);
|
||||
|
||||
Reference in New Issue
Block a user