コード例 #1
0
    def __init__(self,
                 serial_number,
                 access_key,
                 password,
                 host="wa2-mz36-qrmzh6.bosch.de",
                 sasl_mech="DIGEST-MD5"):
        """

        :param serial_number:
        :param access_key:
        :param password:
        :param host:
        :param sasl_mech:
        """
        serial_number = str(serial_number)
        self.serial_number = serial_number
        self.access_key = access_key
        self.password = password

        self.encryption = AESCipher(self._magic, access_key, password)

        identifier = serial_number + "@" + host
        self.jid = jid = self._from = self._rrc_contact_prefix + identifier
        self._to = self._rrc_gateway_prefix + identifier

        self.client = ClientXMPP(jid=jid,
                                 password=self._accesskey_prefix + access_key,
                                 sasl_mech=sasl_mech)
        self.client.add_event_handler("session_start", self.session_start)
        self.client.register_plugin('xep_0199')
コード例 #2
0
    def __init__(self, config):
        super(JabberListener, self).__init__(config)

        self.name = config['name']
        self.jid = config['jid']
        self.password = config['password']
        self.host = config['host']
        self.port = config['port']

        jid_parts = self.jid.split("@")
        self.nick = jid_parts[0]

        if "pm_list" in config:
            self.pm_list = config["pm_list"]
            self.pm_filter = True
        else:
            self.pm_list = []
            self.pm_filter = False

        if "filter_list" in config:
            self.filter_list = config["filter_list"]
            self.filter = True
        else:
            self.filter_list = []
            self.filter = False

        _log.info("{0} - Initializing Jabber client for: {1}".format(
            self.name, self.jid))
        self.client = ClientXMPP(self.jid, self.password)
        self.client.add_event_handler("session_start", self.onConnect)
        self.client.add_event_handler("disconnected", self.onDisconnect)
        self.client.add_event_handler("message", self.parseMessage)
        self.client.register_plugin("xep_0045")  # Multi-User Chat
コード例 #3
0
    def setup_xmpp_client(self,
                          jid: str,
                          password: str,
                          proxy: Dict = None) -> ClientXMPP:
        """Setup XMPP client and return its instance.

        :param jid: JID provided by HipChat.
        :param password: Password provided by HipChat.
        :param proxy: Proxy setting in dictionary.
        :return: ClientXMPP instance
        """
        client = ClientXMPP(jid, password)

        if proxy:
            client.use_proxy = True
            for key in ('host', 'port', 'username', 'password'):
                client.proxy_config[key] = proxy.get(key, None)

        # TODO check later
        # client.add_event_handler('ssl_invalid_cert', lambda cert: True)

        client.add_event_handler('session_start', self.session_start)
        client.add_event_handler('roster_update', self.join_rooms)
        client.add_event_handler('message', self.message)
        client.register_plugin('xep_0045')
        client.register_plugin('xep_0203')

        return client
コード例 #4
0
ファイル: xmpp.py プロジェクト: consometers/sen1-poc-proxies
    def start(self):
        """
        Démarre le service
        """
        xmppDomain = self.configService.value("XMPP_DOMAIN_NAME")
        xmppUser = self.configService.value("XMPP_USERNAME")
        self.xmpp = ClientXMPP(xmppUser,
                               self.configService.value("XMPP_PASSWORD"))

        # ajout des listeners et plugins
        self.xmpp.add_event_handler("session_start", self.session_start)
        self.xmpp.register_plugin('XmppMessagePlugin', module=xmpp)
        self.xmpp.register_handler(
            Callback(
                'SEN1 Message',
                MatchXPath('{%s}message/{http://xmpp.rocks}Sen1Message' %
                           self.xmpp.default_ns), self.receiveMessage))
        register_stanza_plugin(Message, XmppMessageStanza)

        if (not self.xmpp.connect(address=(xmppDomain, 5222))):
            raise Exception("Cannot bind XMPP session to {}".format(xmppUser))

        self.logger.info(
            "Start XMPP protocol : bind session {}...".format(xmppUser))

        self.xmpp.process()
コード例 #5
0
ファイル: xmpp_bot.py プロジェクト: zengxu-yang/orgassist
    def connect(self, config):
        "Connect to XMPP server"
        socks_cfg = config.get('socks_proxy', required=False)

        self.client = ClientXMPP(self.jid, config.password)
        proxy_cfg = config.get('http_proxy', required=False)
        if proxy_cfg is not None:
            self.client.use_proxy = True
            self.client.proxy_config = {
                'host': proxy_cfg.host,
                'port': proxy_cfg.get('port', assert_type=int),
                'username': proxy_cfg.get('username', required=False),
                'password': proxy_cfg.get('password', required=False),
            }
            print("Configured proxy", self.client.proxy_config)

        use_tls = config.get('tls', default=True)

        # Events
        self.client.add_event_handler("session_start", self._session_start)
        self.client.add_event_handler("message", self.message_dispatch)

        log.info("Initializing connection to XMPP")
        ip = config.get('ip', required=False)
        if ip is not None:
            print("port", config.port)
            port = config.get('port', default=5222, assert_type=int)
            self.client.connect((ip, port), use_tls=use_tls)
        else:
            self.client.connect(use_tls=use_tls)
コード例 #6
0
ファイル: core.py プロジェクト: patvdleer/nefit-client-python
    def __init__(self, serial_number, access_key, password, host="wa2-mz36-qrmzh6.bosch.de", sasl_mech="SCRAM-SHA-1",
                 use_ssl=False, use_tls=False):
        """

        :param serial_number:
        :param access_key:
        :param password:
        :param host:
        :param sasl_mech:
        :param use_ssl:
        :param use_tls:
        """
        serial_number = str(serial_number)
        self.serial_number = serial_number
        self.access_key = access_key
        self.password = password
        self.use_ssl = use_ssl
        self.use_tls = use_tls

        self.encryption = AESCipher(self._magic, access_key, password)

        identifier = serial_number + "@" + host
        self.jid = jid = self._from = self._rrc_contact_prefix + identifier
        self._to = self._rrc_gateway_prefix + identifier

        self.client = ClientXMPP(
            jid=jid,
            password=self._accesskey_prefix + access_key,
            sasl_mech=sasl_mech
        )
        self.client.ssl_version = PROTOCOL_SSLv23
        self.client.add_event_handler("session_start", self.session_start)
        self.client.register_plugin('xep_0199')
コード例 #7
0
ファイル: xmpp.py プロジェクト: tynril/errbot
    def __init__(self,
                 jid,
                 password,
                 feature=None,
                 keepalive=None,
                 ca_cert=None,
                 server=None,
                 bot=None):
        if feature is None:
            feature = {}
        self._bot = bot
        self.connected = False
        self.server = server
        self.client = ClientXMPP(jid,
                                 password,
                                 plugin_config={'feature_mechanisms': feature})
        self.client.register_plugin('xep_0030')  # Service Discovery
        self.client.register_plugin('xep_0045')  # Multi-User Chat
        self.client.register_plugin('xep_0199')  # XMPP Ping
        self.client.register_plugin('xep_0203')  # XMPP Delayed messages
        self.client.register_plugin('xep_0249')  # XMPP direct MUC invites

        if keepalive is not None:
            self.client.whitespace_keepalive = True  # Just in case SleekXMPP's default changes to False in the future
            self.client.whitespace_keepalive_interval = keepalive

        self.client.ca_certs = ca_cert  # Used for TLS certificate validation

        self.client.add_event_handler("session_start", self.session_start)
コード例 #8
0
 def connect_to_jabber(self, jabber_id, password):
     self.xmpp = ClientXMPP(jabber_id, password)
     self.xmpp.reconnect_max_attempts = 1
     connected = self.xmpp.connect()
     if not connected:
         raise XMPPError("Vyanse kwikonecta")
     self.xmpp.process()
     self.xmpp.send_presence()
     self.xmpp.get_roster()
     self.xmpp.add_event_handler('message', self.root.handle_xmpp_message)
コード例 #9
0
    def __init__(self, config):
        super().__init__(config)

        self.client = ClientXMPP(config["jid"], config["password"])
        self.client.add_event_handler("session_start",
                                      self._xmpp_connected_event)
        self.client.add_event_handler("message", self._xmpp_msg_received_event)
        self.client.add_event_handler("groupchat_message",
                                      self._xmpp_muc_msg_received_event)

        self.client.register_plugin("xep_0045")  # Multi-User Chat
コード例 #10
0
ファイル: xmpp.py プロジェクト: HodardCodeclub/IwacuEvent
def _execute_xmpp(connected_callback):
    """Connects to the XMPP server and executes custom code

    :param connected_callback: function to execute after connecting
    :return: return value of the callback
    """
    from indico_chat.plugin import ChatPlugin

    check_config()
    jid = ChatPlugin.settings.get('bot_jid')
    password = ChatPlugin.settings.get('bot_password')
    if '@' not in jid:
        jid = '{}@{}'.format(jid, ChatPlugin.settings.get('server'))

    result = [None, None]  # result, exception
    app = current_app._get_current_object()  # callback runs in another thread

    def _session_start(event):
        try:
            with app.app_context():
                result[0] = connected_callback(xmpp)
        except Exception as e:
            result[1] = e
            if isinstance(e, IqError):
                current_plugin.logger.exception('XMPP callback failed: %s',
                                                e.condition)
            else:
                current_plugin.logger.exception('XMPP callback failed')
        finally:
            xmpp.disconnect(wait=0)

    xmpp = ClientXMPP(jid, password)
    xmpp.register_plugin('xep_0045')
    xmpp.register_plugin('xep_0004')
    xmpp.register_plugin('xep_0030')
    xmpp.add_event_handler('session_start', _session_start)

    try:
        xmpp.connect()
    except Exception:
        current_plugin.logger.exception('XMPP connection failed')
        xmpp.disconnect()
        raise

    try:
        xmpp.process(threaded=False)
    finally:
        xmpp.disconnect(wait=0)

    if result[1] is not None:
        raise result[1]

    return result[0]
コード例 #11
0
 def __init__(self):
     settings = Settings('tellduslive.config')
     uuid = settings['uuid']
     self.xmpp = ClientXMPP('*****@*****.**' % uuid,
                            '%s:%s' % (Board.getMacAddr(), Board.secret()))
     self.xmpp.add_event_handler("session_start", self.sessionStart)
     self.xmpp.add_event_handler("register", self.register)
     self.xmpp.register_plugin('xep_0030')  # Service Discovery
     self.xmpp.register_plugin('xep_0077')  # In-band registration
     self.shuttingDown = False
     # Connect is blocking. Do this in a separate thread
     threading.Thread(target=self.__start, name='XMPP connector').start()
コード例 #12
0
 def connect(self, jid, password):
     self.jid = jid
     if self.connection == None:
         self.connection = ClientXMPP(jid, password)
     register_stanza_plugin(Message, WylioStanza)
     register_stanza_plugin(WylioStanza, ValueStanza)
     self.connection.add_event_handler("connected", self.connected)
     self.connection.add_event_handler("session_start", self.start)
     self.connection.add_event_handler("failed_auth", self.failed)
     self.connection.add_event_handler("disconnected", self.disconnected)
     self.connection.add_event_handler("message", self.message)
     self.connection.connect(('talk.google.com', 5222))
     self.connection.process()
コード例 #13
0
 def connect(self, jid, password):
     if self.connection == None:
         self.connection = ClientXMPP(jid, password)
     register_stanza_plugin(Message, WylioStanza)
     self.connection.add_event_handler("connected", self.connected)
     self.connection.add_event_handler("disconnected", self.disconnected)
     self.connection.add_event_handler("failed_auth", self.failed_auth)
     self.connection.add_event_handler("session_start", self.start)
     self.connection.add_event_handler("message", self.message)
     print "connect"
     self.connection.connect()
     self.connection.process(block=True)
     print "connected"
コード例 #14
0
ファイル: MUCJabberBot.py プロジェクト: XyyxShard/sweetiebot
    def __init__(self, jid, password, room, nick, address=()):
        log.info('creating bot with {} {} {} {} {}'
                .format(jid, password, room, nick, address))
        self.nick = nick
        self.room = room
        self.jid = JID(jid)
        self._presence_callbacks = []
        self._message_callbacks = []

        bot = ClientXMPP(jid, password)

        # disable ipv6 for now since we're getting errors using it
        bot.use_ipv6 = False

	# Fix certain Jabber clients not showing messages by giving them an ID
        bot.use_message_ids = True

        # Don't try to auto reconnect after disconnections (we'll restart the
        # process and retry that way)
        bot.auto_reconnect = False

        bot.add_event_handler('session_start', self.on_start)
        bot.add_event_handler('message', self.on_message)
        bot.add_event_handler('groupchat_presence', self.on_presence)
        bot.add_event_handler('groupchat_subject', self.on_room_joined)
        bot.add_event_handler('disconnected', self.on_disconnect)

        bot.register_plugin('xep_0045')
        self._muc = bot.plugin['xep_0045']
        bot.register_plugin('xep_0199')
        bot.plugin['xep_0199'].enable_keepalive(5, 10)

        self.unknown_command_callback = None

        def on_unknown_callback(message):
            if self.unknown_command_callback is not None:
                return self.unknown_command_callback(message)
        self.message_processor = MessageProcessor(on_unknown_callback)

        log.info('sb connect')
        if bot.connect(address=address, reattempt=False):
            log.info('sb process')
            bot.process()
        else:
            log.error('failed to connect at first attempt')
            self.on_disconnect(None)

        self.add_presence_handler(self.rejoin_if_kicked)

        self._bot = bot
コード例 #15
0
def make_xmpp_client(connection_info: LoginConfig):
    client = ClientXMPP('%s@%s' % (connection_info.user, connection_info.host),
                        connection_info.password)
    client.use_signals()

    # TODO: Make sure all events are handled, and check if we should support other XEPs.
    client.register_plugin('xep_0030')  # Service Discovery
    client.register_plugin('xep_0045')  # Multi-User Chat
    client.register_plugin('xep_0085')  # Chat State Notifications
    client.register_plugin('xep_0199')  # XMPP Ping

    # TODO: Use XEP 0079 to add delivery failure notifications once the sleekxmpp plugin for this XEP is released.
    # client.register_plugin('xep_0079')  # Advanced Message Processing

    return client
コード例 #16
0
ファイル: base.py プロジェクト: metatoaster/mtj.ppmx
    def make_client(self):
        jid = 'admin@localhost'
        password = '******'
        client = ClientXMPP(jid, password)

        [
            client.register_plugin(plugin) for plugin in [
                'xep_0030',  # Service discovery
                'xep_0199',  # XMPP Ping
                'xep_0133',  # Adhoc admin
            ]
        ]

        client.connect(address=('localhost', self.port))
        client.process(block=False)
        self.client = client
        return client
コード例 #17
0
ファイル: ttsfb.py プロジェクト: viciantomas/TTSFB
def main():
    startup_q()

    jid, password = get_info()
    server = ("chat.facebook.com", 5222)

    print("Connecting... (it may takes some minutes)")
    Loading.start()
    threading.Thread(target=kwit).start()

    global fbtts
    fbtts = ClientXMPP(jid, password)
    fbtts.add_event_handler("session_start", session_start)
    fbtts.add_event_handler("message", message)
    fbtts.auto_reconnect = True
    fbtts.connect(server)
    fbtts.process(block=True)
コード例 #18
0
    def __init__(self, jid, password):
        # we set this as an attribute instead of sublcassing because many
        # of ClientXMPP's attributes are named something we might accidentally
        # overrite (breaking ClientXMPP).  it's happened to me quite a bit
        self.xmpp = ClientXMPP(jid, password)

        self.xmpp.add_event_handler("session_start",
                                    self._session_start_handler)
        self.xmpp.add_event_handler("message", self._message_handler)

        self.xmpp.register_plugin('xep_0030')  # Service Discovery
        self.xmpp.register_plugin('xep_0199')  # XMPP Ping

        self.match_requested = False
        self.active_players = {}
        self.match_players = []
        self.state_machines = {}
コード例 #19
0
ファイル: jabbullet.py プロジェクト: nyctef/jabbullet
def xmpp_connect(config):
    bot = ClientXMPP(config.username, config.password)
    bot.register_plugin('xep_0045')
    muc = bot.plugin['xep_0045']
    bot.register_plugin('xep_0199')
    ping = bot.plugin['xep_0199']
    ping.enable_keepalive(30, 30)

    bot.use_ipv6 = False

    bot.add_event_handler(
        'session_start',
        join_rooms_on_connect_handler(bot, muc, config.muc_domain,
                                      config.chats, config.nickname))
    bot.add_event_handler('message', on_message_handler(config))

    if not bot.connect():
        raise 'could not connect'

    return bot
コード例 #20
0
ファイル: jabber.py プロジェクト: edenist/hal
    def setup_connection(self, configuration):
        connection = ClientXMPP(configuration.jid, configuration.password)

        # xep_0045 MUC
        # xep_0199 XMPP Ping
        for plugin in ['xep_0045', 'xep_0199']:
            connection.register_plugin(plugin)

        for type_, handler in (
            ('session_start', self.handle_start),
            ('groupchat_message', self.handle_message),
        ):
            connection.add_event_handler(type_, handler)

        connection_result = connection.connect(configuration.server)
        server = configuration.server

        if not connection_result:
            raise Exception('Unable to connect to %s' % (server,))

        return connection
コード例 #21
0
    def connect(self, config):
        "Connect to XMPP server"
        socks_cfg = config.get('socks_proxy', required=False)
        if socks_cfg is not None:
            # TODO: Doesn't work yet. Doesn't implement a makelist
            socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,
                                  socks_cfg.get('host', assert_type=str),
                                  socks_cfg.get('port', assert_type=int),
                                  rdns=True)
            socket = socks.socksocket
        else:
            socket = None

        self.client = ClientXMPP(self.jid, config.password, socket=socket)
        proxy_cfg = config.get('http_proxy', required=False)
        if proxy_cfg is not None:
            self.client.use_proxy = True
            self.client.proxy_config = {
                'host': proxy_cfg.host,
                'port': proxy_cfg.get('port', assert_type=int),
                'username': proxy_cfg.get('username', required=False),
                'password': proxy_cfg.get('password', required=False),
            }
            print("Configured proxy", self.client.proxy_config)

        use_tls = config.get('tls', default=True)

        # Events
        self.client.add_event_handler("session_start", self._session_start)
        self.client.add_event_handler("message", self.message_dispatch)

        log.info("Initializing connection to XMPP")
        ip = config.get('ip', required=False)
        if ip is not None:
            print("port", config.port)
            port = config.get('port', default=5222, assert_type=int)
            self.client.connect((ip, port), use_tls=use_tls)
        else:
            self.client.connect(use_tls=use_tls)
コード例 #22
0
ファイル: xmpp.py プロジェクト: will-kanjoya/err
    def __init__(self, jid, password):
        self.connected = False
        self.client = ClientXMPP(
            jid,
            password,
            plugin_config={'feature_mechanisms': XMPP_FEATURE_MECHANISMS})
        self.client.register_plugin('xep_0030')  # Service Discovery
        self.client.register_plugin('xep_0045')  # Multi-User Chat
        self.client.register_plugin(
            'old_0004'
        )  # Multi-User Chat backward compability (necessary for join room)
        self.client.register_plugin('xep_0199')  # XMPP Ping
        self.client.register_plugin('xep_0203')  # XMPP Delayed messages
        self.client.register_plugin('xep_0249')  # XMPP direct MUC invites

        if XMPP_KEEPALIVE_INTERVAL is not None:
            self.client.whitespace_keepalive = True  # Just in case SleekXMPP's default changes to False in the future
            self.client.whitespace_keepalive_interval = XMPP_KEEPALIVE_INTERVAL

        self.client.add_event_handler("session_start", self.session_start)
        self.client.add_event_handler("ssl_invalid_cert",
                                      self.ssl_invalid_cert)
コード例 #23
0
ファイル: sleektest.py プロジェクト: pombredanne/SleekXMPP
    def stream_start(self,
                     mode='client',
                     skip=True,
                     header=None,
                     socket='mock',
                     jid='tester@localhost',
                     password='******',
                     server='localhost',
                     port=5222):
        """
        Initialize an XMPP client or component using a dummy XML stream.

        Arguments:
            mode     -- Either 'client' or 'component'. Defaults to 'client'.
            skip     -- Indicates if the first item in the sent queue (the
                        stream header) should be removed. Tests that wish
                        to test initializing the stream should set this to
                        False. Otherwise, the default of True should be used.
            socket   -- Either 'mock' or 'live' to indicate if the socket
                        should be a dummy, mock socket or a live, functioning
                        socket. Defaults to 'mock'.
            jid      -- The JID to use for the connection.
                        Defaults to 'tester@localhost'.
            password -- The password to use for the connection.
                        Defaults to 'test'.
            server   -- The name of the XMPP server. Defaults to 'localhost'.
            port     -- The port to use when connecting to the server.
                        Defaults to 5222.
        """
        if mode == 'client':
            self.xmpp = ClientXMPP(jid, password)
        elif mode == 'component':
            self.xmpp = ComponentXMPP(jid, password, server, port)
        else:
            raise ValueError("Unknown XMPP connection mode.")

        if socket == 'mock':
            self.xmpp.set_socket(TestSocket())

            # Simulate connecting for mock sockets.
            self.xmpp.auto_reconnect = False
            self.xmpp.is_client = True
            self.xmpp.state._set_state('connected')

            # Must have the stream header ready for xmpp.process() to work.
            if not header:
                header = self.xmpp.stream_header
            self.xmpp.socket.recv_data(header)
        elif socket == 'live':
            self.xmpp.socket_class = TestLiveSocket
            self.xmpp.connect()
        else:
            raise ValueError("Unknown socket type.")

        self.xmpp.register_plugins()
        self.xmpp.process(threaded=True)
        if skip:
            # Clear startup stanzas
            self.xmpp.socket.next_sent(timeout=1)
            if mode == 'component':
                self.xmpp.socket.next_sent(timeout=1)
コード例 #24
0
def testFunction(domain_url):

    status, briefing, message, answers = xmppServerAddressRecordLookup(
        domain_url)
    if (status != 0):
        status = 2
        briefing = "This test was skipped because previous test "
        briefing += "<strong>xmpp_server_a_lookup</strong> has failed.<br/>"
        new_message = briefing
        new_message += "Reason:<br/>"
        new_message += "<br/>" + message
        return (status, briefing, new_message, None)

    reachable = []
    unreachable = []

    for answer in answers:

        xmpp_client = ClientXMPP("inspect@buddycloud", "ei3tseq")
        if (xmpp_client.connect((answer['address'], int(answer['port'])),
                                reattempt=False,
                                use_ssl=False,
                                use_tls=False)):

            reachable.append("%(domain)s = %(address)s:%(port)s" % answer)
        else:

            unreachable.append("%(domain)s = %(address)s:%(port)s" % answer)

    if len(reachable) == 0:

        status = 1
        briefing = "Could not connect to all XMPP servers specified: "
        briefing += "<strong>" + string.join(unreachable, " | ") + "</strong>"
        message = "We could not connect to all XMPP servers specified!<br/>"
        message += "<strong><br/>" + string.join(unreachable,
                                                 "<br/>") + "<br/></strong>"
        message += "<br/>Please make sure your XMPP server which will have the buddycloud XMPP component"
        message += " is up and running on the correct port and try again.<br/>"
        message += "If that's not the case, please execute the command: <br/><br/><strong>"
        message += "sudo /etc/init.d/prosody start</strong><br/><br/>"
        message += "See <a href='https://buddycloud.org/wiki/Install#Prosody_Setup' target='_blank'>"
        message += "https://buddycloud.org/wiki/Install#Prosody_Setup</a> for more information."
        return (status, briefing, message, None)

    else:

        status = 0
        briefing = "Could connect to your XMPP servers: "
        briefing += "<strong>" + string.join(reachable, " | ") + "</strong>"
        message = "We were able to connect to the following XMPP servers.<br/>"
        message += "<strong><br/>" + string.join(reachable,
                                                 "<br/>") + "<br/></strong>"

        if len(unreachable) != 0:

            message += "<br/>But beware - we could NOT connect to the following XMPP servers:<br/>"
            message += "<strong><br/>" + string.join(
                unreachable, "<br/>") + "<br/></strong>"
            message += "<br/>Be warned it might result in problems, if any of those "
            message += "are meant to host the buddycloud component."
            message += " <br/>To be safe, be sure these are also up and running"
            message += " on the correct port and try again."
        else:
            message += "<br/>Congratulations!! All XMPP servers specified are up and running properly."
            message += "<br/>Now, we expect that one of them has the buddycloud XMPP component."

        return (status, briefing, message, None)
コード例 #25
0
ファイル: bot.py プロジェクト: forcemain/Ludolph
    def __init__(self, config, plugins=None):
        super(LudolphBot, self).__init__()

        self._event_handlers = {
            'bot_message': [self._run_command],
            'bot_command_not_found': [self._command_not_found],
            'muc_message': [],
            'muc_user_online': [],
            'muc_user_offline': [],
        }
        self.users = set()
        self.admins = set()
        self.broadcast_blacklist = set()
        self.room_users = set()
        self.room_admins = set()
        self.room_users_invited = set()
        self.room_users_last_seen = {}

        self._load_config(config, init=True)
        logger.info('Initializing jabber bot *%s*', self.nick)
        self._load_plugins(config, plugins, init=True)

        # Initialize the SleekXMPP client
        self.client = client = ClientXMPP(config.get('xmpp', 'username'),
                                          config.get('xmpp', 'password'))
        # These XMPP-related attributes and methods are expected to exist by plugins
        self.client_roster = client.client_roster
        self.boundjid = client.boundjid

        # Register XMPP plugins
        client.register_plugin('xep_0030')  # Service Discovery
        client.register_plugin('xep_0045')  # Multi-User Chat
        client.register_plugin('xep_0198')  # Stream Management
        client.register_plugin('xep_0199')  # XMPP Ping
        client.register_plugin('xep_0203')  # Delayed Delivery
        client.register_plugin('xep_0084')  # User Avatar
        client.register_plugin('xep_0153')  # User Avatar vCard
        client.register_plugin('xep_0224')  # Attention

        # Auto-authorize is enabled by default. User subscriptions are controlled by self._handle_new_subscription
        client.auto_authorize = True

        # Register event handlers
        client.add_event_handler('roster_subscription_request',
                                 self._handle_new_subscription)
        client.add_event_handler('session_start', self._session_start)
        client.add_event_handler('message', self._bot_message, threaded=True)
        client.add_event_handler('attention',
                                 self.handle_attention,
                                 threaded=True)

        if self.room:
            self.muc = client.plugin['xep_0045']
            client.add_event_handler('groupchat_message',
                                     self._muc_message,
                                     threaded=True)
            client.add_event_handler('muc::%s::got_online' % self.room,
                                     self._muc_user_online,
                                     threaded=True)
            client.add_event_handler('muc::%s::got_offline' % self.room,
                                     self._muc_user_offline,
                                     threaded=True)

        # Run post initialization methods for all plugins
        self._post_init_plugins()

        # Start the web server thread for processing HTTP requests
        if self.webserver:
            # noinspection PyProtectedMember
            client._start_thread('webserver',
                                 self.webserver.start,
                                 track=False)

        # Start the scheduler thread for running periodic cron jobs
        if self.cron:
            # noinspection PyProtectedMember
            client._start_thread('cron', self.cron.run, track=False)

        # Save start time
        self._start_time = time.time()
        logger.info('Jabber bot *%s* is up and running', self.nick)
コード例 #26
0
ファイル: sleektest.py プロジェクト: hoochy/EVE_bot
    def stream_start(self,
                     mode='client',
                     skip=True,
                     header=None,
                     socket='mock',
                     jid='tester@localhost',
                     password='******',
                     server='localhost',
                     port=5222,
                     sasl_mech=None,
                     plugins=None,
                     plugin_config={}):
        """
        Initialize an XMPP client or component using a dummy XML stream.

        Arguments:
            mode     -- Either 'client' or 'component'. Defaults to 'client'.
            skip     -- Indicates if the first item in the sent queue (the
                        stream header) should be removed. Tests that wish
                        to test initializing the stream should set this to
                        False. Otherwise, the default of True should be used.
            socket   -- Either 'mock' or 'live' to indicate if the socket
                        should be a dummy, mock socket or a live, functioning
                        socket. Defaults to 'mock'.
            jid      -- The JID to use for the connection.
                        Defaults to 'tester@localhost'.
            password -- The password to use for the connection.
                        Defaults to 'test'.
            server   -- The name of the XMPP server. Defaults to 'localhost'.
            port     -- The port to use when connecting to the server.
                        Defaults to 5222.
            plugins  -- List of plugins to register. By default, all plugins
                        are loaded.
        """
        if mode == 'client':
            self.xmpp = ClientXMPP(jid,
                                   password,
                                   sasl_mech=sasl_mech,
                                   plugin_config=plugin_config)
        elif mode == 'component':
            self.xmpp = ComponentXMPP(jid,
                                      password,
                                      server,
                                      port,
                                      plugin_config=plugin_config)
        else:
            raise ValueError("Unknown XMPP connection mode.")

        # Remove unique ID prefix to make it easier to test
        self.xmpp._id_prefix = ''
        self.xmpp._disconnect_wait_for_threads = False
        self.xmpp.default_lang = None
        self.xmpp.peer_default_lang = None

        # We will use this to wait for the session_start event
        # for live connections.
        skip_queue = Queue()

        if socket == 'mock':
            self.xmpp.set_socket(TestSocket())

            # Simulate connecting for mock sockets.
            self.xmpp.auto_reconnect = False
            self.xmpp.state._set_state('connected')

            # Must have the stream header ready for xmpp.process() to work.
            if not header:
                header = self.xmpp.stream_header
            self.xmpp.socket.recv_data(header)
        elif socket == 'live':
            self.xmpp.socket_class = TestLiveSocket

            def wait_for_session(x):
                self.xmpp.socket.clear()
                skip_queue.put('started')

            self.xmpp.add_event_handler('session_start', wait_for_session)
            if server is not None:
                self.xmpp.connect((server, port))
            else:
                self.xmpp.connect()
        else:
            raise ValueError("Unknown socket type.")

        if plugins is None:
            self.xmpp.register_plugins()
        else:
            for plugin in plugins:
                self.xmpp.register_plugin(plugin)

        # Some plugins require messages to have ID values. Set
        # this to True in tests related to those plugins.
        self.xmpp.use_message_ids = False

        self.xmpp.process(threaded=True)
        if skip:
            if socket != 'live':
                # Mark send queue as usable
                self.xmpp.session_started_event.set()
                # Clear startup stanzas
                self.xmpp.socket.next_sent(timeout=1)
                if mode == 'component':
                    self.xmpp.socket.next_sent(timeout=1)
            else:
                skip_queue.get(block=True, timeout=10)
コード例 #27
0
# -*- coding: utf-8 -*-
"""
Created on Mon Dec  9 22:50:45 2019

@author: tema
"""

import urllib.request
import time

from sleekxmpp import ClientXMPP

username = '******'
passwd = '0q1u0a1n2t0u0m'
to = '*****@*****.**'
client = ClientXMPP(username, passwd)
client.connect()
client.process()

while True:

    req = urllib.request.Request('http://weather.nsu.ru/weather.xml')
    response = urllib.request.urlopen(req)
    page = response.read()
    str_page = str(page)
    index1 = str_page.find('current')
    index2 = str_page.find('/current')
    data = str_page[index1 + 8:index2 - 1]
    client.send_message(to, 'Current temperature: ' + data + '°C')
    time.sleep(1)
コード例 #28
0
ファイル: searchclient.py プロジェクト: buddycloud/search
 def __init__(self, jid, password, client_host, client_port, searchserver):
     self.xmpp = ClientXMPP(jid, password)
     self.con_address = client_host, client_port
     self.searchserver = searchserver
コード例 #29
0
    def send_chatroom_message(self, context, message):

        # Get context
        session = self.__get_session(context)
        res_id = context.reservation.reservation_id
        current_user = context.reservation.running_user

        admin_user, admin_password, api_server, api_port = self.__get_openfire_server_details(
            context, session)

        # Chatroom name is current sandbox name
        chatroom_name = session.GetReservationDetails(
            reservationId=res_id).ReservationDescription.Name
        # Chatroom ID is reservation id
        chatroom_id = res_id
        # Get XMPP domain value
        xmpp_domain = self.__get_xmpp_domain(server=api_server,
                                             port=api_port,
                                             user=admin_user,
                                             password=admin_password)
        # Construct full Jabber user id
        JID = "%s@%s" % (admin_user, xmpp_domain)

        session.WriteMessageToReservationOutput(
            context.reservation.reservation_id,
            "\nSending message to chat room \"%s\" as %s" %
            (chatroom_name, current_user))
        xmpp = ClientXMPP(jid=JID, password=admin_password)
        xmpp.register_plugin('xep_0045')
        conn = xmpp.connect(use_ssl=False,
                            use_tls=False,
                            address=(api_server, '5222'))

        room = '%s@conference.%s' % (chatroom_id, xmpp_domain)
        # need to join chat room before sending message
        session.WriteMessageToReservationOutput(
            context.reservation.reservation_id, "    Joining room")
        xmpp.plugin['xep_0045'].joinMUC(
            room,
            current_user,
            wait=True,
        )

        # Send message to room
        xmpp.send_message(mtype='groupchat',
                          mbody=message,
                          mto=room,
                          mnick=current_user)

        # Run commands above
        session.WriteMessageToReservationOutput(
            context.reservation.reservation_id,
            "    Sending message \"%s\"" % message)
        session.WriteMessageToReservationOutput(
            context.reservation.reservation_id, "Completed")
        xmpp.process(block=False)

        # Ensure we have enough time to send the message before disconnecting
        time.sleep(5)
        xmpp.disconnect()

        pass