Skip to content

Commit eac263c

Browse files
committed
fix: Add MissingVoiceDependencies
1 parent 4498ae5 commit eac263c

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

discord/errors.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"ApplicationCommandError",
6565
"CheckFailure",
6666
"ApplicationCommandInvokeError",
67+
"MissingVoiceDependencies",
6768
)
6869

6970

@@ -411,3 +412,15 @@ def __init__(self, e: Exception) -> None:
411412
super().__init__(
412413
f"Application Command raised an exception: {e.__class__.__name__}: {e}"
413414
)
415+
416+
417+
class MissingVoiceDependencies(RuntimeError):
418+
"""Raised when required voice dependencies are not installed."""
419+
420+
def __init__(self, missing: tuple[str, ...]) -> None:
421+
self.missing = missing
422+
deps = ", ".join(missing)
423+
super().__init__(
424+
f"{deps} {'is' if len(missing) == 1 else 'are'} required for voice support. "
425+
'Install them with "pip install py-cord[voice]".'
426+
)

discord/voice/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
:license: MIT, see LICENSE for more details.
99
"""
1010

11+
from ..errors import MissingVoiceDependencies
12+
from .utils.dependencies import get_missing_voice_dependencies
13+
14+
if missing := get_missing_voice_dependencies():
15+
raise MissingVoiceDependencies(missing=missing)
16+
1117
from ._types import *
1218
from .client import *
1319
from .packets import *

tests/voice/test_dependency_behavior.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,17 @@ def test_client_warns_once_when_voice_dependencies_are_missing(caplog):
5151
assert dependency in warnings[0]
5252

5353

54-
def test_voice_modules_remain_importable_without_voice_dependencies():
54+
def test_voice_modules_imports_without_voice_dependencies():
5555
if not voice_dependencies.get_missing_voice_dependencies():
5656
pytest.skip("requires an environment without the voice extra")
5757

5858
__import__("discord")
59-
__import__("discord.voice")
60-
__import__("discord.voice.gateway")
61-
__import__("discord.voice.receive.reader")
59+
60+
with pytes.raises(MissingVoiceDependencies):
61+
__import__("discord.voice")
62+
63+
with pytes.raises(MissingVoiceDependencies):
64+
__import__("discord.voice.gateway")
65+
66+
with pytes.raises(MissingVoiceDependencies):
67+
__import__("discord.voice.receive.reader")

0 commit comments

Comments
 (0)