-
Notifications
You must be signed in to change notification settings - Fork 2
Skype api
##Пример модуля Скайп Пример программного агента на основе API Skype. Фильтрует все сообщения по ключевым словам.
###Вначале подключаем необходиме для работы этого модуля другие модули import sys import Skype4Py import time import os import re
###Подключить нашего аватара к запущенному Скайпу def OnAttach(status): print "API Attachment status: %s" % skype.Convert.AttachmentStatusToText(status) attached = False # Пытаемся подключиться if status == Skype4Py.apiAttachAvailable: #skype.Attach() while not attached: try: # Если скрипт внесен в Public API allowed programs - коннектимся skype.Attach(Wait=False) attached = True # Если нет - ждем, пока внесут, а пока идем лесом except: pass
###Присоедениться к нужному чату если неполучилось подождать полсекунды и попробовать снова def GetChat(chat): print "Receved: %s %s via Skype" % chat.Body, chat.Sender.FullName
try:
idChatMessage = skype.Command("GET CHAT mfeudor CHATMESSAGES")
skype.SendCommand(idChatMessage)
print 'TERMINAL>>', idChatMessage.Reply
return int(idChatMessage.Reply.split()[-1])
except:
time.sleep(0.5)
return GetChat()
###Отфильтровать нужные сообщения. def SendChats(tar_user): chats = skype.Chats for c in chats: # c.Messages is a tuple, to be able to sort it, # convert it into a list msg_list = list(c.Messages) msg_list.sort(message_timestamp_cmp) for Message in msg_list: if Message.Sender != ' ': # Фильтр сообщений через поиск по регулярному выражению (шаблону) r = re.search (r'Test (.+)', Message.Body) if r: msg = r.group(1).strip() for member in Message.Chat.MemberObjects: skype.SendMessage(tar_user, msg)
def OnMessageStatus(Message, Status):
if Status == 'RECEIVED':
print(Message.FromDisplayName + ': ' + Message.Body+ ': ' + Message.Sender.FullName);
if Status == 'SENT':
print('Myself: ' + Message.Body);
if Status == 'SENDING':
print('Sending: ' + Message.Body);
if Status == 'READ':
print('Read: ' + Message.Body);
###Начало основной программы ### send init: username, port, state skype = Skype4Py.Skype() ### Регистрируем слушателей skype.OnAttachmentStatus = OnAttach
### Callback на входящее сообщение
skype.OnMessageStatus = OnMessageStatus
if not skype.Client.IsRunning:
print 'TERMINAL>> Starting Skype..'
skype.Client.Start()
print 'TERMINAL>> Connecting to Skype..'
###skype.Attach(Wait=False)
skype.Attach()
profile = skype.CurrentUserProfile
print 'TERMINAL>> Skype name: %s' % skype.CurrentUser.Handle
print 'TERMINAL>> Skype credit balance: %d' % Balance()
print 'TERMINAL>> Port: %s' % port
print 'TERMINAL>> State: %s' % state
print 'TERMINAL>> Proxy: %s' % started_proxy
print 'TERMINAL>> MoodText: %s' % profile.MoodText
print
print 'TERMINAL>> SET AUTOAWAY OFF'
skype.SendCommand(skype.Command('SET AUTOAWAY OFF'))
### Отправить информацию о включении Аватара адрессату
skype.SendMessage('adress_user', 'Start Avatar for Read Messages')
###Основной цикл скрипта-Аватара в котором он находиться всё своё основное время.
#фильтрация срабатывает по прерыванию на входящее сообщение
mocpSongTitle = ''
currTitle = ''
while True:
SendChats('hueputalo2')
#SendChats('nosce_duma')
time.sleep(10)
# (stat, currTitle) = commands.getstatusoutput('mocp -Q %title')
currTitle = 'Time > ' + str(time.time())
if currTitle != mocpSongTitle:
if currTitle != '':
mocpSongTitle = currTitle
profile.MoodText = mocpSongTitle
else: profile.MoodText = ':-)'