From 66289e8572796ebf9d61d7640ed65333d500e530 Mon Sep 17 00:00:00 2001 From: Kaaninchen <124433727+kaaninchen@users.noreply.github.com> Date: Sun, 16 Aug 2026 19:43:53 +0200 Subject: [PATCH] transitous rewrite: next_stop functionality --- src/dc/embeds.py | 18 +++++++++++++----- src/utils.py | 25 +++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/dc/embeds.py b/src/dc/embeds.py index e317a84..3cf5a9d 100644 --- a/src/dc/embeds.py +++ b/src/dc/embeds.py @@ -1,7 +1,7 @@ import discord import random -from src.utils import get_operator_metadata +from src.utils import get_operator_metadata, get_next_station from src.dc.helpers import format_timestamp_to_dc def build_embed_footer(mode: str, slogans): @@ -25,6 +25,8 @@ def build_info_embed() -> discord.Embed: metadata = get_operator_metadata(agency, trip["route_color"]) departure = format_timestamp_to_dc(trip["departure"]) arrival = format_timestamp_to_dc(trip["arrival"]) + next_stop = get_next_station(trip["stops"]) + embed = discord.Embed( title = trip["long_name"], description=f"Abfahrt von {trip["station"]} um {departure}. Ankunft um {arrival}", @@ -37,23 +39,29 @@ def build_info_embed() -> discord.Embed: count = min(3, len(stops)) random_stops = random.sample(list(stops), k=count) - via = ", ".join(random_stops[:-1]) + " und " + random_stops[-1] + via = ", ".join(random_stops[:-1]) + " und " + random_stops[-1] + ". Nächster Halt: " + next_stop["name"] embed.add_field(name="Über", value=via, inline=False) field_lines, field_length, part = [], 0, 1 for name, stop_arrival in stops.items(): - line = f"**• {name} ({stop_arrival} Uhr)**" if name == trip["station"] else f"• {name} ({stop_arrival} Uhr)" + if name == next_stop["name"]: + line = f"**• {name} ({stop_arrival} Uhr)**" + else: + line = f"• {name} ({stop_arrival} Uhr)" if field_length + len(line) + 1 > 1024: - embed.add_field(name="Route" if part == 1 else "Route (Fortsetzung)", value="\n".join(field_lines), inline=True) + route_page_name = "Route" + if part != 1: + route_page_name += " (Fortsetzung)" + embed.add_field(name=route_page_name, value="\n".join(field_lines), inline=False) field_lines, field_length, part = [], 0, part + 1 field_lines.append(line) field_length += len(line) + 1 if field_lines: - embed.add_field(name="Route" if part == 1 else "Route (Fortsetzung)", value="\n".join(field_lines), inline=True) + embed.add_field(name="Route" if part == 1 else "Route (Fortsetzung)", value="\n".join(field_lines), inline=False) footer = build_embed_footer(trip["mode"], metadata["slogans"]) embed.set_footer(text=footer["text"], icon_url=footer["icon"]) diff --git a/src/utils.py b/src/utils.py index 448c5d2..46f0491 100644 --- a/src/utils.py +++ b/src/utils.py @@ -3,7 +3,7 @@ import os import importlib import random from pathlib import Path -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta, timezone, date from zoneinfo import ZoneInfo import src.data.operators as operators @@ -155,4 +155,25 @@ def get_sound_path(destination) -> str | None: logger(f"Konnte Datei {sound_path} nicht finden", "error") return None - return sound_path \ No newline at end of file + return sound_path + +def get_next_station(stops: dict) -> dict | None: + now = datetime.now() + today = datetime.today() + day_offset = 0 + previous_time = None + + for name, arrival_str in stops.items(): + arrival_time = datetime.strptime(arrival_str, "%H:%M").time() + + if previous_time is not None and arrival_time < previous_time: + day_offset += 1 + + arrival_dt = datetime.combine(today + timedelta(days=day_offset), arrival_time) + previous_time = arrival_time + + if arrival_dt >= now: + return {"name": name, "arrival": arrival_str} + + return None + \ No newline at end of file