Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.

Commit af792e2

Browse files
committed
Fix some Node close cleanup
1 parent 90b1da8 commit af792e2

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

wavelink/node.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

wavelink/websocket.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,15 @@ def dispatch(self, event: str, /, *args: Any, **kwargs: Any) -> None:
257257
logger.debug(f"{self.node!r} dispatched the event 'on_wavelink_{event}'")
258258

259259
async def cleanup(self) -> None:
260-
if self.socket:
260+
if self.keep_alive_task:
261261
try:
262-
await self.socket.close()
262+
self.keep_alive_task.cancel()
263263
except:
264264
pass
265265

266-
if self.keep_alive_task:
266+
if self.socket:
267267
try:
268-
self.keep_alive_task.cancel()
268+
await self.socket.close()
269269
except:
270270
pass
271271

0 commit comments

Comments
 (0)