Discords eigener Filter arbeitet serverseitig und ohne Latenz — daran ist nichts zu verbessern. Was fehlte, war die Sicht darauf: Treffer landeten nur in Discords eigenem Kanal, und die Regeln pflegte man in einer ganz anderen Oberflaeche als alles andere. Jetzt spiegelt der Bot jeden Treffer als Embed ins Mod-Log — mit Nutzer, Regel, Ausloeser, Massnahme, getroffenem Wort und gekuerztem Wortlaut, ohne Erwaehnungen, die den Kanal anpingen. Im Panel steht unter Support jede Regel mit Ausloeser, Massnahmen und der Zahl ausgenommener Rollen und Kanaele — letzteres oft der Grund, warum eine Regel scheinbar nicht greift. Schalten geht dort direkt. Das Bearbeiten der Wortlisten bleibt bewusst in Discord; dort ist es gut geloest, und ein zweiter Ort dafuer waere nur eine weitere Stelle, an der etwas auseinanderlaeuft. Dazu noetig: der Gateway-Intent AutoModerationExecution. Nicht privilegiert, aber Discord schickt die Ereignisse nur an Bots mit "Server verwalten" — fehlt das Recht, sagt das Panel es statt still leer zu bleiben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.9 KiB
React
36 lines
1.9 KiB
React
// Ein Symbol je Bot-Funktion. Bewusst im Frontend und nicht im Modul-Register:
|
|
// der Bot-Code soll nichts über die Oberfläche wissen müssen.
|
|
//
|
|
// Genutzt von der Produktseite (/features) und den Modul-Karten in der Config —
|
|
// deshalb liegt die Zuordnung hier und nicht in einer der beiden Seiten.
|
|
import {
|
|
IconDevlog, IconCommits, IconChangelog, IconActivity, IconMessage, IconPlay,
|
|
IconLevel, IconStar, IconGallery, IconThumbsUp, IconGiveaway, IconBirthday,
|
|
IconEvents, IconGame, IconKey, IconRoles, IconApplications, IconShield,
|
|
IconArchive, IconMail, IconSupport, IconMagic, IconTeam, IconRefresh,
|
|
IconWarning, IconServer, IconMonitor, IconVoice, IconZap, IconClock,
|
|
IconSend, IconTag, IconDatabase, IconPackage, IconLock, IconIdea, IconLink,
|
|
IconBot,
|
|
} from './icons.jsx';
|
|
|
|
export const MODULE_ICONS = {
|
|
devlogs: IconDevlog, commit_feed: IconCommits, releases: IconChangelog,
|
|
weekly_recap: IconActivity, devlog_threads: IconMessage, social: IconPlay,
|
|
levels: IconLevel, starboard: IconStar, gallery: IconGallery,
|
|
voting: IconThumbsUp, giveaways: IconGiveaway, birthdays: IconBirthday,
|
|
events: IconEvents, playtester: IconGame, alpha_keys: IconKey,
|
|
role_menus: IconRoles, applications: IconApplications,
|
|
moderation: IconShield, anti_raid: IconLock, automod: IconBot,
|
|
modlog: IconArchive, modmail: IconMail,
|
|
linked_roles: IconLink, polls: IconThumbsUp,
|
|
tickets: IconSupport, welcome: IconMagic, autorole: IconTeam,
|
|
sticky_roles: IconRefresh, bug_reports: IconWarning,
|
|
server_monitor: IconServer, watchdog: IconMonitor, temp_voice: IconVoice,
|
|
triggers: IconZap, reminders: IconClock, scheduled_posts: IconSend,
|
|
tags: IconTag, backups: IconDatabase, repo_backups: IconPackage,
|
|
member_gate: IconLock,
|
|
};
|
|
|
|
/** Symbol einer Funktion — Glühbirne, falls für eine neue noch keins hinterlegt ist */
|
|
export const moduleIcon = (id) => MODULE_ICONS[id] ?? IconIdea;
|