feat: mehrere Rollen duerfen herein, nicht nur eine
Wer EINE der eingetragenen Rollen hat, kommt ins Dashboard. Mehrere sind der Normalfall, sobald mehr als eine Person Zugang haben soll -- Admin und Fotograf sind selten dieselbe Rolle. Die bisherige einzelne Rolle geht NICHT verloren: der alte Schluessel (discord.role_id) wird weitergelesen, bis die Liste einmal gepflegt wird; dann raeumt das Speichern ihn weg. Zwei Quellen fuer dieselbe Frage laufen sonst auseinander. Nachgemessen: die vorhandene Rolle stand nach dem Umbau unveraendert drin, bereit blieb true. Getrennt wird an Komma, Semikolon, Leerzeichen und Zeilenumbruch -- wer drei IDs untereinander aus Discord kopiert, soll sie nicht erst zu einer Zeile zusammenschieben. Doppelte fallen zusammen. UND DIE SCHLECHTE WIRD BEIM NAMEN GENANNT: "123 ist keine Rollen-ID (17 bis 20 Ziffern)" statt "Rollen-ID ungueltig". Bei fuenf Eintraegen ist die zweite Meldung eine Suchaufgabe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+24
-5
@@ -50,31 +50,50 @@ export const DISCORD_KEYS = {
|
||||
clientId: 'discord.client_id',
|
||||
clientSecret: 'discord.client_secret',
|
||||
guildId: 'discord.guild_id',
|
||||
roleId: 'discord.role_id',
|
||||
/** MEHRERE Rollen, mit Komma getrennt. Der alte Schluessel mit genau einer
|
||||
* Rolle wird weiter gelesen (siehe rollen()) — wer schon eine eingetragen
|
||||
* hatte, soll sie nicht verlieren, nur weil hier eine Liste daraus wurde. */
|
||||
roleIds: 'discord.role_ids',
|
||||
roleIdAlt: 'discord.role_id',
|
||||
} as const
|
||||
|
||||
export type DiscordConfig = {
|
||||
clientId: string
|
||||
clientSecret: string
|
||||
guildId: string
|
||||
roleId: string
|
||||
/** Wer EINE davon hat, darf herein. Leere Liste heisst: nicht eingerichtet. */
|
||||
roleIds: string[]
|
||||
/** Erst wenn alle vier stehen, hat die Anmeldung ueberhaupt eine Chance.
|
||||
* Ein halb eingerichteter Weg, der auf halber Strecke abbricht, ist
|
||||
* schlimmer als ein Knopf, den es nicht gibt. */
|
||||
bereit: boolean
|
||||
}
|
||||
|
||||
/** Die Rollen, aus welcher Quelle sie auch kommen.
|
||||
*
|
||||
* Reihenfolge: die neue Liste, dann der alte Einzelwert, dann die Umgebung.
|
||||
* Getrennt wird an Komma, Semikolon, Leerzeichen und Zeilenumbruch — wer eine
|
||||
* Liste aus Discord kopiert, soll sie nicht erst von Hand aufraeumen. */
|
||||
export function rollen(): string[] {
|
||||
const roh =
|
||||
getSetting(DISCORD_KEYS.roleIds) ||
|
||||
getSetting(DISCORD_KEYS.roleIdAlt) ||
|
||||
(process.env.DISCORD_ROLE_IDS ?? process.env.DISCORD_ROLE_ID ?? '')
|
||||
|
||||
return [...new Set(roh.split(/[\s,;]+/).map((t) => t.trim()).filter(Boolean))]
|
||||
}
|
||||
|
||||
export function discordConfig(): DiscordConfig {
|
||||
const clientId = getSetting(DISCORD_KEYS.clientId, 'DISCORD_CLIENT_ID')
|
||||
const clientSecret = getSetting(DISCORD_KEYS.clientSecret, 'DISCORD_CLIENT_SECRET')
|
||||
const guildId = getSetting(DISCORD_KEYS.guildId, 'DISCORD_GUILD_ID')
|
||||
const roleId = getSetting(DISCORD_KEYS.roleId, 'DISCORD_ROLE_ID')
|
||||
const roleIds = rollen()
|
||||
|
||||
return {
|
||||
clientId,
|
||||
clientSecret,
|
||||
guildId,
|
||||
roleId,
|
||||
bereit: Boolean(clientId && clientSecret && guildId && roleId),
|
||||
roleIds,
|
||||
bereit: Boolean(clientId && clientSecret && guildId && roleIds.length > 0),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user