docs: def _recv(self, rm_colon=False, blocking=True,
                expected_replies=None, default_rvalue=[''],
                ignore_unexpected_replies=True, rm_first=True, recur_limit=10):
          """
          Receives and processes an IRC protocol message.
          Optional arguments:
          * rm_colon=False - If True:
                          If the message is > 3 items long:
                              Remove the colon(if found) from the [3] item.
                          Else:
                          Remove the colon(if found) from the [2] item.
          * blocking=True - Should this call block?
          * expected_replies=None - If specified:
                       If no matching reply is found:
                          Return the default_rvalue.
                      Else:
                          Return the message.
          * default_rvalue=[''] - If no message or a matching message;
                              is found, return default_rvalue.
          * ignore_unexpected_replies=True - If an,
                                      unexpected reply is encountered,
                                      should we keep going,
                                      until we get a valid reply?
                                      If False, it will just return
                          default_rvalue(If a valid reply isn't found).
          * rm_first=True - If True,
          remove [0] from the message before returning it.
          """
          append = False
          if expected_replies:
              if len(expected_replies) > 1:
                  append = True
  
          if self.readable():
              msg = self._raw_recv()
          else:
              if not blocking:
                  return default_rvalue
              else:
                  msg = self._raw_recv()
  
          msg = msg.split(None, 3)
  
          if msg[1] in self.error_dictionary:
              self.exception(msg[1])
          if rm_colon:
              if len(msg) > 3:
                  if msg[3][0] == ':':
                      msg[3] = msg[3][1:]
              elif len(msg) > 2:
                  if msg[2][0] == ':':
                      msg[2] = msg[2][1:]
          if expected_replies:
              if msg[1] not in expected_replies:
                  self.stepback(append)
                  if ignore_unexpected_replies and recur_limit > 0:
                      recur_limit -= 1
                      return self._recv(rm_colon=rm_colon, blocking=blocking, \
                                 expected_replies=expected_replies, \
                                 default_rvalue=default_rvalue, \
              ignore_unexpected_replies=ignore_unexpected_replies,
              rm_first=rm_first, recur_limit=recur_limit)
  
                  return default_rvalue
          if rm_first:
              return msg[1:]
          return msg