docs: def once(self, event, f=None):
          """The same as ``ee.on``, except that the listener is automatically
          removed after being called.
          """
          def _wrapper(f):
              def g(*args, **kwargs):
                  self.remove_listener(event, f)
                  # f may return a coroutine, so we need to return that
                  # result here so that emit can schedule it
                  return f(*args, **kwargs)
  
              self._add_event_handler(event, f, g)
              return f
  
          if f is None:
              return _wrapper
          else:
              return _wrapper(f)