docs: async def connect(
          self, server, port, nickname, password=None, username=None,
          ircname=None, connect_factory=connection.AioFactory()
      ):
          """Connect/reconnect to a server.
  
          Arguments:
  
          * server - Server name
          * port - Port number
          * nickname - The nickname
          * password - Password (if any)
          * username - The username
          * ircname - The IRC name ("realname")
  
          * connect_factory - An async callable that takes the event loop and the
            server address, and returns a connection (with a socket interface)
  
          This function can be called to reconnect a closed connection.
  
          Returns the AioProtocol instance (used for handling incoming
          IRC data) and the transport instance (used for handling
          outgoing data).
          """
          if self.connected:
              self.disconnect("Changing servers")
  
          self.buffer = self.buffer_class()
          self.handlers = {}
          self.real_server_name = ""
          self.real_nickname = nickname
          self.server = server
          self.port = port
          self.server_address = (server, port)
          self.nickname = nickname
          self.username = username or nickname
          self.ircname = ircname or nickname
          self.password = password
          self.connect_factory = connect_factory
  
          protocol_instance = self.protocol_class(self, self.reactor.loop)
          connection = self.connect_factory(
              protocol_instance, self.server_address)
          transport, protocol = await connection
  
          self.transport = transport
          self.protocol = protocol
  
          self.connected = True
          self.reactor._on_connect(self.protocol, self.transport)
  
          # Log on...
          if self.password:
              self.pass_(self.password)
          self.nick(self.nickname)
          self.user(self.username, self.ircname)
          return self