如何在twisted.words oscar(icq)中将伙伴添加到好友列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在twisted.words oscar(icq)中将伙伴添加到好友列表相关的知识,希望对你有一定的参考价值。
我有一个小型机器人在ICQ上与用户沟通,它使用的是Twisted.Words,Oscar协议。我需要看到他们的在线状态,但这似乎只有在我的好友列表中才有可能。所以这里有一个问题:
如何在Twisted.Words Oscar中为好友列表添加好友?
这很奇怪,但在API文档中似乎没有任何关于它的东西,我在oscar.py源代码中找不到任何好的线索。 :
最后,我想出了一个解决方案,看了几个小时的oscar.py代码和OSCAR协议文档。
所以我们走了。在这个例子中转到函数gotBuddyList(self,l):http://twistedmatrix.com/documents/current/words/examples/oscardemo.py
你可能有自己的模拟,这是收到SSI时调用的回调函数。它的约束如下:
self.requestSSI().addCallback(self.gotBuddyList)
所以在这个gotBuddyList(self,l)函数中你放了这个:
self.groupAll = l[0][0]
在我的情况下,这包含我的好友列表中的第一个好友组(它是从常规ICQ客户端提前手动创建的)。 l变量是从服务器收到的SSI,它包含你的好友组,这些组中的好友和其他东西,如设置或其他东西。这是根据OSCAR文档。
我要把我的好友添加到我列表中的第一组。如果您有自己的案例或想要创建更灵活的解决方案,则必须对此进行更多调查。
接下来,当你想在你的好友列表中添加一个新伙伴时,你会这样做(假设这仍然在你的BOSConnection的一个实现类方法中):
buddy = oscar.SSIBuddy(the_uin_to_add) # put the UIN of the buddy to add in the argument
try:
buddyID = max(self.groupAll.usersToID.itervalues()) + 1 # incrementing the buddyID
except ValueError: # if the group is empty yet
buddyID = 1
self.groupAll.addUser(buddyID, buddy) # adding it to the group
self.addItemSSI(buddy) # actually sending the stuff to the server
在这里,伙伴现在在你的名单中。如果他在线,您将立即获得updateBuddy事件,其中包含有关其在线状态的信息等。
在这里,我无法真正理解buddyID是什么。没有解释它的信息。但我终于认为它只是伙伴所在组内的内部ID。它受到32767的限制。我决定从1开始,每次从组中的最高位增加1。
这就是我的全部。我希望它可以帮助一次。如果您可以添加任何内容或更正我,我将很高兴看到您的意见!
以上是关于如何在twisted.words oscar(icq)中将伙伴添加到好友列表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 google talk 中使用 wokkel:(error twisted.words.protocols.jabber.sasl.SASLNoAcceptableMechanism)