docs: async def connect(self, timeout=None):
          """
          Connects to the Lavalink player event websocket.
  
          Parameters
          ----------
          timeout : int
              Time after which to timeout on attempting to connect to the Lavalink websocket,
              ``None`` is considered never, but the underlying code may stop trying past a
              certain point.
  
          Raises
          ------
          asyncio.TimeoutError
              If the websocket failed to connect after the given time.
          """
          self._is_shutdown = False
  
          combo_uri = "ws://{}:{}".format(self.host, self.rest)
          uri = "ws://{}:{}".format(self.host, self.port)
  
          log.debug(
              "Lavalink WS connecting to %s or %s with headers %s", combo_uri, uri, self.headers
          )
  
          tasks = tuple({self._multi_try_connect(u) for u in (combo_uri, uri)})
  
          for task in asyncio.as_completed(tasks, timeout=timeout):
              with contextlib.suppress(Exception):
                  if await cast(Awaitable[Optional[websockets.WebSocketClientProtocol]], task):
                      break
          else:
              raise asyncio.TimeoutError
  
          log.debug("Creating Lavalink WS listener.")
          self._listener_task = self.loop.create_task(self.listener())
  
          for data in self._queue:
              await self.send(data)
  
          self.ready.set()
          self.update_state(NodeState.READY)