首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python和XMPPPY自动接受订阅?

如何使用python和XMPPPY自动接受订阅?
EN

Stack Overflow用户
提问于 2015-01-31 04:56:43
回答 1查看 463关注 0票数 1

我正在为我玩的一个游戏制作一个聊天机器人,并且机器人本身工作得很好,现在我需要做的是让机器人自动添加它得到的任何请求。

我不知道该怎么办,我用谷歌搜索了一下,我发现有人说def add_friend(self, user): self._send(xmpp.Presence(to=user, typ='subscribed')) self._send(xmpp.Presence(to=user, typ='subscribe')) return True

可以做到这一点,但我不知道如何在代码中实现它。

下面是我为使用Python的消息传递系统编写的代码:

代码语言:javascript
复制
import xmpp

conn = xmpp.Client("domain here..")
if not conn.connect(server=("<server here>", 5223)):
    print "connect failed."
    exit()

if not conn.auth("USER ID", "PASS HERE", "xiff"):
    print "auth failed."
    exit()

roster = None

def message_handler(conn, msg):
    user = roster.getName(str(msg.getFrom()))
    text = msg.getBody()

    print "[%s] %s" % (user, text)

    reply = msg.buildReply("[ECHO] %s" % (text))
    reply.setType("chat")
    conn.send(reply)

conn.RegisterHandler("message", message_handler)
conn.sendInitPresence(requestRoster=1)
roster = conn.getRoster()

while conn.isConnected():
    try:
        conn.Process(10)
    except KeyboardInterrupt:
        break

当用户尝试添加机器人时,会显示以下内容:

代码语言:javascript
复制
<iq to="sum64756669@pvp.net" from="sum64756669@pvp.net/xiff" id="2861886931" type="error">
  <query xmlns="jabber:iq:riotgames:roster">
  <item jid="sum50971931@pvp.net" name="Top Mid Lane NA" subscription="pending_in" />
  </query>
  <error code="501" type="cancel">
  <feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
  <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">The feature requested is not implemented by the recipient or server and therefore cannot be processed.</text>
  </error>
  </iq>
DEBUG: socket       got   <presence to='sum64756669@pvp.net/xiff' from='sum50971931@pvp.net' name='Top Mid Lane NA' type='subscribe'>
  <priority>0</priority>
  </presence>

有什么想法吗,我已经被困在这几天了!

EN

回答 1

Stack Overflow用户

发布于 2015-12-20 17:35:28

您应该实现用于接受订阅的存在处理程序:

代码语言:javascript
复制
def presence(conn, event):
    if event.getType() == 'subscribe':
        conn.send(xmpp.Presence(to=event.getFrom(), typ='subscribed'))

conn.RegisterHandler('presence', presence)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28244480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档