首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在twisted.words oscar (icq)中添加好友到好友列表

如何在twisted.words oscar (icq)中添加好友到好友列表
EN

Stack Overflow用户
提问于 2012-11-05 16:33:47
回答 1查看 155关注 0票数 2

我有一个在ICQ上与用户交流的小机器人,它使用Twisted.Words,Oscar协议。我需要查看他们的在线状态,但这似乎只有当我的好友列表中有他们时才有可能。所以问题来了:

如何将好友添加到Twisted.Words Oscar中的好友列表?

这很奇怪,但在API文档中似乎没有任何关于它的内容,我在oscar.py源代码中也找不到任何好的线索。:\

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-06 00:33:00

在看了几个小时的oscar.py代码和OSCAR协议文档后,我终于想出了一个解决方案。

所以我们开始吧。在本例中,转到函数gotBuddyList(self,l)http://twistedmatrix.com/documents/current/words/examples/oscardemo.py

您可能有自己的模拟,这是一个回调函数,当SSI被接收时调用。它是这样绑定的:

代码语言:javascript
复制
self.requestSSI().addCallback(self.gotBuddyList)

所以在这个gotBuddyList(self,l)函数中放入如下内容:

代码语言:javascript
复制
self.groupAll = l[0][0]

在我的例子中,这包含了我的好友列表中的第一个好友组(这是事先从常规ICQ客户端手动创建的)。l变量是从服务器接收的SSI,它包含您的好友组、这些组中的好友以及其他内容,如设置或其他内容。这是根据奥斯卡的文件。

我要将我的伙伴添加到我列表中的第一个组中。如果你有自己的案例,或者想要创建一个更灵活的解决方案,你必须在这方面做更多的调查。

接下来,当您想要将一个新好友添加到您的好友列表中时,您可以这样做(假设这仍然在BOSConnection的某个实现类方法中):

代码语言:javascript
复制
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。

这就是我的全部。我希望它能帮助别人一次。如果您能添加任何东西或纠正我,我将很高兴看到您的意见!

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

https://stackoverflow.com/questions/13228452

复制
相关文章

相似问题

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