如何在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)

使用 msn 协议运行 twisted.words 示例时出现问题

如何向 django-oscar 添加新视图

如何验证 Django Oscar 中的帐单地址信息?

如何扩展 django oscar 客户模型字段?

如何在django oscar中设置Paypal重定向网址?