<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def disconnect(self, requested=True):
 """ Disconnects this player from it's voice channel. """

        if self.state == PlayerState.DISCONNECTING:
            return

        await self.update_state(PlayerState.DISCONNECTING)
        if not requested:
            log.debug(
                f"Forcing player disconnect for guild {self.channel.guild.id}"
                f" due to player manager request."
            )

        guild_id = self.channel.guild.id
        voice_ws = self.node.get_voice_ws(guild_id)

        if not voice_ws.closed:
            await voice_ws.voice_state(guild_id, None)

        await self.node.destroy_guild(guild_id)
        await self.close()

        self.manager.remove_player(self)