slidge_whatsapp#

WhatsApp gateway using the multi-device API.

Subpackages#

Submodules#

Package Contents#

Classes#

Gateway

The gateway component, handling registrations and un-registrations.

class slidge_whatsapp.Gateway[source]#

Bases: slidge.BaseGateway

The gateway component, handling registrations and un-registrations.

On slidge launch, a singleton is instantiated, and it will be made available to public classes such LegacyContact or BaseSession as the .xmpp attribute.

Must be subclassed by a legacy module to set up various aspects of the XMPP component behaviour, such as its display name or welcome message, via class attributes COMPONENT_NAME WELCOME_MESSAGE.

Abstract methods related to the registration process must be overriden for a functional Legacy Module:

  • validate()

  • validate_two_factor_code()

  • get_qr_text()

  • confirm_qr()

NB: Not all of these must be overridden, it depends on the REGISTRATION_TYPE.

The other methods, such as send_text() or react() are the same as those of LegacyContact and LegacyParticipant, because the component itself is also a “messaging actor”, ie, an XMPP Entity. For these methods, you need to specify the JID of the recipient with the mto parameter.

Since it inherits from slixmpp.componentxmpp.ComponentXMPP,you also have a hand on low-level XMPP interactions via slixmpp methods, e.g.:

self.send_presence(
    pfrom="somebody@component.example.com",
    pto="someonwelse@anotherexample.com",
)

However, you should not need to do so often since the classes of the plugin API provides higher level abstractions around most commonly needed use-cases, such as sending messages, or displaying a custom status.

COMPONENT_NAME = 'WhatsApp (slidge)'#
COMPONENT_TYPE = 'whatsapp'#
COMPONENT_AVATAR = 'https://www.whatsapp.com/apple-touch-icon.png'#
REGISTRATION_INSTRUCTIONS#
WELCOME_MESSAGE#
REGISTRATION_FIELDS = []#
SEARCH_FIELDS#
ROSTER_GROUP = 'WhatsApp'#
MARK_ALL_MESSAGES = True#
GROUPS = True#
PROPER_RECEIPTS = True#
async validate(user_jid, registration_form)[source]#

Validate registration form. A no-op for WhatsApp, as actual registration takes place after in-band registration commands complete.

async unregister(user)[source]#

Logout from the active WhatsApp session. This will also force a remote log-out, and thus require pairing on next login. For simply disconnecting the active session, look at the Session.disconnect() function.

Parameters:

user (slidge.GatewayUser) –