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