Skype-бот для деплоя без Skype API
Вы, наверное, знакомы с использованием чат-ботов для управления чем-либо. Например, очень удобно запускать сборку или раскладку, просто написав сообщение одному из своих контактов в IM.Для скайпа существуют различные готовые боты, один из представителей — Sevabot. Все они используют API скайпа, который Microsoft собирается убить, поэтому работа всех этих ботов скоро может стать невозможной. А мне бы этого не хотелось — я кое-где использую их для запуска деплоя.
Как же быть? Все живущие ныне боты работают сбоку от десктопной версии skype. Я организую всё так же, но подлезу к скайпу не через API.Для односторонней подачи отмашки на запуск чего-либо можно со скрипом обойтись только извлечением сообщений из скайпа. Skype хранит свои сообщения внутри базы sqlite3 в своей директории с данными. Я просто посижу в засаде.
import sys import signal from time import sleep import sqlite3
if len (sys.argv) != 3:
sys.stderr.write («Usage: %s
def int_handler (signum, frame): sys.exit (0) signal.signal (signal.SIGINT, int_handler)
dbfilename = sys.argv[1] interval = float (sys.argv[2])
conn = sqlite3.connect (dbfilename) c = conn.cursor () c.execute («select id from Messages where id = (select max (id) from Messages);») (last_msg_id,) = c.fetchone () while True: sleep (interval) for id, body in c.execute («select id, body_xml from Messages where id >?;», (last_msg_id,)): last_msg_id = max (id, last_msg_id) print body Запускаем: ./skype-watch.py ~/.Skype/skype_login/main.db 1На stdout с некоторой задержкой бегут получаемые и отправляемые клиентом сообщения. Поменяв запрос, можно добавить фильтрацию по отправителю, поменяв код обработки — реакцию. Идея, я думаю, понятна.
Ну и что? Хотелось бы услышать идеи, как сделать его двухсторонним. На ум пока приходит только подкладывание «неотправленных» сообщений в базу, которые бы скайп сам отправлял — ведь при неудаче отправки и завершении работы клиента скайп помнит, что нужно переслать.Плюсы: Не нужен API. Просто как топор, мало зависимостей. Минусы: Работает только на приём. Не использует хуки sqlite3. Реп на гитхабе