def __init__(self, serverport, username, nick, gecos, extensions, **kwargs): """Initialise the IRC base. :param serverport: (server, port) sequence, similar to the form passed to socket.connect. :param username: The username to send to the server. .. note:: identd may override this. :param nick: The nickname to use. :param extensions: Sequence of default extensions to use. Keyword arguments (extensions may use others): :key ssl: Whether or not to use SSL. Set to an :py:class:`ssl.SSLContext`` to specify custom parameters, or ``True`` for defaults. :key server_password: Server password (PASS). .. note:: Keyword arguments may be used by extensions. kwargs is passed as-is to all extensions. """ super().__init__() self.server, self.port = serverport self.username = username self.nick = nick self.gecos = gecos self.ssl = kwargs.get("ssl", False) self.server_password = kwargs.get("server_password") self.kwargs = kwargs # Basic IRC state self.connected = False self.registered = False self.case = IRCString.RFC1459 self.signals = SignalStorage() # Extension manager system if not extensions: raise ValueError("Need at least one extension") self.extensions = {} for extension in extensions: self.load_extension(extension) # Do the signal storage binding for us now self.signals.bind(self)