mirror of
https://github.com/kaaninchen/Gleiswechsel.git
synced 2026-07-21 19:52:47 +00:00
85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
import random
|
|
import discord
|
|
from datetime import datetime, timedelta
|
|
import src.handlers as handlers
|
|
from src.utils import operator_metadata, format_via_list, resolve_operator, logger
|
|
|
|
def format_timestamp(timestr):
|
|
parsed_time = datetime.strptime(timestr, "%H:%M")
|
|
now = datetime.now()
|
|
final_datetime = datetime.now().replace(
|
|
hour=parsed_time.hour,
|
|
minute=parsed_time.minute,
|
|
second=0,
|
|
microsecond=0
|
|
)
|
|
|
|
if final_datetime <= now:
|
|
final_datetime += timedelta(days=1)
|
|
|
|
return discord.utils.format_dt(final_datetime, style="t")
|
|
|
|
def format_iso_timestamp(isostr):
|
|
parsed_time = discord.utils.parse_time(isostr)
|
|
return discord.utils.format_dt(parsed_time, style="t")
|
|
|
|
def build_info_embed() -> discord.Embed | None:
|
|
if handlers.current is None:
|
|
return None
|
|
|
|
conn = handlers.current
|
|
info = handlers.train_info
|
|
|
|
current_operator = resolve_operator(info["operators"])
|
|
arrival = format_iso_timestamp(info["arrival"])
|
|
departure = format_timestamp(conn['departure'])
|
|
|
|
operator_infos = operator_metadata(current_operator)
|
|
|
|
embed = discord.Embed(
|
|
title=handlers.train_name,
|
|
description=f"Abfahrt von {conn['station']} um {departure}. Ankunft um {arrival}",
|
|
color=operator_infos["color"]
|
|
)
|
|
|
|
if len(conn['via']) > 0:
|
|
embed.add_field(name="Über", value=format_via_list(conn['via']), inline=False)
|
|
|
|
if operator_infos.get("unknown"):
|
|
logger(f"WARNING: {current_operator} nicht in operators.py gefunden")
|
|
|
|
embed.set_author(name=current_operator)
|
|
embed.set_thumbnail(url=operator_infos["logo"])
|
|
|
|
route_lines = []
|
|
for stop in conn['route']:
|
|
stop_name = stop["name"]
|
|
if stop_name == conn['station']:
|
|
route_lines.append(f"• **{stop_name}**")
|
|
else:
|
|
route_lines.append(f"• {stop_name}")
|
|
|
|
embed.add_field(name="Route", value="\n".join(route_lines))
|
|
|
|
remove_json_url = info['url'].rsplit('.', 1)[0]
|
|
formatted_url = remove_json_url.replace(' ', '%20')
|
|
embed.add_field(name="Weitere Informationen", value=formatted_url, inline=False)
|
|
|
|
slogans = operator_infos.get("slogan")
|
|
footer_text = (
|
|
f"{random.choice(slogans)} • Daten großzügig bereitgestellt von dbf.finalrewind.org"
|
|
if slogans else
|
|
"Daten großzügig bereitgestellt von dbf.finalrewind.org"
|
|
)
|
|
|
|
embed.set_footer(text=footer_text, icon_url="https://dbf.finalrewind.org/static/icons/icon-96x96.png")
|
|
return embed
|
|
|
|
def build_error_embed(errormsg) -> discord.Embed:
|
|
embed = discord.Embed(
|
|
title="Ein Fehler ist aufgetreten!",
|
|
description=errormsg,
|
|
color=discord.Colour.red()
|
|
)
|
|
|
|
return embed |