From d3e6b8ac6c44e8313c1c6bac05f70a8f6a338167 Mon Sep 17 00:00:00 2001 From: Kaaninchen <124433727+kaaninchen@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:19:48 +0200 Subject: [PATCH] Config: Eigene DBF Instanz --- README.md | 43 +++++++++++++++++++++++-------------------- config.json.example | 1 + main.py | 4 ++-- src/embeds.py | 6 ++++-- src/utils.py | 7 ++++--- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 1e55d83..8d3fc2d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Gleiswechel ist ein Discord Bot, welcher einen Sprachkanal zu einer real-existie ![Beispiel Kanal](.github/preview_kanal.png) -Der Bot stellt außerdem den `/info` Befehl dar, welche einem weitere Informationen zur Verbindung zurückgibt +Der Bot stellt außerdem den `/info` Befehl dar, welcher einem weitere Informationen zur Verbindung zurückgibt ![Beispiel info](.github/preview_info.png) @@ -18,27 +18,31 @@ pip install -r requirements.txt ### Config `$ mv config.json.example` -``` +```jsonc { - "token": "", # Token des Bots - "stations": [ "Berlin Hbf", "Hamburg Hbf", "München Hbf", "Amsterdam Centraal"], # Bahnhöfe, von denen die Anzeigetafelns gelesen werden. Namen kann man auf https://dbf.finalrewind.org/ nachschlagen. - "server": , # Discord Server ID - "vc": , # Server VC ID - "random": true, # Random Zug aus der Anzeigetafel (true) oder erster Zug, der angezeigt wird (false) - "formatting": "┇", # VC Name. Davor steht der Emoji, danach der Zug - "blacklist": [] # Blacklist für bestimmte Zug-Typen + "token": "", // Token des Bots + "stations": [ "Berlin Hbf", "Hamburg Hbf", "München Hbf", "Amsterdam Centraal"], // Bahnhöfe, von denen die Anzeigetafelns gelesen werden. Namen kann man auf https://dbf.finalrewind.org/ nachschlagen. + "dbf": "https://dbf.finalrewind.org", // Die DBF Instanz. Normalerweise müsste man hier nichts ändern + "server": , // Discord Server ID + "vc": , // Server VC ID + "random": true, // Random Zug aus der Anzeigetafel (true) oder erster Zug, der angezeigt wird (false) + "formatting": "┇", // VC Name. Davor steht der Emoji, danach der Zug + "blacklist": [] // Blacklist für bestimmte Zug-Typen } ``` -#### random: -Bei kleineren Bahnhöfen stehen an den Anzeigetafeln die Namen Züge öfters Stunden, bevor der Zug eigentlich abfährt, da dort sonst keiner fährt. Dadurch wird auch der Name des VC sehr lange gleich bleiben. -Sollte man `random = false` setzen, würde immer der erste Zug an der Anzeigetafel genommen werden, welcher auch der erst der am frühesten losfährt. Wenn man viele Bahnhöfe hat besteht darin keine Gefahr. +#### dbf: +Falls, aus irgendwelchem Gründen, man nicht die [offizielle DBF Instanz](https://dbf.finalrewind.org) nutzen möchte, hat man die Möglichkeiten seine eigene zu hosten. Instruction dazu gibts auf dem [zuständigen Repo](https://github.com/derf/db-fakedisplay). Dafür kann man das Feld in der config mit der eigenen URL austauschen. -Wenn man nur einen Bahnhof hat ist es stark empfohlen random zu nutzen. Sonst könnte der Bot bei unvollständigen Einträgen in einer Schleife immer wieder vergeblich den selben Zug probieren. +#### random: +Bei kleineren Bahnhöfen stehen an den Anzeigetafeln öfters die Züge lange vor Abfahrt da, weil sonst der Bahnhof leer steht. Dadurch wird auch der Name des VC sehr lange gleich bleiben. +Sollte man `random = false` setzen, würde immer der erste Zug an der Anzeigetafel genommen werden, welcher auch der wäre welcher am frühesten losfährt. Wenn man viele Bahnhöfe hat besteht darin keine Gefahr. + +Wenn man nur einen Bahnhof hat ist es stark empfohlen random zu nutzen. Sonst könnte der Bot bei unvollständigen Einträgen in einer Schleife immer wieder vergeblich den selben unvollständigen Zug probieren. #### blacklist: -Die Blacklist ist dafür gedacht, ganze Zugtypen zu ignorieren. So würde man es beispielsweise bevorzugen, dass der Bot keine ICE's, keine NightJets und keine European Sleepers auswählt, da diese sehr lange Strecken haben und der VC somit lange unverändert bleibt: +Die Blacklist ist dafür gedacht, ganze Zugtypen zu ignorieren. Beispielsweise möchte man, dass der Bot keine ICE's, keine NightJets und keine European Sleepers auswählt, da diese sehr lange Strecken fahren und der VC somit lange unverändert bleibt: ``` { ... @@ -50,16 +54,15 @@ Die Blacklist ist dafür gedacht, ganze Zugtypen zu ignorieren. So würde man es } ``` -Die Namen der einzelnen Zugtypen kann mit im Footer von `/info` oder im Terminal log erfahren. +Die Namen der einzelnen Zugtypen kann im Footer von `/info` oder im Terminal log erfahren. -## Data +## src/data Es kann vorkommen, dass während dem `/info` Befehl das Logo und die Farbe des Bahnuntermehns fehlt. ![Beispiel für fehlende Daten](.github/info_fehlende_daten.png) -Die zugehörigen Daten lassen sich innerhalb [operators.py](src/data/operators.py) ergänzen. Der Aufbau dabei sollte selbsterklärend sein, dennoch habe ich eine kleine Beschreibung in die Datei hinzugefügt. Bei Änderungen sind PR's willkommen. -Die Datei wird leider nie vollständig sein da die verschiedenen Fahrtaufträge in Deutschland sehr fragmentiert sind. +Die zugehörigen Daten lassen sich innerhalb [src/data/operators.py](src/data/operators.py) ergänzen. Der Aufbau dabei sollte selbsterklärend sein, dennoch habe ich eine kleine Beschreibung in die Datei hinzugefügt. Bei Änderungen sind PR's willkommen. -Emojis für die Formattierung werden dynamisch anhand des Zugtypens gepulled. Dabei wird zwischen Nahverkehr und Fernverkehr unterschieden. Bei einem Zugtyp, welcher zu keiner der Kategorie assigned ist, wird ein Fallback Emoji ist. Sollte man einen Zugtypen hinzufügen wollen oder die Emojis ändern/deaktivieren wollen ist dies in [emojis.py](src/data/emojis.py) möglich. Die Namen der einzelnen Zugtypen kann mit im Footer von `/info` oder im Terminal log erfahren. +Emojis für die Formattierung werden dynamisch anhand des Zugtypens gepulled. Dabei wird zwischen Nahverkehr und Fernverkehr unterschieden. Bei einem Zugtyp, welcher zu keiner der Kategorie assigned ist, wird ein Fallback Emoji eingesetzt. Sollte man einen Zugtypen hinzufügen wollen oder die Emojis ändern/deaktivieren wollen ist dies in [src/data/emojis.py](src/data/emojis.py) möglich. Die Namen der einzelnen Zugtypen kann im Footer von `/info` oder im Terminal log erfahren. -Die Statuseinträge, von welchen der Bot alle 5 Minuten einen aussucht, kann mn in [status.py](src/data/status.py) anpassen. \ No newline at end of file +Den Status, den sich der Bot alle 5 Minuten random auswählt, kann man in [src/data/status.py](src/data/status.py) anpassen. \ No newline at end of file diff --git a/config.json.example b/config.json.example index 1ea0058..6ae9d38 100644 --- a/config.json.example +++ b/config.json.example @@ -1,6 +1,7 @@ { "token": "", "stations": [ "Berlin Hbf", "Hamburg Hbf", "München Hbf", "Amsterdam Centraal"], + "dbf": "https://dbf.finalrewind.org", "server": , "vc": , "random": true, diff --git a/main.py b/main.py index 64a3af1..d1e5d40 100644 --- a/main.py +++ b/main.py @@ -21,12 +21,12 @@ async def on_ready(): if not change_status.is_running(): change_status.start() await rename_vc(bot) - +''' @bot.event async def on_application_command_error(ctx, error): embed = build_error_embed(f"Ein Fehler ist aufgetreten: {error}") await ctx.respond(embed=embed) - +''' try: bot.run(config['token']) except: diff --git a/src/embeds.py b/src/embeds.py index 4eac767..5b1a727 100644 --- a/src/embeds.py +++ b/src/embeds.py @@ -2,6 +2,7 @@ import random import discord from datetime import datetime, timedelta import src.handlers as handlers +from src.config import config from src.utils import operator_metadata, format_via_list, resolve_operator, logger def format_timestamp(timestr): @@ -62,14 +63,15 @@ def build_info_embed() -> discord.Embed | None: embed.add_field(name="Route", value="\n".join(route_lines)) slogans = operator_infos.get("slogan") - footer_notice = f"Daten großzügig bereitgestellt von dbf.finalrewind.org • Typ: {handlers.train_type}" + dbf = config.get("dbf", "https://dbf.finalrewind.org") + footer_notice = f"Daten großzügig bereitgestellt von {dbf} • Typ: {handlers.train_type}" footer_text = ( f"{random.choice(slogans)} • {footer_notice}" if slogans else footer_notice ) - embed.set_footer(text=footer_text, icon_url="https://dbf.finalrewind.org/static/icons/icon-96x96.png") + embed.set_footer(text=footer_text, icon_url=f"{dbf}/static/icons/icon-96x96.png") return embed def build_error_embed(errormsg) -> discord.Embed: diff --git a/src/utils.py b/src/utils.py index 2e9944b..0353bc9 100644 --- a/src/utils.py +++ b/src/utils.py @@ -8,6 +8,7 @@ import src.data.operators as operators_module import src.data.emojis as emojis _operators_mtime = None +dbf = config.get("dbf", "https://dbf.finalrewind.org") def _reload_operators_if_changed(): global _operators_mtime @@ -28,10 +29,10 @@ def random_connection(): available_stations = config["stations"].copy() while True: if not available_stations: - logger("Keine validen Bahnhöfe. Schlag den richtigen Bahnhofsnamen auf https://dbf.finalrewind.org/ nach", "fatal") + logger("Keine validen Bahnhöfe. Schlag den richtigen Bahnhofsnamen auf {dbf} nach", "fatal") station = random.choice(available_stations) - url = f"https://dbf.finalrewind.org/{station}.json" + url = f"{dbf}/{station}.json" blacklist = config.get("blacklist", []) try: @@ -72,7 +73,7 @@ def random_connection(): } def get_train_info(station, train_ID, train_type): - url = f"https://dbf.finalrewind.org/z/{train_type}%20{train_ID}/{station}.json" + url = f"{dbf}/z/{train_type}%20{train_ID}/{station}.json" logger(f"Fetche {url}") try: response = requests.get(url)