Skype4Py - How to successfully add a contact?

落爺英雄遲暮 提交于 2020-01-05 10:12:14

问题


I'm working to implement a few fun features with a SkypeBot, and one of the features I'd like to implement is the ability to add a new contact. While reviewing the Skype4Py docs, I note this method:

http://skype4py.sourceforge.net/doc/html/Skype4Py.client.Client-class.html#OpenAddContactDialog

I am using the following code to try to access this:

sky = Skype4Py.Skype()
client = Skype4Py.client.Client(sky)
sky.Attach()
client.OpenAddContactDialog("test")

However, when trying to utilize almost anything from Skype4py.client.Client I get a timeout with the traceback:

Traceback (most recent call last):
 File "<input>", line 1, in <module>
 File "build/bdist.macosx-10.8-intel/egg/Skype4Py/client.py", line 164, in OpenDialog
 self._Skype._DoCommand('OPEN %s' % tounicode(' '.join(params)))
 File "build/bdist.macosx-10.8-intel/egg/Skype4Py/skype.py", line 276, in _DoCommand
 self.SendCommand(command)
 File "build/bdist.macosx-10.8-intel/egg/Skype4Py/skype.py", line 778, in SendCommand
 self._Api.send_command(Command)
 File "build/bdist.macosx-10.8-intel/egg/Skype4Py/api/darwin.py", line 395, in send_command
raise SkypeAPIError('Skype command timeout')
SkypeAPIError: Skype command timeout

I receive this timeout error on every method I try to access within the client class. (ie: OpenAuthorizationDialog, OpenCallHistoryTab, OpenContactsTab). Am I accessing this method incorrectly, or perhaps the method is not supported for newer versions of Skype? Any help with getting this working, or a method that adds contacts via Skype4Py successfully will be very appreciated.


回答1:


sky = Skype4Py.Skype()
sky.Attach()

client = Skype4Py.client.Client(sky)
client.OpenAddContactDialog("Torxed")

Trying a few things out but i'm 99% sure that's the order in which you have to do things. Otherwise you will time out because the attachment needs time to attach before you start executing things towards the API.

Also take a look at:

  • http://skype4py.sourceforge.net/doc/html/Skype4Py.user.User-class.html#SetBuddyStatusPendingAuthorization
  • http://skype4py.sourceforge.net/doc/html/Skype4Py.skype.SkypeEvents-class.html#UserAuthorizationRequestReceived

Also you might be going about this the wrong way. Adding a skype user directly, is not how Skype works.

  1. search
  2. request add with a message
  3. wait for authorization

So, try one of the following: (one is a asyncore way of searching and adding as they pop up, the other will bunch your results)

  • http://skype4py.sourceforge.net/doc/html/Skype4Py.skype.Skype-class.html#AsyncSearchUsers
  • http://skype4py.sourceforge.net/doc/html/Skype4Py.skype.Skype-class.html#SearchForUsers

So try:

sky = Skype4Py.Skype()
sky.Attach()
print skyp.SearchForUsers('Torxed')

Should get you a handle to add me for instance. Within the object that you recieve, there will be an option to add me for instance.




回答2:


@Torxed's answer was right, but here's more information in case anyone wasn't able to make it the last mile.

I was able to add a contact in this way:

import Skype4Py
sky = Skype4Py.Skype()
sky.Attach()
requestMessage = "Please accept my request!"
searchResults = sky.SearchForUsers('echo123')
firstResult = searchResults[0]
firstResult.SetBuddyStatusPendingAuthorization(requestMessage)

Do be careful, though as this merely adds the FIRST result returned by the search. If you have the username exact, it should be fine.



来源:https://stackoverflow.com/questions/16490965/skype4py-how-to-successfully-add-a-contact

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!