async def connect(self, *, timeout=<NUM_LIT>, reconnect=True):
key_id, _ = self._get_voice_client_key()<EOL>state = self._state<EOL>if state._get_voice_client(key_id):<EOL><INDENT>raise ClientException('<STR_LIT>')<EOL><DEDENT>voice = VoiceClient(state=state, timeout=timeout, channel=self)<EOL>state._add_voice_client(key_id, voice)<EOL>try:<EOL><INDENT>await voice.connect(reconnect=reconnect)<EOL><DEDENT>except asyncio.TimeoutError:<EOL><INDENT>try:<EOL><INDENT>await voice.disconnect(force=True)<EOL><DEDENT>except Exception:<EOL><INDENT>pass<EOL><DEDENT>raise <EOL><DEDENT>return voice<EOL>
|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.