如何使用 python 和 XMPPPY 自动接受订阅?
Posted
技术标签:
【中文标题】如何使用 python 和 XMPPPY 自动接受订阅?【英文标题】:How do I automatically accept subscriptions using python and XMPPPY? 【发布时间】:2015-01-30 20:56:42 【问题描述】:我正在为我玩的游戏制作聊天机器人,机器人本身运行良好,现在我需要做的是让机器人自动添加它收到的任何请求。
我不知道该怎么办,我在谷歌上搜索了一下,发现有人说
def add_friend(self, user):
self._send(xmpp.Presence(to=user, typ='subscribed'))
self._send(xmpp.Presence(to=user, typ='subscribe'))
return True
可以解决问题,但我不知道如何在我的代码中实现它。
这是我使用 Python 编写消息传递系统的代码基础:
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
当用户尝试添加机器人时,会显示以下内容:
<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>
任何想法,我已经坚持了几天!
【问题讨论】:
【参考方案1】:您应该实现状态处理程序以接受订阅:
def presence(conn, event):
if event.getType() == 'subscribe':
conn.send(xmpp.Presence(to=event.getFrom(), typ='subscribed'))
conn.RegisterHandler('presence', presence)
【讨论】:
以上是关于如何使用 python 和 XMPPPY 自动接受订阅?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python xmpppy 获取 XMPP 服务器中所有 MUC 的列表?