我正在尝试使用以下处理程序处理SleekXMPP客户端(来自openfire)收到的所有消息
self.add_event_handler("message", self.onmessage)
方法
def onmessage(self,msg):
打印('我在onmessages .. !!') if msg ['type'] in('error','headline','groupchat'): 打印“%s”%msg
我可以打印“groupchat”类型的消息,但是当我收到“标题”类型的消息时,我没有收到任何消息。
我已通过启用DBUG模式验证我的连接是否正在接收这些消息。
为什么我的消息处理程序没有处理标题消息的任何想法?
EX. groupchat message i got (which is successfully processed by the handler)
<message to="13260827@chat/resource" type="groupchat" id="m_444"
from="beach@resource/Chatadmin1 HOST"><body>user06</body>
<html xmlns=""><body xmlns="">user06</body></html></message>"
EX. headline message I want to process with the same handler (which is not working ATM)
<message to="13260827@chat/resource" type="headline" from="chat">
<x xmlns="domain:mute">
<mute duration="5" reasonCode="mute.reason.swearing" expiryTime="1416483206670" />
</x></message>
非常感谢提供解释/解决方案;)
答案 0 :(得分:1)
此处解释了上述问题的答案(类似示例): https://github.com/fritzy/SleekXMPP/tree/develop/examples/custom_stanzas
基本上我需要注册一个自定义节,因为我们在stanza中包含了非常特定于我们域的名称空间。
<message type="headline" from="chat" to="13269603@chat/resource">
<comp xmlns="xxxx:comp" type="currency">
<currency xmlns="xxxx:currency">
<amount>1.00</amount>
<iso-code>GBP</iso-code>
</currency>
</comp>
</message>
第1步:创建如下的类
class Currency(ElementBase):
namespace = 'xxxx:currency'
name = 'currency'
plugin_attrib = 'currency'
interfaces = set(('amount', 'iso-code'))
sub_interfaces = interfaces
class Comp(ElementBase):
namespace = 'xxxx:comp'
name = 'comp'
plugin_attrib = 'comp'
interfaces = set(('type', 'currency'))
sub_interfaces = interfaces
subitem = (Currency,)
def getCurrency(self):
currency = {}
for cur in self.xml.findall('{%s}currency' % Currency.namespace):
cur = Currency(cur)
currency[cur['amount']] = cur['iso-code']
return currency
您可以根据需要使用更多的util方法
第2步:
如下所示注册节(这应该在客户端类中完成(参见示例))
register_stanza_plugin(Message, Comp)
第3步:注册活动
self.registerHandler(
Callback('Comp Message', StanzaPath('{%s}message/{%s}comp' % (self.default_ns,self.default_ns)),self.oncomp))
def oncomp(self, msg):
self.event('custom_action', msg)
第4步:处理事件
self.add_event_handler('custom_action',
self.handle_action_event)
def handle_action_event(self, msg):
print("I am in handle_action_event***************")
print(msg)
答案 1 :(得分:0)
原因可能是;您应该对openfire源代码进行一些更改。