Python中的XMPP对Gtalk有回应,但对Hangouts无反应

2 投票
2 回答
2638 浏览
提问于 2025-04-18 10:35

我在用Python和XMPP试着做一个Gtalk机器人。

当我用iChat应用给这个机器人发消息时,我能收到回复。可是当我用Hangouts发消息时,就收不到回复了。不过我在服务器的日志里还是能看到我发的消息。

# -- coding: utf-8 -
import xmpp 

user="BOTUSERNAME@gmail.com"
password="PASSWORD"
server=('talk.google.com', 5223)

def message_handler(connect_object, message_node): 
        us = str(message_node.getFrom()).split('/')[0]
        if us == 'REALUSERNAME@gmail.com':
            us = us[0:4]
            print str(message_node)
            message = "Welcome to my first Gtalk Bot :) " + us
            s= str(message_node.getBody()).replace("\n", "\t")
            if s <> 'None' :
                print "MESSAGE: " + s
                connect_object.send(xmpp.Message( message_node.getFrom() ,message))

jid = xmpp.JID(user) 
connection = xmpp.Client(jid.getDomain()) 
connection.connect(server) 
result = connection.auth(jid.getNode(), password ) 

connection.RegisterHandler('message', message_handler)  
connection.sendInitPresence() 

while connection.Process(1): 
    pass

这是不是因为Gtalk不再支持XMPP了呢?

我的机器人还是能收到消息,但我的Hangouts应用却收不到回复。

2 个回答

0

如果你扩展了 sleekxmpp.ClientXMPP 这个类,那么你可以通过在 send_message() 里加上 mtype='chat' 来确保消息能够发送到 Hangouts。

bot = MyBot([...])
bot.send_message(mto=JID,mbody=MSG,mtype='chat')
4

我解决了这个问题。

你需要在 xmpp.Message 中添加 typ = 'chat' 这个属性。

connect_object.send(xmpp.Message( message_node.getFrom() ,message, typ='chat' ))

现在我的 gTalkBot 可以回复我从 hangouts 和 ichat 客户端发来的消息了。

非常感谢这个 Stack Overflow 的回答

撰写回答