docs: def process_once(self, timeout=0.01):
          """
          Handles an event and calls it's handler
          Optional arguments:
          * timeout=0.01 - Wait for an event until the timeout is reached.
          """
          try:
              event = self.recv(timeout)
              if event:
                  event_t = event[0]
                  event_c = event[1]
  
                  if event_t == 'JOIN':
                      self.on_join(event_c[0], event_c[1])
                  elif event_t == 'PART':
                      self.on_part(event_c[0], event_c[1], event_c[2])
                  elif event_t == 'PRIVMSG':
                      if event_c[1] in self.channels.keys():
                          self.on_chanmsg(event_c[0], event_c[1], event_c[2])
                      else:
                          self.on_privmsg(event_c[0], event_c[2])
                  elif event_t == 'NOTICE':
                      if event_c[1] in self.channels.keys():
                          self.on_channotice(event_c[0], event_c[1], event_c[2])
                      else:
                          self.on_privnotice(event_c[0], event_c[2])
                  elif event_t == 'CTCP':
                      if event_c[1] in self.channels.keys():
                          self.on_chanctcp(event_c[0], event_c[1], event_c[2])
                      else:
                          self.on_privctcp(event_c[0], event_c[2])
                  elif event_t == 'CTCP_REPLY':
                      self.on_ctcp_reply(event_c[0], event_c[2])
                  elif event_t == 'MODE':
                      if event_c[0][0] == self.current_nick:
                          self.on_umode(event_c[1])
                      else:
                          self.on_cmode(event_c[0], event_c[1], event_c[2])
                  elif event_t == 'KICK':
                      self.on_kick(event_c[0], event_c[1], event_c[2], \
                      event_c[3])
                  elif event_t == 'INVITE':
                      self.on_invite(event_c[0], event_c[2])
                  elif event_t == 'NICK':
                      self.on_nick(event_c[0], event_c[1])
                  elif event_t == 'TOPIC':
                      self.on_topic(event_c[0], event_c[1], event_c[2])
                  elif event_t == 'QUIT':
                      self.on_quit(event_c[0], event_c[1])
                  elif event_t == 'LUSERS':
                      self.on_lusers(event_c)
                  elif event_t == 'ERROR':
                      self.on_error(event_c[0])
                  elif event_t == 'UNKNOWN':
                      self.on_unknown(event_c[0])
  
          except self.LurklibError as exception:
              self.on_exception(exception)