code: def run_until_disconnected(self):
          
          if self.loop.is_running():
              return self._run_until_disconnected()
          try:
              return self.loop.run_until_complete(self.disconnected)
          except KeyboardInterrupt:
              pass
          finally:
              # No loop.run_until_complete; it's already syncified
              self.disconnect()
docs: Runs the event loop until `disconnect` is called or if an error
          while connecting/sending/receiving occurs in the background. In
          the latter case, said error will ``raise`` so you have a chance
          to ``except`` it on your own code.
  
          If the loop is already running, this method returns a coroutine
          that you should await on your own code.