docs: def process_data(self, new_data):
          """
          handles incoming data from the `IrcProtocol` connection.
          Main data processing/routing is handled by the _process_line
          method, inherited from `ServerConnection`
          """
          self.buffer.feed(new_data)
  
          # process each non-empty line after logging all lines
          for line in self.buffer:
              log.debug("FROM SERVER: %s", line)
              if not line:
                  continue
              self._process_line(line)