code: async def connect(self, *, timeout=60.0, reconnect=True):
          
          key_id, _ = self._get_voice_client_key()
          state = self._state
  
          if state._get_voice_client(key_id):
              raise ClientException('Already connected to a voice channel.')
  
          voice = VoiceClient(state=state, timeout=timeout, channel=self)
          state._add_voice_client(key_id, voice)
  
          try:
              await voice.connect(reconnect=reconnect)
          except asyncio.TimeoutError:
              try:
                  await voice.disconnect(force=True)
              except Exception:
                  # we don't care if disconnect failed because connection failed
                  pass
              raise # re-raise
  
          return voice
docs: |coro|
  
          Connects to voice and creates a :class:`VoiceClient` to establish
          your connection to the voice server.
  
          Parameters
          -----------
          timeout: :class:`float`
              The timeout in seconds to wait for the voice endpoint.
          reconnect: :class:`bool`
              Whether the bot should automatically attempt
              a reconnect if a part of the handshake fails
              or the gateway goes down.
  
          Raises
          -------
          asyncio.TimeoutError
              Could not connect to the voice channel in time.
          ClientException
              You are already connected to a voice channel.
          OpusNotLoaded
              The opus library has not been loaded.
  
          Returns
          -------
          :class:`VoiceClient`
              A voice client that is fully connected to the voice server.