code: def play(self, source, *, after=None):
          
  
          if not self.is_connected():
              raise ClientException('Not connected to voice.')
  
          if self.is_playing():
              raise ClientException('Already playing audio.')
  
          if not isinstance(source, AudioSource):
              raise TypeError('source must an AudioSource not {0.__class__.__name__}'.format(source))
  
          self._player = AudioPlayer(source, self, after=after)
          self._player.start()
docs: Plays an :class:`AudioSource`.
  
          The finalizer, ``after`` is called after the source has been exhausted
          or an error occurred.
  
          If an error happens while the audio player is running, the exception is
          caught and the audio player is then stopped.
  
          Parameters
          -----------
          source: :class:`AudioSource`
              The audio source we're reading from.
          after
              The finalizer that is called after the stream is exhausted.
              All exceptions it throws are silently discarded. This function
              must have a single parameter, ``error``, that denotes an
              optional exception that was raised during playing.
  
          Raises
          -------
          ClientException
              Already playing audio or not connected.
          TypeError
              source is not a :class:`AudioSource` or after is not a callable.