2
0
Fork
You've already forked slixmpp
0
forked from poezio/slixmpp
Modern python XMPP library using asyncio.
  • Python 99.9%
  • Cython 0.1%
Find a file
2024年06月20日 19:00:20 +00:00
.github Add a github pull request template 2020年04月04日 20:04:23 +02:00
.woodpecker ci: build cython module for itests 2024年02月09日 23:28:15 +01:00
docs Add BukuBot 2024年06月04日 10:22:24 +00:00
examples setup.py: add cryptography in extras_require; update example 2022年03月20日 01:02:14 +01:00
itests itests: fix default server call 2024年02月09日 23:11:29 +01:00
slixmpp Correct an MUC-related error message which indicates the requirement of a JID 2024年06月20日 19:00:20 +00:00
tests Update plugin: XEP-0317 (hats) 2024年02月09日 21:06:14 +01:00
.gitignore Privileged entities (XEP-0356) 2021年02月18日 20:03:22 +01:00
.gitlab-ci.yml ci: update python images 2023年04月18日 19:41:02 +02:00
.readthedocs.yaml [docs] add readthedocs.yaml 2023年11月13日 19:38:48 +01:00
.travis.yml Update Python version minimum requirement to 3.7 2020年05月01日 15:13:19 +02:00
CONTRIBUTING.rst Move references from lab.louiz.org to codeberg 2023年07月06日 15:26:57 +02:00
doap.xml Release 1.8.5 2024年02月02日 01:59:31 +01:00
INSTALL Update Python version minimum requirement to 3.7 2020年05月01日 15:13:19 +02:00
LICENSE Remove OrderedDict usage 2020年12月06日 17:00:47 +01:00
MANIFEST.in Add missing files to the MANIFEST 2015年08月08日 17:34:06 +02:00
mypy.ini add a mypy.ini file 2021年07月05日 22:42:28 +02:00
README.rst README: document integration tests 2020年12月06日 20:59:00 +01:00
run_integration_tests.py itests: add a command-line parameter to enable debug logs 2021年02月04日 19:14:23 +01:00
run_tests.py run_tests: add a command-line option to enable debug logs 2021年02月20日 11:53:30 +01:00
setup.py Move references from lab.louiz.org to codeberg 2023年07月06日 15:26:57 +02:00
tox.ini Merge branch 'develop' of https://github.com/fritzy/SleekXMPP into sleek-merge 2015年10月02日 19:00:19 +02:00

Slixmpp

Slixmpp is an MIT licensed XMPP library for Python 3.7+. It is a fork of SleekXMPP.

Slixmpp's goals is to only rewrite the core of the library (the low level socket handling, the timers, the events dispatching) in order to remove all threads.

Building

Slixmpp can make use of cython to improve performance on critical modules. To do that, cython3 is necessary along with libidn headers. Otherwise, no compilation is needed. Building is done by running setup.py:

python3 setup.py build_ext --inplace

Documentation and Testing

Documentation can be found both inline in the code, and as a Sphinx project in /docs. To generate the Sphinx documentation, follow the commands below. The HTML output will be in docs/_build/html:

cd docs
make html
open _build/html/index.html

To run the test suite for Slixmpp:

python run_tests.py

Integration tests require the following environment variables to be set::

$CI_ACCOUNT1
$CI_ACCOUNT1_PASSWORD
$CI_ACCOUNT2
$CI_ACCOUNT2_PASSWORD
$CI_MUC_SERVER

where the account variables are JIDs of valid, existing accounts, and the passwords are the account passwords. The MUC server must allow room creation from those JIDs.

To run the integration test suite for Slixmpp:

python run_integration_tests.py

The Slixmpp Boilerplate

Projects using Slixmpp tend to follow a basic pattern for setting up client/component connections and configuration. Here is the gist of the boilerplate needed for a Slixmpp based project. See the documentation or examples directory for more detailed archetypes for Slixmpp projects:

import logging
from slixmpp import ClientXMPP
from slixmpp.exceptions import IqError, IqTimeout
class EchoBot(ClientXMPP):
 def __init__(self, jid, password):
 ClientXMPP.__init__(self, jid, password)
 self.add_event_handler("session_start", self.session_start)
 self.add_event_handler("message", self.message)
 # If you wanted more functionality, here's how to register plugins:
 # self.register_plugin('xep_0030') # Service Discovery
 # self.register_plugin('xep_0199') # XMPP Ping
 # Here's how to access plugins once you've registered them:
 # self['xep_0030'].add_feature('echo_demo')
 # If you are working with an OpenFire server, you will
 # need to use a different SSL version:
 # import ssl
 # self.ssl_version = ssl.PROTOCOL_SSLv3
 def session_start(self, event):
 self.send_presence()
 self.get_roster()
 # Most get_*/set_* methods from plugins use Iq stanzas, which
 # can generate IqError and IqTimeout exceptions
 #
 # try:
 # self.get_roster()
 # except IqError as err:
 # logging.error('There was an error getting the roster')
 # logging.error(err.iq['error']['condition'])
 # self.disconnect()
 # except IqTimeout:
 # logging.error('Server is taking too long to respond')
 # self.disconnect()
 def message(self, msg):
 if msg['type'] in ('chat', 'normal'):
 msg.reply("Thanks for sending\n%(body)s" % msg).send()
if __name__ == '__main__':
 # Ideally use optparse or argparse to get JID,
 # password, and log level.
 logging.basicConfig(level=logging.DEBUG,
 format='%(levelname)-8s %(message)s')
 xmpp = EchoBot('somejid@example.com', 'use_getpass')
 xmpp.connect()
 xmpp.process(forever=True)

Slixmpp Credits

Maintainers:
Contributors:

Credits (SleekXMPP)

Main Author: Nathan Fritz

fritzy@netflint.net, @fritzy

Nathan is also the author of XMPPHP and Seesmic-AS3-XMPP, and a former member of the XMPP Council.

Co-Author: Lance Stout

lancestout@gmail.com, @lancestout

Contributors: