async def create_player(self, channel: discord.VoiceChannel) -> Player:
        """
        Connects to a discord voice channel.

        This function is safe to repeatedly call as it will return an existing
        player if there is one.

        Parameters
        ----------
        channel

        Returns
        -------
        Player
            The created Player object.
        """
        if self._already_in_guild(channel):
            p = self.get_player(channel.guild.id)
            await p.move_to(channel)
        else:
            p = Player(self, channel)
            await p.connect()
            self._player_dict[channel.guild.id] = p
            await self.refresh_player_state(p)
        return p