Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90fefb2865 |
@@ -27,23 +27,29 @@ import { SlashCommandBuilder, MessageFlags } from 'discord.js';
|
|||||||
import { person, panelBereit, darfWhitelist, konfig } from '../../panel.js';
|
import { person, panelBereit, darfWhitelist, konfig } from '../../panel.js';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DIE ROLLEN-ID STEHT IM PANEL, NICHT HIER.
|
DIE ROLLEN WERDEN GELESEN, NICHT GEPFLEGT.
|
||||||
|
|
||||||
Sie ist kein Geheimnis, aber sie muss zu der passen, die der Spielserver
|
Sie sind kein Geheimnis, aber sie müssen zu denen passen, die der
|
||||||
prüft (`d4rk_discord:role`) — stimmen sie nicht überein, zeigt dieser Befehl
|
Spielserver prüft (`d4rk_discord:role`) — sonst zeigt dieser Befehl „hat die
|
||||||
„hat die Rolle" für eine Rolle, die den Zutritt gar nicht öffnet. Genau
|
Rolle" für eine Rolle, die den Zutritt gar nicht öffnet.
|
||||||
deshalb wird sie an EINEM Ort eingetragen: auf der Einstellungsseite des
|
|
||||||
Adminpanels.
|
|
||||||
|
|
||||||
Die Umgebungsvariable bleibt als Rückfall, damit der Bot auch dann läuft,
|
Am 04.09.2026 gemessen: die Convar enthielt ZWEI Rollen, eingetragen war
|
||||||
wenn das Panel gerade nicht antwortet.
|
eine. Deshalb kommt die Menge jetzt vom Spielserver.
|
||||||
|
|
||||||
|
ES SIND MEHRERE, UND EINE REICHT. Wer eine davon hat, kommt herein — außer
|
||||||
|
er hat eine Sperrrolle, die schlägt alles. Das ist dieselbe Regel wie in
|
||||||
|
d4rk_lib; sie hier zu vereinfachen hieße, sie ein zweites Mal zu schreiben.
|
||||||
|
|
||||||
|
KEIN RÜCKFALL AUF EINE GESPEICHERTE ID. Eine veraltete Liste würde
|
||||||
|
selbstbewusst falsch antworten; „nicht prüfbar" ist die richtige Antwort auf
|
||||||
|
eine Frage, die man gerade nicht beantworten kann.
|
||||||
*/
|
*/
|
||||||
async function whitelistRolle() {
|
async function zutritt() {
|
||||||
const k = await konfig();
|
const k = await konfig();
|
||||||
|
|
||||||
if (k.ok && k.whitelistRolle) return k.whitelistRolle;
|
if (!k.ok || k.zutrittGelesen !== true || !k.zutritt) return null;
|
||||||
|
|
||||||
return process.env.WHITELIST_ROLE_ID || '';
|
return k.zutritt;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GRUENDE = {
|
const GRUENDE = {
|
||||||
@@ -113,20 +119,31 @@ export async function execute(interaction) {
|
|||||||
Verbindung. Wer sie hier vom Server erwartet, bekommt eine Antwort, die
|
Verbindung. Wer sie hier vom Server erwartet, bekommt eine Antwort, die
|
||||||
geraten wäre.
|
geraten wäre.
|
||||||
*/
|
*/
|
||||||
const rolle = await whitelistRolle();
|
const z = await zutritt();
|
||||||
|
|
||||||
let rolleText = 'nicht prüfbar — im Adminpanel ist keine Whitelist-Rolle eingetragen';
|
let rolleText = 'nicht prüfbar — der Spielserver sagt gerade nicht, welche Rollen gelten';
|
||||||
|
|
||||||
if (rolle) {
|
if (z && z.rollen.length === 0) {
|
||||||
|
rolleText = 'keine Zutrittsrolle konfiguriert — die Whitelist ist offen';
|
||||||
|
} else if (z) {
|
||||||
const mitglied = await interaction.guild?.members
|
const mitglied = await interaction.guild?.members
|
||||||
.fetch(ziel.id)
|
.fetch(ziel.id)
|
||||||
.catch(() => null);
|
.catch(() => null);
|
||||||
|
|
||||||
rolleText = !mitglied
|
if (!mitglied) {
|
||||||
? 'nicht auf diesem Discord'
|
rolleText = 'nicht auf diesem Discord';
|
||||||
: mitglied.roles.cache.has(rolle)
|
} else {
|
||||||
? '**ja**'
|
const hat = z.rollen.filter((r) => mitglied.roles.cache.has(r));
|
||||||
: '**nein**';
|
const gesperrt = (z.sperrrollen ?? []).some((r) => mitglied.roles.cache.has(r));
|
||||||
|
|
||||||
|
// DIE SPERRE ZUERST: sie schlägt die Zutrittsrolle. Sie danach zu
|
||||||
|
// nennen ließe „ja" stehen für jemanden, der nicht hereinkommt.
|
||||||
|
rolleText = gesperrt
|
||||||
|
? '**gesperrt** — eine Sperrrolle schlägt jede Zutrittsrolle'
|
||||||
|
: hat.length > 0
|
||||||
|
? `**ja** (${hat.length} von ${z.rollen.length} Zutrittsrollen)`
|
||||||
|
: `**nein** (keine von ${z.rollen.length})`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const k = p.konto;
|
const k = p.konto;
|
||||||
|
|||||||
+10
-3
@@ -108,9 +108,16 @@ export async function darfWhitelist(discordId) {
|
|||||||
* Die Einstellungen, die im Panel eingetragen sind.
|
* Die Einstellungen, die im Panel eingetragen sind.
|
||||||
*
|
*
|
||||||
* WARUM DER BOT SIE NICHT SELBST FUEHRT: sonst stuende die Whitelist-Rolle an
|
* WARUM DER BOT SIE NICHT SELBST FUEHRT: sonst stuende die Whitelist-Rolle an
|
||||||
* zwei Orten — hier in der Umgebung und dort auf der Seite. Zwei Orte fuer
|
* zwei Orten. Genau daran ist die erste Fassung gescheitert — am 04.09.2026 an
|
||||||
* dieselbe Wahrheit heisst, dass eine Aenderung eine der beiden vergisst, und
|
* der Serverkonsole gemessen:
|
||||||
* der Fehler sieht dann aus wie „die Rolle wird nicht erkannt".
|
*
|
||||||
|
* d4rk_discord:role = "1439019849664696460,1544029550802108437"
|
||||||
|
*
|
||||||
|
* ZWEI Rollen; eingetragen war eine. Wer nur die andere hatte, kam auf den
|
||||||
|
* Server und haette hier trotzdem „Whitelist-Rolle: nein" gelesen.
|
||||||
|
*
|
||||||
|
* Der Wert kommt deshalb aus der Convar des Spielservers, durchgereicht vom
|
||||||
|
* Panel — dieselbe Quelle, die auch ueber den Zutritt entscheidet.
|
||||||
*
|
*
|
||||||
* Kurz gepuffert, damit nicht jeder Befehl eine Runde ueber das Netz macht.
|
* Kurz gepuffert, damit nicht jeder Befehl eine Runde ueber das Netz macht.
|
||||||
* Ein Fehlschlag wird NICHT gepuffert — sonst bliebe eine Stoerung eine Minute
|
* Ein Fehlschlag wird NICHT gepuffert — sonst bliebe eine Stoerung eine Minute
|
||||||
|
|||||||
Reference in New Issue
Block a user