Skip to content

Skype api

Ignat99 edited this page Sep 27, 2011 · 2 revisions

Исходный Питон код для 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 = ':-)'