From 66ec499c272c8c3a63666469c65d0d0f6637b017 Mon Sep 17 00:00:00 2001 From: Kaaninchen <124433727+kaaninchen@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:20:30 +0200 Subject: [PATCH] rewrite audio announcements feature to be simpler to setup --- .github/voice_announcements_visualized.png | Bin 74343 -> 0 bytes README.md | 35 +++------------------ config.json.example | 13 ++------ src/api/transitous.py | 2 +- src/config.py | 15 ++------- src/dc/handlers.py | 26 ++++++--------- src/utils.py | 31 +++++------------- 7 files changed, 28 insertions(+), 94 deletions(-) delete mode 100644 .github/voice_announcements_visualized.png diff --git a/.github/voice_announcements_visualized.png b/.github/voice_announcements_visualized.png deleted file mode 100644 index 6d875560e749f91cfe7004e80bcffd66fa4d9108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74343 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%0A$l?JFW2GVOiyB;tbqcLB9X14e?P`k+L+N*VSI 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%0ASdo#A3Td!)cTWWX@4;l>1Yv`N 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 diff --git a/README.md b/README.md index bd32f75..6a90c76 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,8 @@ I highly recommend keeping `"OTHER"` blacklisted, if the API doesn't know what t - `timezone` is timezone in the IANA timezone format. You can [look it up here](https://www.addevent.com/c/documentation/tools/time-zone-lookup) ##### announcements + +##### `text_announcements:` The bot can send a text announcement in the voice chat at the start/end of a trip. At the end of a trip, it would send this embed: @@ -196,37 +198,10 @@ It will also send the `/info` embed at the start of a new connection with inform To reduce spam, the bot will only send announcements if someone is in the voice chat -##### voice -⚠️ Requires `announcements` to be set to enabled - -The bot can join the voice chat, play an audio file, and leave at various points of your trip. You have to have [FFmpeg](https://www.ffmpeg.org/) installed for this to work. - -Place the audio file of your desired station in [src/data/announcements](src/data/announcements/). Then, define the stations name with the name of the audio file in either `end_stations` or `stops`. The path will be autocompleted to [src/data/announcements](src/data/announcements/). The station name has to be EXACT, if you're unsure then [get the name through the helper script](#stations) - -`end_stations` is for audio files that should play at the end of your trip, and `stops` is for audio files that should play while the train is passing through your desired station. If you set the name of a station to `general`, then the bot will always play that file before the trip ends/a new stop has been reached. - -I'm hoping that I didn't explain this too complicated. Here's an example to visualize this: - -![example_files](.github/voice_announcements_visualized.png) - -```json - "announcements": { - "enabled": true, - "voice": [ - { - "enabled": true, - "end_stations": { - "general": "general.aac", - "Hannover Hbf": "hannover.aac" - }, - "stops": { - "Amsterdam, Noorderpark": "noorderpark.aac" - } - } - ] - }, -``` +##### `voice_announcements:` +The bot can join the voice chat, play an audio file, and disconnect from the voice chat, at various points of your trip. You have to have [FFmpeg](https://www.ffmpeg.org/) installed for this to work. +Place the audio file of your desired station in [src/data/announcements](src/data/announcements/) with the EXACT name of the station. The bot will automatically check if an audio file with the stations name exists, and if it does, play it. #### http - `"user_agent"`: The user agent of the bot for the API. If you don't know what that is, then you shouldn't have to change that. Even if you do, you still probably don't have to diff --git a/config.json.example b/config.json.example index 3243519..8b1f231 100644 --- a/config.json.example +++ b/config.json.example @@ -24,17 +24,8 @@ "timezone": "Europe/Berlin" }, "announcements": { - "enabled": true, - "voice": [ - { - "enabled": false, - "end_stations": { - "general": "general.aac", - }, - "stops": { - } - } - ] + "text_announcements": true, + "voice_announcements": false }, "http": { "user_agent": "Gleiswechsel-Discord-Bot" diff --git a/src/api/transitous.py b/src/api/transitous.py index 8ce91ad..0a4f92c 100644 --- a/src/api/transitous.py +++ b/src/api/transitous.py @@ -243,7 +243,7 @@ def get_trip_details(random_connection: dict | None) -> dict | None: arrival_dt = parse_iso(end_time) departure_dt = parse_iso(start_time) - train_name = get_train_name(display_name, mode) + train_name = get_train_name(display_name, mode) # used by lang if train_from == from_station: long_name = long_name_lang.train_from() else: diff --git a/src/config.py b/src/config.py index cae1cf1..898b6cc 100644 --- a/src/config.py +++ b/src/config.py @@ -21,16 +21,10 @@ class ConnectionsConfig: max_wait_time: Optional[int] = None max_duration: Optional[int] = None -@dataclass -class VoiceAnnouncementConfig: - enabled: bool - end_stations: dict[str, str] - stops: dict[str, str] - @dataclass class AnnouncementConfig: - enabled: bool - voice: list[VoiceAnnouncementConfig] + text_announcements: bool + voice_announcements: bool @dataclass class HttpConfig: @@ -50,10 +44,7 @@ def _load_config() -> Config: return Config( discord=DiscordConfig(**raw["discord"]), connections=ConnectionsConfig(**raw["connections"]), - announcements=AnnouncementConfig( - enabled=raw["announcements"]["enabled"], - voice=[VoiceAnnouncementConfig(**v) for v in raw["announcements"]["voice"]], - ), + announcements=AnnouncementConfig(**raw["announcements"]), http=HttpConfig(**raw["http"]), ) diff --git a/src/dc/handlers.py b/src/dc/handlers.py index 39958f9..0fff4c3 100644 --- a/src/dc/handlers.py +++ b/src/dc/handlers.py @@ -39,30 +39,23 @@ async def rename_vc(bot: discord.Bot, voice_channel, from_scheduler: bool = Fals formatting = channel_formatting(mode) await voice_channel.edit(name=f"{formatting}{long_name}") await voice_channel.set_status(None) - start_next_stop_updates(bot, voice_channel) - + start_next_stop_updates(voice_channel) logger(f"Updated channel name!") await announcer("transfer", voice_channel) - _scheduled_task = asyncio.create_task(_schedule_next_transfer(bot, trip["arrival_dt"], voice_channel, trip["to"])) async def announcer(announcement: str, voice_channel: discord.VoiceChannel, destination = None): from src.dc.embeds import build_info_embed, build_announcement_embed - announcements_enabled = config.announcements.enabled - voice_announcement_enabled = config.announcements.voice[0].enabled + announcements_enabled = config.announcements.text_announcements if announcements_enabled: if len(voice_channel.members) > 0: match announcement: case "end_of_connection": - if voice_announcement_enabled: - announcement_status = await voice_announcer(destination, voice_channel, "end_stations") - if announcement_status: - return - embed = build_announcement_embed(lang.embeds.announcement.end_of_connection.message()) + embed = build_announcement_embed(lang.embeds.announcement.end_of_connection.message()) case "transfer": embed = build_info_embed() case _: @@ -72,8 +65,8 @@ async def announcer(announcement: str, voice_channel: discord.VoiceChannel, dest if embed: await voice_channel.send(embed=embed) -async def voice_announcer(destination: str, voice_channel: discord.VoiceChannel, type_announcement: str) -> bool: - sound_path = get_sound_path(destination=destination, type_announcement=type_announcement) +async def voice_announcer(station: str, voice_channel: discord.VoiceChannel) -> bool: + sound_path = get_sound_path(station=station) if sound_path is None: return False @@ -121,7 +114,7 @@ async def _schedule_next_transfer(bot: discord.Bot, arrival_dt: datetime, voice_ logger("Train arrived, searching for a new connection....") await rename_vc(bot, voice_channel, from_scheduler=True) -async def _update_next_loop(bot: discord.Bot, voice_channel: discord.VoiceChannel): +async def _update_next_loop(voice_channel: discord.VoiceChannel): global trip try: if trip is None: @@ -145,7 +138,8 @@ async def _update_next_loop(bot: discord.Bot, voice_channel: discord.VoiceChanne status_text = f"{lang.embeds.info.next_stop()}: {next_stop_str}" await voice_channel.set_status(status_text, reason="Next stop status") - await voice_announcer(next_stop_str, voice_channel, type_announcement="stops") + if config.announcements.voice_announcements: + await voice_announcer(next_stop_str, voice_channel) wait_seconds = (next_stop["arrival"] - datetime.now(LOCAL_TZ)).total_seconds() if wait_seconds > 0: @@ -154,10 +148,10 @@ async def _update_next_loop(bot: discord.Bot, voice_channel: discord.VoiceChanne except asyncio.CancelledError: raise -def start_next_stop_updates(bot: discord.bot, voice_channel: discord.VoiceChannel): +def start_next_stop_updates(voice_channel: discord.VoiceChannel): global _next_stop_task if _next_stop_task is not None and not _next_stop_task.done(): _next_stop_task.cancel() - _next_stop_task = asyncio.create_task(_update_next_loop(bot, voice_channel)) \ No newline at end of file + _next_stop_task = asyncio.create_task(_update_next_loop(voice_channel)) \ No newline at end of file diff --git a/src/utils.py b/src/utils.py index e4edb9e..0976cf8 100644 --- a/src/utils.py +++ b/src/utils.py @@ -123,31 +123,14 @@ def get_operator_metadata(agency: str, route_color: str, mode: str) -> dict: "slogans": slogans } -def get_sound_path(destination, type_announcement: str) -> str | None: - if type_announcement == "end_stations": - voice_stations = config.announcements.voice[0].end_stations - elif type_announcement == "stops": - voice_stations = config.announcements.voice[0].stops - - if destination in voice_stations: - announcement_for = destination - else: - general_sound_enabled = voice_stations.get("general", "") - if not general_sound_enabled: - return None - announcement_for = "general" - - if voice_stations.values() == list: - sound_file = random.choice(voice_stations.get(announcement_for)) - else: - sound_file = voice_stations.get(announcement_for) +def get_sound_path(station: str) -> str | None: + announcement_dir = Path("src/data/announcements") - sound_path = f"src/data/announcements/{sound_file}" - if Path(sound_path).is_file() is False: - logger(f"Couldn't find {sound_path}", "error") - return None - - return sound_path + for file in announcement_dir.iterdir(): + if file.is_file(): + if station.lower() in file.stem.lower(): + sound_file = file.resolve() + return sound_file def get_next_station(stops: dict, train_from: str) -> dict | None: now = datetime.now(LOCAL_TZ)