mirror of
https://github.com/kaaninchen/Gleiswechsel.git
synced 2026-09-17 16:52:47 +00:00
transitous rewrite: next_stop functionality
This commit is contained in:
+13
-5
@@ -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"])
|
||||
|
||||
+23
-2
@@ -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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user