Zwei Aenderungen, die zusammengehoeren. 1. darfWhitelist las ein Feld, das es nicht mehr gibt ------------------------------------------------------ /person im Spielserver nimmt jetzt das zu pruefende Recht als Parameter und antwortet mit `darf` statt mit `darfWhitelist`. Der alte Zugriff haette ab sofort still immer false ergeben - also: jeder im Team ausgesperrt, ohne eine Fehlermeldung, die darauf hindeutet. `person()` nimmt das Recht jetzt optional mit; ohne Recht bleibt der Aufruf, was er war. 2. Die Rollen-ID stand an zwei Orten ------------------------------------ Sie muss zu der passen, die der Spielserver prueft. Stimmen sie nicht ueberein, zeigt /whitelist status "hat die Rolle" fuer eine Rolle, die den Zutritt gar nicht oeffnet - ein Fehler, der wie eine richtige Antwort aussieht. Deshalb wird sie nur noch an EINEM Ort eingetragen: auf der Einstellungsseite des Adminpanels. Der Bot holt sie ueber /bot/config, 30 Sekunden gepuffert. Ein Fehlschlag wird NICHT gepuffert, sonst bliebe eine Stoerung eine halbe Minute stehen, nachdem sie vorbei ist. WHITELIST_ROLE_ID bleibt als Rueckfall, damit der Befehl auch dann noch etwas anzeigen kann, wenn das Panel nicht antwortet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
70 lines
3.2 KiB
YAML
70 lines
3.2 KiB
YAML
# d4rkbot Stack — deploybar über Portainer (Stacks → Add stack)
|
|
# WICHTIG: Portainer-Stack-Name "ecobot" NICHT ändern — er ist Teil des
|
|
# Volume-Namens (ecobot_ecobot_data); ein neuer Stack-Name = leeres Volume!
|
|
services:
|
|
d4rkbot:
|
|
build: .
|
|
image: d4rkbot:latest
|
|
# Immer neu bauen statt nur, wenn das Abbild fehlt.
|
|
#
|
|
# Das REPARIERT NICHTS -- Portainer baut auch ohne diese Zeile neu, das ist
|
|
# nachgemessen worden (Push 12:48, Abbild 13:01:02, Container 13:01:14). Es
|
|
# dauert nur rund dreizehn Minuten, weil Portainer in Intervallen nachfragt,
|
|
# und wer waehrenddessen misst, haelt den Zwischenstand fuer das Ergebnis.
|
|
#
|
|
# Die Zeile macht es nur ausdruecklich: bei einem Stack mit `build:` ist
|
|
# "immer neu bauen" das, was man beim Ausrollen will -- und wer spaeter von
|
|
# Hand `docker compose up -d` tippt, bekommt dasselbe wie die Automatik.
|
|
pull_policy: build
|
|
container_name: d4rkbot
|
|
restart: unless-stopped
|
|
# Werte kommen per Interpolation: lokal aus der .env im Projektordner (liest
|
|
# docker compose automatisch), in Portainer aus den Stack-Environment-Variables
|
|
environment:
|
|
DISCORD_TOKEN: ${DISCORD_TOKEN}
|
|
DISCORD_CLIENT_ID: ${DISCORD_CLIENT_ID}
|
|
DISCORD_GUILD_ID: ${DISCORD_GUILD_ID:-}
|
|
COMMIT_CHANNEL_ID: ${COMMIT_CHANNEL_ID}
|
|
DEVLOG_CHANNEL_ID: ${DEVLOG_CHANNEL_ID}
|
|
DEVLOG_POST_SECRET: ${DEVLOG_POST_SECRET}
|
|
GITEA_API_TOKEN: ${GITEA_API_TOKEN:-}
|
|
GITEA_URL: ${GITEA_URL:-https://git.d4rkst3r.de}
|
|
GITEA_WEBHOOK_SECRET: ${GITEA_WEBHOOK_SECRET}
|
|
DISCORD_CLIENT_SECRET: ${DISCORD_CLIENT_SECRET}
|
|
SESSION_SECRET: ${SESSION_SECRET}
|
|
ADMIN_DISCORD_ID: ${ADMIN_DISCORD_ID}
|
|
PUBLIC_URL: ${PUBLIC_URL:-https://bot.d4rkst3r.de}
|
|
# Lokale Zeitzone — wichtig für den Wochen-Rückblick (sonntags 20:00) und Datumsangaben
|
|
TZ: ${TZ:-Europe/Berlin}
|
|
DB_PATH: /app/data/ecobot.db
|
|
# ---------------------------------------------------------------
|
|
# Zugang zum Adminpanel (fuer /whitelist)
|
|
# ---------------------------------------------------------------
|
|
#
|
|
# Der Bot fragt das PANEL, nicht den Spielserver: sonst haetten zwei
|
|
# Dienste den Schluessel zu allem. Dieser hier oeffnet genau eine Tuer.
|
|
#
|
|
# Kein Vorgabewert - ein Bot, der bei fehlender Konfiguration heimlich
|
|
# irgendwohin verbindet, ist schlechter als einer, der "nicht
|
|
# eingerichtet" sagt.
|
|
ACP_URL: ${ACP_URL:-}
|
|
ACP_BOT_TOKEN: ${ACP_BOT_TOKEN:-}
|
|
# Die Discord-Rolle, die den Zutritt oeffnet. NUR NOCH RUECKFALL: seit
|
|
# dem 04.09.2026 holt der Bot sie vom Adminpanel (/bot/config), wo sie
|
|
# auf der Seite "Einstellungen" eingetragen wird. Was dort steht, gewinnt.
|
|
#
|
|
# Der Rueckfall bleibt, damit /whitelist auch dann noch etwas anzeigen
|
|
# kann, wenn das Panel gerade nicht antwortet.
|
|
WHITELIST_ROLE_ID: ${WHITELIST_ROLE_ID:-}
|
|
# HTTP-Endpoint für Gitea-Webhooks + Webinterface
|
|
# NPM leitet bot.d4rkst3r.de → host.docker.internal:3080
|
|
ports:
|
|
- "3080:3080"
|
|
volumes:
|
|
# SQLite & Devlog-Bilder überleben Container-Neustarts.
|
|
# Volume-Name bleibt aus historischen Gründen "ecobot_data" (Daten!)
|
|
- ecobot_data:/app/data
|
|
|
|
volumes:
|
|
ecobot_data:
|