From bdf93cbc700f6baa55a283300d5bd3d2e958bc69 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 20 May 2026 16:40:28 +0200 Subject: Redirect play_commands imports to cogs.voice, remove audio_playback shim - Update play_commands.py to import get_voice_manager from cogs.voice instead of going through the audio_playback.py re-export shim - Delete the audio_playback.py shim file entirely - Update test_music_audio.py imports to use cogs.voice.VoiceManager - Delete PLAN_VOICE_REFACTOR.md (plan is complete) --- cogs/music/audio_playback.py | 10 ---------- cogs/music/play_commands.py | 11 ++++++----- tests/cogs/test_music_audio.py | 16 ++++++++-------- 3 files changed, 14 insertions(+), 23 deletions(-) delete mode 100644 cogs/music/audio_playback.py diff --git a/cogs/music/audio_playback.py b/cogs/music/audio_playback.py deleted file mode 100644 index 5206a96..0000000 --- a/cogs/music/audio_playback.py +++ /dev/null @@ -1,10 +0,0 @@ -# This file is part of Senator Sperma -# Licensed under the GPL-3.0 License -# Copyright (C) 2026 Salmonik @ salmonik@tuta.io -# https://codeberg.org/salmonik/senator-sperma - -# Re-export shim — all voice utilities now live in cogs.voice.VoiceManager. -# Kept so existing imports in play_commands.py and ai.py keep working. -# TODO: update importers and remove this file. - -from cogs.voice import VoiceManager as AudioPlaybackManager # noqa: F401 diff --git a/cogs/music/play_commands.py b/cogs/music/play_commands.py index bdb021d..a90f901 100644 --- a/cogs/music/play_commands.py +++ b/cogs/music/play_commands.py @@ -16,10 +16,11 @@ import discord from discord.commands import OptionChoice from discord.ext import commands -from cogs.music import audio_playback, media_processing +from cogs.music import media_processing from cogs.utils.file_search import UniversalSearcher from cogs.utils.settings import get_uploadurl from cogs.utils.url_helper import clean_url_for_ytdlp +from cogs.voice import get_voice_manager logger = logging.getLogger(__name__) @@ -162,7 +163,7 @@ class PlayCommands(commands.Cog): if not compressed_path: return - await audio_playback.AudioPlaybackManager.play( + await get_voice_manager(self.bot).play( ctx, compressed_path, delete_after_play=True ) except Exception as e: @@ -209,7 +210,7 @@ class PlayCommands(commands.Cog): upload_task = asyncio.create_task(self._upload_to_copyparty_async(local_path)) - await audio_playback.AudioPlaybackManager.play( + await get_voice_manager(self.bot).play( ctx, local_path, delete_after_play=True ) @@ -274,7 +275,7 @@ class PlayCommands(commands.Cog): if compressed: await self._handle_compressed_file_play(ctx, url) else: - await audio_playback.AudioPlaybackManager.play(ctx, url) + await get_voice_manager(self.bot).play(ctx, url) @discord.slash_command(name="grajcuj", description="grajcujmy wszyscy!") async def play( @@ -309,7 +310,7 @@ class PlayCommands(commands.Cog): if file: file_path: PathLike[str] | str = os.path.join(self.temp_dir, file.filename) await file.save(file_path) - await audio_playback.AudioPlaybackManager.play(ctx, file_path) + await get_voice_manager(self.bot).play(ctx, file_path) else: try: if EXTERNAL_URL_PATTERN.match(melodia.lower()): diff --git a/tests/cogs/test_music_audio.py b/tests/cogs/test_music_audio.py index 150ad5d..98c6f6b 100644 --- a/tests/cogs/test_music_audio.py +++ b/tests/cogs/test_music_audio.py @@ -6,7 +6,7 @@ from conftest import MockApplicationContext @pytest.mark.asyncio async def test_validate_voice_channel_not_in_voice(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager mock_ctx = MagicMock() mock_ctx.author.voice = None @@ -20,7 +20,7 @@ async def test_validate_voice_channel_not_in_voice(): @pytest.mark.asyncio async def test_validate_voice_channel_in_voice(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager mock_channel = MagicMock() mock_ctx = MagicMock() @@ -35,7 +35,7 @@ async def test_validate_voice_channel_in_voice(): @pytest.mark.asyncio async def test_prepare_file_source_file_not_found(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager display_name, absolute_path = await AudioPlaybackManager.prepare_file_source("/nonexistent/file.mp3") @@ -45,7 +45,7 @@ async def test_prepare_file_source_file_not_found(): @pytest.mark.asyncio async def test_prepare_file_source_absolute_path(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager with patch('os.path.exists', return_value=True): with patch('os.path.isabs', return_value=True): @@ -57,7 +57,7 @@ async def test_prepare_file_source_absolute_path(): @pytest.mark.asyncio async def test_prepare_source_url(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager source, _, is_url = await AudioPlaybackManager.prepare_source("https://example.com/stream") @@ -67,7 +67,7 @@ async def test_prepare_source_url(): @pytest.mark.asyncio async def test_prepare_source_local_file(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager with patch('os.path.exists', return_value=True): source, display_name, is_url = await AudioPlaybackManager.prepare_source("/tmp/test.mp3") @@ -78,7 +78,7 @@ async def test_prepare_source_local_file(): @pytest.mark.asyncio async def test_cleanup_temp_file(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager with patch('os.path.exists', return_value=True): with patch('os.remove'): @@ -87,7 +87,7 @@ async def test_cleanup_temp_file(): @pytest.mark.asyncio async def test_cleanup_temp_file_not_exists(): - from cogs.music.audio_playback import AudioPlaybackManager + from cogs.voice import VoiceManager as AudioPlaybackManager with patch('os.path.exists', return_value=False): await AudioPlaybackManager.cleanup_temp_file("/nonexistent/file.mp3") -- cgit v1.2.3