diff options
Diffstat (limited to '')
| -rw-r--r-- | cogs/music/audio_playback.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/cogs/music/audio_playback.py b/cogs/music/audio_playback.py index 3d4f453..d23809a 100644 --- a/cogs/music/audio_playback.py +++ b/cogs/music/audio_playback.py | |||
| @@ -5,8 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | import os | 6 | import os |
| 7 | import logging | 7 | import logging |
| 8 | from pathlib import Path | 8 | import urllib.parse |
| 9 | |||
| 10 | import discord | 9 | import discord |
| 11 | import mutagen | 10 | import mutagen |
| 12 | 11 | ||
| @@ -74,13 +73,17 @@ class AudioPlaybackManager: | |||
| 74 | async def prepare_audio_source(source, is_url, display_name): | 73 | async def prepare_audio_source(source, is_url, display_name): |
| 75 | """Prepare audio source for playback. Returns (source, final_display_name).""" | 74 | """Prepare audio source for playback. Returns (source, final_display_name).""" |
| 76 | if is_url: | 75 | if is_url: |
| 77 | # For URLs, use FFmpeg with the direct URL | 76 | # For URLs, use FFmpeg with the direct URL and extract clean filename |
| 78 | ffmpeg_options = { | 77 | ffmpeg_options = { |
| 79 | 'options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', | 78 | 'options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', |
| 80 | 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5' | 79 | 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5' |
| 81 | } | 80 | } |
| 82 | audio_source = discord.FFmpegPCMAudio(source, **ffmpeg_options) | 81 | audio_source = discord.FFmpegPCMAudio(source, **ffmpeg_options) |
| 83 | return audio_source, display_name | 82 | # Extract clean filename for URL (remove extension and decode URL encoding) |
| 83 | filename = os.path.basename(source.split('?')[0]) # Remove query parameters | ||
| 84 | filename = urllib.parse.unquote(filename) # Decode URL encoding | ||
| 85 | clean_filename = os.path.splitext(filename)[0] # Remove file extension | ||
| 86 | return audio_source, clean_filename | ||
| 84 | else: | 87 | else: |
| 85 | # For local files, use default options | 88 | # For local files, use default options |
| 86 | audio_source = discord.FFmpegPCMAudio(source=source) | 89 | audio_source = discord.FFmpegPCMAudio(source=source) |
| @@ -93,8 +96,11 @@ class AudioPlaybackManager: | |||
| 93 | if title: | 96 | if title: |
| 94 | display_name = title | 97 | display_name = title |
| 95 | logger.debug(f"Read metadata - title: {title}") | 98 | logger.debug(f"Read metadata - title: {title}") |
| 99 | else: | ||
| 100 | display_name = os.path.splitext(os.path.basename(source))[0] | ||
| 96 | except Exception as e: | 101 | except Exception as e: |
| 97 | logger.warning(f"Could not read metadata from {source}: {str(e)}") | 102 | logger.warning(f"Could not read metadata from {source}: {str(e)}") |
| 103 | display_name = os.path.splitext(os.path.basename(source))[0] | ||
| 98 | 104 | ||
| 99 | return audio_source, display_name | 105 | return audio_source, display_name |
| 100 | 106 | ||
