docs: def finish(self):
          """
          The client conection is finished. Do some cleanup to ensure that the
          client doesn't linger around in any channel or the client list, in case
          the client didn't properly close the connection with PART and QUIT.
          """
          log.info('Client disconnected: %s', self.client_ident())
          response = ':%s QUIT :EOF from client' % self.client_ident()
          for channel in self.channels.values():
              if self in channel.clients:
                  # Client is gone without properly QUITing or PARTing this
                  # channel.
                  for client in channel.clients:
                      client.send_queue.append(response)
                  channel.clients.remove(self)
          if self.nick:
              self.server.clients.pop(self.nick)
          log.info('Connection finished: %s', self.client_ident())