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 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"])
|
||||||
|
|||||||
+23
-2
@@ -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
|
||||||
@@ -155,4 +155,25 @@ def get_sound_path(destination) -> str | None:
|
|||||||
logger(f"Konnte Datei {sound_path} nicht finden", "error")
|
logger(f"Konnte Datei {sound_path} nicht finden", "error")
|
||||||
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
|
||||||
|
|
||||||
Reference in New Issue
Block a user