如何在SleekXMPP或Python中处理XMPP订阅

2 投票
1 回答
758 浏览
提问于 2025-04-16 20:27

这是我的使用场景:

  1. 用户在网页上点击一个链接,上面写着:“在XMPP上关注这个人”
  2. 脚本开始运行,并根据注册的数据获取请求者的用户名和密码。
  3. 然后发送订阅请求。如果已经发送过订阅请求,脚本就不再发送新的请求。如果订阅被拒绝,脚本应该通知用户。
  4. 最后,脚本应该退出。

这是我目前的代码,使用了SleekXMPP

import sys, sleekxmpp, logging

if sys.version_info < (3, 0):
    reload(sys)
    sys.setdefaultencoding('utf8')

#This is hardcoded here, for illustration. 
jid = 'hermans@******.com/Work'
password = '********'
targetjid = 'simena@*******.com/Work'

class SubscribeWorker(sleekxmpp.ClientXMPP):
    def __init__(self, jid, password):
        sleekxmpp.ClientXMPP.__init__(self, jid, password)
        self.add_event_handler("session_start", self.start)

    def start(self, event):
        self.send_presence(pto=targetjid, ptype='subscribe')
        self.get_roster()

if __name__ == '__main__':
    logging.basicConfig(level=5,format='%(levelname)-8s %(message)s')
    xmpp = SubscribeWorker(jid, password)
    if xmpp.connect():
        xmpp.process(threaded=False)
        print("Done")
    else:
        print("Unable to connect.")

这段代码能成功发送请求,但没有考虑到是否已经有请求存在或者订阅的状态。有没有人能提供关于XMPP的订阅/取消订阅处理的示例代码?我真的试着理解维基和代码示例了,但目前在这段代码上卡住了。

提前感谢任何帮助。

1 个回答

0

另外,你可以试着在网页上放一个像这样的链接 xmpp:simena@*.com?subscribe,这样应该能在你现有的桌面客户端中正常工作。

撰写回答