def parse(cls, data):
        """
        Extracts message informations from `data`.

        :param data: received line.
        :type data: unicode
        :return: extracted informations (source, destination, command, args).
        :rtype: tuple(Source, str, str, list)
        :raise: :class:`fatbotslim.irc.NullMessage` if `data` is empty.
        """
        src = u''
        dst = None
        if data[0] == u':':
            src, data = data[1:].split(u' ', 1)
        if u' :' in data:
            data, trailing = data.split(u' :', 1)
            args = data.split()
            args.extend(trailing.split())
        else:
            args = data.split()
        command = args.pop(0)
        if command in (PRIVMSG, NOTICE):
            dst = args.pop(0)
            if ctcp_re.match(args[0]):
                args = args[0].strip(u'\x01').split()
                command = u'CTCP_' + args.pop(0)
        return Source(src), dst, command, args
def parse ( cls , data ) : src = u'' dst = None if data [ 0 ] == u':' : src , data = data [ 1 : ] . split ( u' ' , 1 ) if u' :' in data : data , trailing = data . split ( u' :' , 1 ) args = data . split ( ) args . extend ( trailing . split ( ) ) else : args = data . split ( ) command = args . pop ( 0 ) if command in ( PRIVMSG , NOTICE ) : dst = args . pop ( 0 ) if ctcp_re . match ( args [ 0 ] ) : args = args [ 0 ] . strip ( u'\x01' ) . split ( ) command = u'CTCP_' + args . pop ( 0 ) return Source ( src ) , dst , command , args
Extracts message informations from `data`.

        :param data: received line.
        :type data: unicode
        :return: extracted informations (source, destination, command, args).
        :rtype: tuple(Source, str, str, list)
        :raise: :class:`fatbotslim.irc.NullMessage` if `data` is empty.