Beispiel #1
0
    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)