@@ -273,19 +273,30 @@ async def _pool_closer(self) -> None:
273273 if not self ._has_closed :
274274 await self .close ()
275275
276- async def close (self ) -> None :
276+ async def close (self , eject : bool = False ) -> None :
277277 """Method to close this Node and cleanup.
278278
279279 After this method has finished, the event ``on_wavelink_node_closed`` will be fired.
280280
281281 This method renders the Node websocket disconnected and disconnects all players.
282+
283+ Parameters
284+ ----------
285+ eject: bool
286+ If ``True``, this will remove the Node from the Pool. Defaults to ``False``.
287+
288+
289+ .. versionchanged:: 3.2.1
290+
291+ Added the ``eject`` parameter. Fixed a bug where the connected Players were not being disconnected.
282292 """
283293 disconnected : list [Player ] = []
284294
285- for player in self ._players .values ():
295+ for player in self ._players .copy (). values ():
286296 try :
287- await player ._destroy ()
288- except LavalinkException :
297+ await player .disconnect ()
298+ except Exception as e :
299+ logger .debug ("An error occured while disconnecting a player in the close method of %r: %s" , self , e )
289300 pass
290301
291302 disconnected .append (player )
@@ -299,6 +310,9 @@ async def close(self) -> None:
299310
300311 self ._has_closed = True
301312
313+ if eject :
314+ getattr (Pool , "_Pool__nodes" ).pop (self .identifier , None )
315+
302316 # Dispatch Node Closed Event... node, list of disconnected players
303317 if self .client is not None :
304318 self .client .dispatch ("wavelink_node_closed" , self , disconnected )
0 commit comments