transitous rewrite: some minor info embed improvements

This commit is contained in:
Kaaninchen
2026-08-15 22:13:58 +02:00
parent cf696df5f5
commit 697a0f6218
7 changed files with 152 additions and 25 deletions
+7
View File
@@ -0,0 +1,7 @@
import discord
from src.dc.embeds import build_info_embed
def setup_commands(bot: discord.Bot):
@bot.slash_command(description="Informationen über die aktuelle Fahrt")
async def info(ctx):
await ctx.respond(embed=build_info_embed())
+48
View File
@@ -0,0 +1,48 @@
import discord
import random
from src.utils import convert_iso_string, get_operator_metadata
from src.dc.helpers import format_timestamp_to_dc
def build_embed_footer(mode: str, slogans):
footer_notice = f"Data provided by https://transitous.org • Typ: {mode}"
icon = "https://avatars.githubusercontent.com/u/24960008?s=60&v=4"
if slogans is not None:
footer_text = f"{random.choice(slogans)}{footer_notice}"
else:
footer_text = footer_notice
return {
"text": footer_text,
"icon": icon
}
def build_info_embed() -> discord.Embed:
from src.dc.handlers import trip
agency = trip["agency"]
metadata = get_operator_metadata(agency, trip["route_color"])
departure = format_timestamp_to_dc(trip["departure"])
arrival = format_timestamp_to_dc(trip["arrival"])
embed = discord.Embed(
title = trip["long_name"],
description=f"Abfahrt von {trip["from"]} um {departure}. Ankunft um {arrival}",
color = metadata["color"]
)
route_lines = []
for stop_name, stop_arrival in trip["stops"].items():
if stop_name == trip["from"]:
route_lines.append(f"**• {stop_name} ({stop_arrival} Uhr)**")
else:
route_lines.append(f"{stop_name} ({stop_arrival} Uhr)")
embed.add_field(name="Route", value="\n".join(route_lines))
footer = build_embed_footer(trip["mode"], metadata["slogans"])
embed.set_footer(text=footer["text"], icon_url=footer["icon"])
embed.set_author(name=agency)
embed.set_thumbnail(url=metadata["logo"])
return embed
+5 -4
View File
@@ -8,14 +8,15 @@ from src.utils import logger, channel_formatting
_scheduled_task: asyncio.Task | None = None
async def rename_vc(bot: discord.Bot, voice_channel, from_scheduler: bool = False):
global trip
if not from_scheduler and _scheduled_task and not _scheduled_task.done():
_scheduled_task.cancel()
station_id = transitous.get_random_stop_id()
trip_id = transitous.get_random_connection(station_id)
trip = transitous.get_trip_details(trip_id)
connection = transitous.get_random_connection(station_id)
trip = transitous.get_trip_details(connection["trip_id"], connection["from_station"])
arrival = datetime.fromisoformat(trip["end_time"])
arrival = trip["arrival"]
long_name = trip["long_name"]
print("-----------------")
@@ -25,7 +26,7 @@ async def rename_vc(bot: discord.Bot, voice_channel, from_scheduler: bool = Fals
formatting = channel_formatting(trip["mode"])
await voice_channel.edit(name=f"{formatting}{long_name}")
await voice_channel.set_status(f"Ankunft um {arrival.strftime('%H:%M')}")
await voice_channel.set_status(f"Ankunft um {arrival}")
logger(f"Name geändert!")
+18 -2
View File
@@ -1,5 +1,6 @@
import discord
from src.utils import logger
from datetime import datetime, timedelta
from src.utils import logger, convert_iso_string
def validate_channel(bot: discord.bot, server_id: int, channel_id: int):
guild = bot.get_guild(server_id)
@@ -12,4 +13,19 @@ def validate_channel(bot: discord.bot, server_id: int, channel_id: int):
logger(f"Es konnte kein VC mit der id {channel_id} gefunden werden", "fatal")
return False
return channel
return channel
def format_timestamp_to_dc(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")