2010-03-26 21:32:16 +00:00
|
|
|
"""
|
|
|
|
SleekXMPP: The Sleek XMPP Library
|
|
|
|
Copyright (C) 2010 Nathanael C. Fritz
|
|
|
|
This file is part of SleekXMPP.
|
|
|
|
|
2010-07-20 15:19:49 +00:00
|
|
|
See the file LICENSE for copying permission.
|
2010-03-26 21:32:16 +00:00
|
|
|
"""
|
2010-08-03 16:19:45 +00:00
|
|
|
|
|
|
|
from sleekxmpp.stanza import Error
|
|
|
|
from sleekxmpp.stanza.rootstanza import RootStanza
|
|
|
|
from sleekxmpp.xmlstream.stanzabase import StanzaBase, ET
|
|
|
|
|
2009-12-10 01:23:03 +00:00
|
|
|
|
2010-01-05 21:56:48 +00:00
|
|
|
class Message(RootStanza):
|
2010-08-03 16:19:45 +00:00
|
|
|
|
|
|
|
"""
|
|
|
|
XMPP's <message> stanzas are a "push" mechanism to send information
|
|
|
|
to other XMPP entities without requiring a response.
|
|
|
|
|
|
|
|
Chat clients will typically use <message> stanzas that have a type
|
|
|
|
of either "chat" or "groupchat".
|
|
|
|
|
|
|
|
When handling a message event, be sure to check if the message is
|
|
|
|
an error response.
|
|
|
|
|
|
|
|
Example <message> stanzas:
|
|
|
|
<message to="user1@example.com" from="user2@example.com">
|
|
|
|
<body>Hi!</body>
|
|
|
|
</message>
|
|
|
|
|
|
|
|
<message type="groupchat" to="room@conference.example.com">
|
|
|
|
<body>Hi everyone!</body>
|
|
|
|
</message>
|
|
|
|
|
|
|
|
Stanza Interface:
|
|
|
|
body -- The main contents of the message.
|
|
|
|
subject -- An optional description of the message's contents.
|
|
|
|
mucroom -- (Read-only) The name of the MUC room that sent the message.
|
|
|
|
mucnick -- (Read-only) The MUC nickname of message's sender.
|
|
|
|
|
|
|
|
Attributes:
|
|
|
|
types -- May be one of: normal, chat, headline, groupchat, or error.
|
|
|
|
|
|
|
|
Methods:
|
|
|
|
chat -- Set the message type to 'chat'.
|
|
|
|
normal -- Set the message type to 'normal'.
|
|
|
|
reply -- Overrides StanzaBase.reply
|
|
|
|
getType -- Overrides StanzaBase interface
|
|
|
|
getMucroom -- Return the name of the MUC room of the message.
|
|
|
|
setMucroom -- Dummy method to prevent assignment.
|
|
|
|
delMucroom -- Dummy method to prevent deletion.
|
|
|
|
getMucnick -- Return the MUC nickname of the message's sender.
|
|
|
|
setMucnick -- Dummy method to prevent assignment.
|
|
|
|
delMucnick -- Dummy method to prevent deletion.
|
|
|
|
"""
|
|
|
|
|
|
|
|
namespace = 'jabber:client'
|
|
|
|
name = 'message'
|
|
|
|
interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject',
|
|
|
|
'mucroom', 'mucnick'))
|
|
|
|
sub_interfaces = set(('body', 'subject'))
|
|
|
|
plugin_attrib = name
|
|
|
|
types = set((None, 'normal', 'chat', 'headline', 'error', 'groupchat'))
|
|
|
|
|
|
|
|
def getType(self):
|
|
|
|
"""
|
|
|
|
Return the message type.
|
|
|
|
|
|
|
|
Overrides default stanza interface behavior.
|
|
|
|
|
|
|
|
Returns 'normal' if no type attribute is present.
|
|
|
|
"""
|
|
|
|
return self._getAttr('type', 'normal')
|
|
|
|
|
|
|
|
def chat(self):
|
|
|
|
"""Set the message type to 'chat'."""
|
|
|
|
self['type'] = 'chat'
|
|
|
|
return self
|
|
|
|
|
|
|
|
def normal(self):
|
|
|
|
"""Set the message type to 'chat'."""
|
|
|
|
self['type'] = 'normal'
|
|
|
|
return self
|
|
|
|
|
|
|
|
def reply(self, body=None):
|
|
|
|
"""
|
|
|
|
Create a message reply.
|
|
|
|
|
|
|
|
Overrides StanzaBase.reply.
|
|
|
|
|
|
|
|
Sets proper 'to' attribute if the message is from a MUC, and
|
|
|
|
adds a message body if one is given.
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
body -- Optional text content for the message.
|
|
|
|
"""
|
|
|
|
StanzaBase.reply(self)
|
|
|
|
if self['type'] == 'groupchat':
|
|
|
|
self['to'] = self['to'].bare
|
|
|
|
|
|
|
|
del self['id']
|
|
|
|
|
|
|
|
if body is not None:
|
|
|
|
self['body'] = body
|
|
|
|
return self
|
|
|
|
|
|
|
|
def getMucroom(self):
|
|
|
|
"""
|
|
|
|
Return the name of the MUC room where the message originated.
|
|
|
|
|
|
|
|
Read-only stanza interface.
|
|
|
|
"""
|
|
|
|
if self['type'] == 'groupchat':
|
|
|
|
return self['from'].bare
|
|
|
|
else:
|
|
|
|
return ''
|
|
|
|
|
|
|
|
def getMucnick(self):
|
|
|
|
"""
|
|
|
|
Return the nickname of the MUC user that sent the message.
|
|
|
|
|
|
|
|
Read-only stanza interface.
|
|
|
|
"""
|
|
|
|
if self['type'] == 'groupchat':
|
|
|
|
return self['from'].resource
|
|
|
|
else:
|
|
|
|
return ''
|
|
|
|
|
|
|
|
def setMucroom(self, value):
|
|
|
|
"""Dummy method to prevent modification."""
|
|
|
|
pass
|
|
|
|
|
|
|
|
def delMucroom(self):
|
|
|
|
"""Dummy method to prevent deletion."""
|
|
|
|
pass
|
|
|
|
|
|
|
|
def setMucnick(self, value):
|
|
|
|
"""Dummy method to prevent modification."""
|
|
|
|
pass
|
|
|
|
|
|
|
|
def delMucnick(self):
|
|
|
|
"""Dummy method to prevent deletion."""
|
|
|
|
pass
|