code: 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
docs: 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.