Skip to content
Back to top

# Source code for slixmpp.plugins.xep_0224.attention

    # Slixmpp: The Slick XMPP Library
    # Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
    # This file is part of Slixmpp.
    # See the file LICENSE for copying permission.
    import logging

    from slixmpp.stanza import Message
    from slixmpp.xmlstream import register_stanza_plugin
    from slixmpp.xmlstream.handler import Callback
    from slixmpp.xmlstream.matcher import StanzaPath
    from slixmpp.plugins import BasePlugin
    from slixmpp.plugins.xep_0224 import stanza

    log = logging.getLogger(__name__)

    class XEP_0224(BasePlugin):

        """
        XEP-0224: Attention
        """

        name = 'xep_0224'
        description = 'XEP-0224: Attention'
        dependencies = {'xep_0030'}
        stanza = stanza

        def plugin_init(self):
            """Start the XEP-0224 plugin."""
            register_stanza_plugin(Message, stanza.Attention)

            self.xmpp.register_handler(
                    Callback('Attention',
                        StanzaPath('message/attention'),
                        self._handle_attention))

        def plugin_end(self):
            self.xmpp.plugin['xep_0030'].del_feature(feature=stanza.Attention.namespace)
            self.xmpp.remove_handler('Attention')

        def session_bind(self, jid):
            self.xmpp.plugin['xep_0030'].add_feature(stanza.Attention.namespace)

        def request_attention(self, to, mfrom=None, mbody=''):
            """
            Send an attention message with an optional body.

            Arguments:
                to    -- The attention request recipient's JID.
                mfrom -- Optionally specify the sender of the attention request.
                mbody -- An optional message body to include in the request.
            """
            m = self.xmpp.Message()
            m['to'] = to
            m['type'] = 'headline'
            m['attention'] = True
            if mfrom:
                m['from'] = mfrom
            m['body'] = mbody
            m.send()

        def _handle_attention(self, msg):
            """
            Raise an event after receiving a message with an attention request.

            Arguments:
                msg -- A message stanza with an attention element.
            """
            log.debug("Received attention request from: %s", msg['from'])
            self.xmpp.event('attention', msg)