Handles an event and calls it's handler
        Optional arguments:
        * timeout=0.01 - Wait for an event until the timeout is reached.

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)