Add support for XEP-0107, User Mood.
This commit is contained in:
		@@ -27,6 +27,7 @@ __all__ = [
 | 
			
		||||
    'xep_0085',  # Chat State Notifications
 | 
			
		||||
    'xep_0086',  # Legacy Error Codes
 | 
			
		||||
    'xep_0092',  # Software Version
 | 
			
		||||
    'xep_0107',  # User Mood
 | 
			
		||||
    'xep_0115',  # Entity Capabilities
 | 
			
		||||
    'xep_0118',  # User Tune
 | 
			
		||||
    'xep_0128',  # Extended Service Discovery
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								sleekxmpp/plugins/xep_0107/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								sleekxmpp/plugins/xep_0107/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
"""
 | 
			
		||||
    SleekXMPP: The Sleek XMPP Library
 | 
			
		||||
    Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
 | 
			
		||||
    This file is part of SleekXMPP.
 | 
			
		||||
 | 
			
		||||
    See the file LICENSE for copying permission.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from sleekxmpp.plugins.xep_0107 import stanza
 | 
			
		||||
from sleekxmpp.plugins.xep_0107.stanza import UserMood
 | 
			
		||||
from sleekxmpp.plugins.xep_0107.user_mood import xep_0107
 | 
			
		||||
							
								
								
									
										55
									
								
								sleekxmpp/plugins/xep_0107/stanza.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								sleekxmpp/plugins/xep_0107/stanza.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
"""
 | 
			
		||||
    SleekXMPP: The Sleek XMPP Library
 | 
			
		||||
    Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
 | 
			
		||||
    This file is part of SleekXMPP.
 | 
			
		||||
 | 
			
		||||
    See the file LICENSE for copying permission.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from sleekxmpp.xmlstream import ElementBase, ET
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserMood(ElementBase):
 | 
			
		||||
 | 
			
		||||
    name = 'mood'
 | 
			
		||||
    namespace = 'http://jabber.org/protocol/mood'
 | 
			
		||||
    plugin_attrib = 'mood'
 | 
			
		||||
    interfaces = set(['value', 'text'])
 | 
			
		||||
    sub_interfaces = set(['text'])
 | 
			
		||||
    moods = set(['afraid', 'amazed', 'amorous', 'angry', 'annoyed', 'anxious',
 | 
			
		||||
                 'aroused', 'ashamed', 'bored', 'brave', 'calm', 'cautious',
 | 
			
		||||
                 'cold', 'confident', 'confused', 'contemplative', 'contented',
 | 
			
		||||
                 'cranky', 'crazy', 'creative', 'curious', 'dejected',
 | 
			
		||||
                 'depressed', 'disappointed', 'disgusted', 'dismayed',
 | 
			
		||||
                 'distracted', 'embarrassed', 'envious', 'excited',
 | 
			
		||||
                 'flirtatious', 'frustrated', 'grateful', 'grieving', 'grumpy',
 | 
			
		||||
                 'guilty', 'happy', 'hopeful', 'hot', 'humbled', 'humiliated',
 | 
			
		||||
                 'hungry', 'hurt', 'impressed', 'in_awe', 'in_love',
 | 
			
		||||
                 'indignant', 'interested', 'intoxicated', 'invincible',
 | 
			
		||||
                 'jealous', 'lonely', 'lost', 'lucky', 'mean', 'moody',
 | 
			
		||||
                 'nervous', 'neutral', 'offended', 'outraged', 'playful',
 | 
			
		||||
                 'proud', 'relaxed', 'relieved', 'remorseful', 'restless',
 | 
			
		||||
                 'sad', 'sarcastic', 'satisfied', 'serious', 'shocked',
 | 
			
		||||
                 'shy', 'sick', 'sleepy', 'spontaneous', 'stressed', 'strong',
 | 
			
		||||
                 'surprised', 'thankful', 'thirsty', 'tired', 'undefined',
 | 
			
		||||
                 'weak', 'worried'])
 | 
			
		||||
 | 
			
		||||
    def set_value(self, value):
 | 
			
		||||
        self.del_value()
 | 
			
		||||
        if value in self.moods:
 | 
			
		||||
            self._set_sub_text(value, '', keep=True)
 | 
			
		||||
        else:
 | 
			
		||||
            raise ValueError('Unknown mood value')
 | 
			
		||||
 | 
			
		||||
    def get_value(self):
 | 
			
		||||
        for child in self.xml:
 | 
			
		||||
            if child.tag.startswith('{%s}' % self.namespace):
 | 
			
		||||
                elem_name = child.tag.split('}')[-1]
 | 
			
		||||
                if elem_name in self.moods:
 | 
			
		||||
                    return elem_name
 | 
			
		||||
        return ''
 | 
			
		||||
 | 
			
		||||
    def del_value(self):
 | 
			
		||||
        curr_value = self.get_value()
 | 
			
		||||
        if curr_value:
 | 
			
		||||
            self._set_sub_text(curr_value, '', keep=False)
 | 
			
		||||
							
								
								
									
										94
									
								
								sleekxmpp/plugins/xep_0107/user_mood.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								sleekxmpp/plugins/xep_0107/user_mood.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
"""
 | 
			
		||||
    SleekXMPP: The Sleek XMPP Library
 | 
			
		||||
    Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
 | 
			
		||||
    This file is part of SleekXMPP.
 | 
			
		||||
 | 
			
		||||
    See the file LICENSE for copying permission.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from sleekxmpp import Message
 | 
			
		||||
from sleekxmpp.xmlstream import register_stanza_plugin
 | 
			
		||||
from sleekxmpp.xmlstream.handler import Callback
 | 
			
		||||
from sleekxmpp.xmlstream.matcher import MatchXPath
 | 
			
		||||
from sleekxmpp.plugins.base import base_plugin
 | 
			
		||||
from sleekxmpp.plugins.xep_0107 import stanza, UserMood
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
log = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class xep_0107(base_plugin):
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    XEP-0107: User Mood
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def plugin_init(self):
 | 
			
		||||
        self.xep = '0107'
 | 
			
		||||
        self.description = 'User Mood'
 | 
			
		||||
        self.stanza = stanza
 | 
			
		||||
 | 
			
		||||
    def post_init(self):
 | 
			
		||||
        base_plugin.post_init(self)
 | 
			
		||||
 | 
			
		||||
        pubsub_stanza = self.xmpp['xep_0060'].stanza
 | 
			
		||||
        register_stanza_plugin(Message, UserMood)
 | 
			
		||||
        register_stanza_plugin(pubsub_stanza.EventItem, UserMood)
 | 
			
		||||
 | 
			
		||||
        self.xmpp['xep_0030'].add_feature(UserMood.namespace)
 | 
			
		||||
        self.xmpp['xep_0163'].add_interest(UserMood.namespace)
 | 
			
		||||
        self.xmpp['xep_0060'].map_node_event(UserMood.namespace, 'user_mood')
 | 
			
		||||
 | 
			
		||||
    def publish_mood(self, value=None, text=None, options=None, 
 | 
			
		||||
                     ifrom=None, block=True, callback=None, timeout=None):
 | 
			
		||||
        """
 | 
			
		||||
        Publish the user's current mood.
 | 
			
		||||
 | 
			
		||||
        Arguments:
 | 
			
		||||
            value    -- The name of the mood to publish.
 | 
			
		||||
            text     -- Optional natural-language description or reason
 | 
			
		||||
                        for the mood.
 | 
			
		||||
            options  -- Optional form of publish options.
 | 
			
		||||
            ifrom    -- Specify the sender's JID.
 | 
			
		||||
            block    -- Specify if the send call will block until a response
 | 
			
		||||
                        is received, or a timeout occurs. Defaults to True.
 | 
			
		||||
            timeout  -- The length of time (in seconds) to wait for a response
 | 
			
		||||
                        before exiting the send call if blocking is used.
 | 
			
		||||
                        Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
 | 
			
		||||
            callback -- Optional reference to a stream handler function. Will
 | 
			
		||||
                        be executed when a reply stanza is received.
 | 
			
		||||
        """
 | 
			
		||||
        mood = UserMood()
 | 
			
		||||
        mood['value'] = value
 | 
			
		||||
        mood['text'] = text
 | 
			
		||||
        self.xmpp['xep_0163'].publish(mood,
 | 
			
		||||
                node=UserMood.namespace,
 | 
			
		||||
                options=options,
 | 
			
		||||
                ifrom=ifrom,
 | 
			
		||||
                block=block,
 | 
			
		||||
                callback=callback,
 | 
			
		||||
                timeout=timeout)
 | 
			
		||||
 | 
			
		||||
    def stop(self, ifrom=None, block=True, callback=None, timeout=None):
 | 
			
		||||
        """
 | 
			
		||||
        Clear existing user mood information to stop notifications.
 | 
			
		||||
 | 
			
		||||
        Arguments:
 | 
			
		||||
            ifrom    -- Specify the sender's JID.
 | 
			
		||||
            block    -- Specify if the send call will block until a response
 | 
			
		||||
                        is received, or a timeout occurs. Defaults to True.
 | 
			
		||||
            timeout  -- The length of time (in seconds) to wait for a response
 | 
			
		||||
                        before exiting the send call if blocking is used.
 | 
			
		||||
                        Defaults to sleekxmpp.xmlstream.RESPONSE_TIMEOUT
 | 
			
		||||
            callback -- Optional reference to a stream handler function. Will
 | 
			
		||||
                        be executed when a reply stanza is received.
 | 
			
		||||
        """
 | 
			
		||||
        mood = UserMood()
 | 
			
		||||
        self.xmpp['xep_0163'].publish(mood, 
 | 
			
		||||
                node=UserMood.namespace,
 | 
			
		||||
                ifrom=ifrom,
 | 
			
		||||
                block=block,
 | 
			
		||||
                callback=callback,
 | 
			
		||||
                timeout=timeout)
 | 
			
		||||
		Reference in New Issue
	
	Block a user