我有一個小型的機器人與ICQ上的用戶進行通信,它使用Twisted.Words,Oscar協議。我需要查看他們的在線狀態,但這似乎只有當我把它們放在我的好友列表中時纔有可能。所以問題來了:如何添加好友列表中的twisted.words奧斯卡(icq)
如何向Twisted.Words奧斯卡中的好友列表中添加好友?
這很奇怪,但在API文檔中似乎沒有任何關於它的信息,我在oscar.py源代碼中找不到任何好的線索。 :\
我有一個小型的機器人與ICQ上的用戶進行通信,它使用Twisted.Words,Oscar協議。我需要查看他們的在線狀態,但這似乎只有當我把它們放在我的好友列表中時纔有可能。所以問題來了:如何添加好友列表中的twisted.words奧斯卡(icq)
如何向Twisted.Words奧斯卡中的好友列表中添加好友?
這很奇怪,但在API文檔中似乎沒有任何關於它的信息,我在oscar.py源代碼中找不到任何好的線索。 :\
最後我想出了一個解決方案,經過數小時查看oscar.py的代碼和OSCAR協議文檔。
所以,我們走吧。轉至功能gotBuddyList(個體經營,L)在這個例子: http://twistedmatrix.com/documents/current/words/examples/oscardemo.py
你可能有自己的模擬,這是在接收到SSI時調用回調函數。它必然是這樣的:
self.requestSSI().addCallback(self.gotBuddyList)
所以這gotBuddyList(個體經營,L)的內部函數,你把這個:
self.groupAll = l[0][0]
在我而言,這包含在我的好友列表中的第一個好友組(這是從常規的ICQ客戶端預先手動創建)。變量是從服務器接收到的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。
就是這樣。我希望它能幫助別人一次。如果你能添加任何東西或糾正我,我會很高興看到你的意見!