33
44from lavalink import Client as LavalinkClient
55
6- from interactions import Client , LibraryException , Snowflake
6+ from interactions import Client , Snowflake
77
88from .models import VoiceState
99from .player import Player
@@ -16,8 +16,8 @@ class VoiceClient(Client):
1616 def __init__ (self , token : str , ** kwargs ):
1717 super ().__init__ (token , ** kwargs )
1818
19- self ._websocket = VoiceWebSocketClient (token , self ._intents )
20- self .lavalink_client = LavalinkClient ( int ( self . me . id ), player = Player )
19+ self ._websocket = VoiceWebSocketClient (self , token , self ._intents )
20+ self .lavalink_client : LavalinkClient = None
2121
2222 self ._websocket ._dispatch .register (
2323 self .__raw_voice_state_update , "on_raw_voice_state_update"
@@ -26,8 +26,13 @@ def __init__(self, token: str, **kwargs):
2626 self .__raw_voice_server_update , "on_raw_voice_server_update"
2727 )
2828
29- self . _websocket . _http . _bot_var = self
29+ async def _login ( self ) -> None :
3030 self ._http ._bot_var = self
31+ self .lavalink_client = LavalinkClient (int (self .me .id ), player = Player )
32+
33+ self .__register_lavalink_listeners ()
34+
35+ await super ()._login ()
3136
3237 async def __raw_voice_state_update (self , data : dict ):
3338 lavalink_data = {"t" : "VOICE_STATE_UPDATE" , "d" : data }
@@ -47,42 +52,36 @@ async def connect(
4752 """
4853 Connects to voice channel and creates player.
4954
50- :param guild_id: The guild id to connect.
51- :type guild_id: Union[Snowflake, int, str]
52- :param channel_id: The channel id to connect.
53- :type channel_id: Union[Snowflake, int, str]
54- :param self_deaf: Whether bot is self deafened
55- :type self_deaf: bool
56- :param self_mute: Whether bot is self muted
57- :type self_mute: bool
55+ :param Union[Snowflake, int, str] guild_id: The guild id to connect.
56+ :param Union[Snowflake, int, str] channel_id: The channel id to connect.
57+ :param bool self_deaf: Whether bot is self deafened
58+ :param bool self_mute: Whether bot is self muted
5859 :return: Created guild player.
5960 :rtype: Player
6061 """
61- # Discord will fire INVALID_SESSION if channel_id is None
6262 if guild_id is None :
63- raise LibraryException ( message = "Missed requirement argument: guild_id " )
63+ raise TypeError ( "guild_id cannot be NoneType " )
6464 if channel_id is None :
65- raise LibraryException ( message = "Missed requirement argument: channel_id " )
65+ raise TypeError ( "channel_id cannot be NoneType for connect method " )
6666
67- await self ._websocket .connect_voice_channel (guild_id , channel_id , self_deaf , self_mute )
67+ await self ._websocket .update_voice_state (guild_id , channel_id , self_deaf , self_mute )
6868 player = self .lavalink_client .player_manager .get (int (guild_id ))
6969 if player is None :
7070 player = self .lavalink_client .player_manager .create (int (guild_id ))
7171 return player
7272
7373 async def disconnect (self , guild_id : Union [Snowflake , int ]):
7474 if guild_id is None :
75- raise LibraryException ( message = "Missed requirement argument: guild_id " )
75+ raise TypeError ( "guild_id cannot be NoneType " )
7676
77- await self ._websocket .disconnect_voice_channel (int (guild_id ))
77+ await self ._websocket .update_voice_state (int (guild_id ))
7878 await self .lavalink_client .player_manager .destroy (int (guild_id ))
7979
8080 def get_player (self , guild_id : Union [Snowflake , int ]) -> Player :
8181 """
8282 Returns current player in guild.
8383
84- :param guild_id: The guild id
85- :type guild_id: Union[Snowflake, int]
84+ :param Union[Snowflake, int] guild_id: The guild id
8685 :return: Guild player
8786 :rtype: Player
8887 """
@@ -97,8 +96,7 @@ def get_user_voice_state(self, user_id: Union[Snowflake, int]) -> Optional[Voice
9796 """
9897 Returns user voice state.
9998
100- :param user_id: The user id
101- :type user_id: Union[Snowflake, int]
99+ :param Union[Snowflake, int] user_id: The user id
102100 :return: Founded user voice state else nothing
103101 :rtype: Optional[VoiceState]
104102 """
@@ -110,8 +108,7 @@ def get_guild_voice_states(self, guild_id: Union[Snowflake, int]) -> Optional[Li
110108 """
111109 Returns guild voice states.
112110
113- :param guild_id: The channel id
114- :type guild_id: Union[Snowflake, int]
111+ :param Union[Snowflake, int] guild_id: The channel id
115112 :return: Founded channel voice states else nothing
116113 :rtype: Optional[List[VoiceState]]
117114 """
@@ -129,8 +126,7 @@ def get_channel_voice_states(
129126 """
130127 Returns channel voice states.
131128
132- :param channel_id: The channel id
133- :type channel_id: Union[Snowflake, int]
129+ :param Union[Snowflake, int] channel_id: The channel id
134130 :return: Founded channel voice states else nothing
135131 :rtype: Optional[List[VoiceState]]
136132 """
@@ -145,16 +141,14 @@ def get_channel_voice_states(
145141 def __register_lavalink_listeners (self ):
146142 for extension in self ._extensions .values ():
147143 for name , func in getmembers (extension ):
148- if hasattr (func , "__lavalink__" ):
149- name = func .__lavalink__ [3 :]
150- event_name = "" .join (word .capitalize () for word in name .split ("_" )) + "Event"
151- if event_name not in self .lavalink_client ._event_hooks :
152- self .lavalink_client ._event_hooks [event_name ] = []
153- self .lavalink_client ._event_hooks [event_name ].append (func )
154-
155- async def _ready (self ) -> None :
156- self .__register_lavalink_listeners ()
157- await super ()._ready ()
144+ if not hasattr (func , "__lavalink__" ):
145+ continue
146+ name = func .__lavalink__ [3 :]
147+ event_name = "" .join (word .capitalize () for word in name .split ("_" )) + "Event"
148+ event_hooks = self .lavalink_client ._event_hooks
149+ if event_name not in event_hooks :
150+ event_hooks [event_name ] = []
151+ event_hooks [event_name ].append (func )
158152
159153
160154def listener (func = None , * , name : str = None ):
0 commit comments