transitous rewrite: next_stop functionality

This commit is contained in:
Kaaninchen
2026-08-16 19:43:53 +02:00
parent ff8c2f55db
commit 66289e8572
2 changed files with 36 additions and 7 deletions
+13 -5
View File
@@ -1,7 +1,7 @@
import discord import discord
import random 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 from src.dc.helpers import format_timestamp_to_dc
def build_embed_footer(mode: str, slogans): 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"]) metadata = get_operator_metadata(agency, trip["route_color"])
departure = format_timestamp_to_dc(trip["departure"]) departure = format_timestamp_to_dc(trip["departure"])
arrival = format_timestamp_to_dc(trip["arrival"]) arrival = format_timestamp_to_dc(trip["arrival"])
next_stop = get_next_station(trip["stops"])
embed = discord.Embed( embed = discord.Embed(
title = trip["long_name"], title = trip["long_name"],
description=f"Abfahrt von {trip["station"]} um {departure}. Ankunft um {arrival}", 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)) count = min(3, len(stops))
random_stops = random.sample(list(stops), k=count) 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) embed.add_field(name="Über", value=via, inline=False)
field_lines, field_length, part = [], 0, 1 field_lines, field_length, part = [], 0, 1
for name, stop_arrival in stops.items(): 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: 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, field_length, part = [], 0, part + 1
field_lines.append(line) field_lines.append(line)
field_length += len(line) + 1 field_length += len(line) + 1
if field_lines: 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"]) footer = build_embed_footer(trip["mode"], metadata["slogans"])
embed.set_footer(text=footer["text"], icon_url=footer["icon"]) embed.set_footer(text=footer["text"], icon_url=footer["icon"])
+22 -1
View File
@@ -3,7 +3,7 @@ import os
import importlib import importlib
import random import random
from pathlib import Path from pathlib import Path
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone, date
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
import src.data.operators as operators import src.data.operators as operators
@@ -156,3 +156,24 @@ def get_sound_path(destination) -> str | None:
return None return None
return sound_path 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