Основное средство общения в нашей компании — это шашлыки чат Skype. Статус «в сети» означает присутствие на рабочем месте. Иногда ждёшь кого-то, начальству не напишешь «зайди плиз срочно» — в общем, уведомление о появлении в сети определённого человека было бы полезно.
В Skype для Linux нет такой «галочки» для отдельных контактов (думаю, что и пользователи других ОС с этим знакомы). Зато есть неоспоримое преимущество — почти безграничные возможности командной строки:
![Выполнение скрипта по событию в Skype](https://habrastorage.org/r/w1560/storage2/227/b27/551/227b27551fea8c12cb2f69d317dbeb4e.png)
Один из примеров замены стандартных уведомлений от компании Microsoft на что-то более гномовское (при помощи библиотеки libnotify) есть на хабре.
Наша задача — усовершенствовать эти уведомления. Мы хотим фильтровать контакты до обращения к libnotify. Настройки должны быть достаточно удобными, чтобы не запоминатьглупые skype-идентификаторы и не беспокоиться о потере настроек при переименовании контакта в клиенте.
Чтобы получить те имена, которые мы видим в Skype-клиенте, на помощь приходит Valery Yundin (Vayun) и его скрипт, который достаёт всё необходимое из нескольких файлов, расположенных, скорее всего, по адресу:
Данные о контактах, полученные из этого скрипта, отсортируем по имени и сохраним в файл
Кстати, наш скрипт должен обновлять контакт-лист, но сохранять имеющиеся настройки контактов: какие из контактов были закомментированы на момент запуска скрипта. Поэтому сначала прочитаем файл
Всё абсолютно тривиально, поэтому вот ссылка на готовый код reload_contacts.py и файл конфигурации settings.py.
А этот скрипт мы будем вызывать из скайпа (см. скриншот выше), передавая Skype-идентификатор контакта (%sskype) и имя, отображаемое в клиенте (%sname). Скрипт проверяет, нужно ли уведомлять об этом человеке. Если да, то выполняет
Если контакт не найден в нашем списке, то имеет смысл обновить контакт-лист, запустив вышеупомянутый
В итоге, тоже ничего сложного: filter_notify.py.
Благодаря «продвинутой» системе оповещений, Skype открыт для многочисленных улучшений: от ещё одного апгрейда notify-send — до озвучки входящих сообщений чата. Если у Вас есть другие интересные рецепты, предлагаю поделиться.
P.S. Спасибо НЛО за инвайт.
UPD: при заливке на github исправил баг в filter_contacts.py. Запуск
В Skype для Linux нет такой «галочки» для отдельных контактов (думаю, что и пользователи других ОС с этим знакомы). Зато есть неоспоримое преимущество — почти безграничные возможности командной строки:
![Выполнение скрипта по событию в Skype](https://habrastorage.org/storage2/227/b27/551/227b27551fea8c12cb2f69d317dbeb4e.png)
Один из примеров замены стандартных уведомлений от компании Microsoft на что-то более гномовское (при помощи библиотеки libnotify) есть на хабре.
Наша задача — усовершенствовать эти уведомления. Мы хотим фильтровать контакты до обращения к libnotify. Настройки должны быть достаточно удобными, чтобы не запоминать
Первый скрипт reload_contacts.py — получаем список контактов
Чтобы получить те имена, которые мы видим в Skype-клиенте, на помощь приходит Valery Yundin (Vayun) и его скрипт, который достаёт всё необходимое из нескольких файлов, расположенных, скорее всего, по адресу:
~/.Skype/ваш-skype-id/user*.dbb
Данные о контактах, полученные из этого скрипта, отсортируем по имени и сохраним в файл
filter_notify.conf
. Пусть по умолчанию все контакты будут закомментированы символом решётки. Тогда для добавления контакта в «избранное» достаточно будет его раскомментировать.Кстати, наш скрипт должен обновлять контакт-лист, но сохранять имеющиеся настройки контактов: какие из контактов были закомментированы на момент запуска скрипта. Поэтому сначала прочитаем файл
filter_notify.conf
, если он уже есть, и сохраним настройки.Всё абсолютно тривиально, поэтому вот ссылка на готовый код reload_contacts.py и файл конфигурации settings.py.
Второй скрипт filter_notify.py — управляем показом уведомления
А этот скрипт мы будем вызывать из скайпа (см. скриншот выше), передавая Skype-идентификатор контакта (%sskype) и имя, отображаемое в клиенте (%sname). Скрипт проверяет, нужно ли уведомлять об этом человеке. Если да, то выполняет
notify-send
.Если контакт не найден в нашем списке, то имеет смысл обновить контакт-лист, запустив вышеупомянутый
reload_contacts.py
.В итоге, тоже ничего сложного: filter_notify.py.
Инструкция по применению
- Сложить в одну папку все 4 скрипта:
skypelog.py, reload_contacts.py, filter_notify.py и settings.py (скачать одним архивом, зеркало).
- Дать права на выполнение:
chmod +x reload_contacts.py filter_notify.py
- Найти путь к папке Вашего профиля Skype. Для тех, кто не дружит с командной строкой: открыть «Домашнюю папку» и нажать Ctrl+H для отображения скрытых папок (
.Skype
— скрытая папка). Внутри папки.Skype
будет папка с профилем. Прописать путь к этой папке в settings.py, параметрSKYPE_FOLDER
.
Файлы настроек для разных учётных записей должны лежать в разных папках. - При желании: прописать путь к нашему файлу настроек контактов
filter_notify.conf
(по умолчанию я его положил в папку ~) — параметрCONTACTS_NOTIFY_LIST
. - Запустить reload_contacts.py и убедиться, что файл
filter_notify.conf
создан (по адресу, указанном вCONTACTS_NOTIFY_LIST
) и содержит список Ваших контактов. - В настройках Skype:
- перейти на вкладку «Notifications» («Уведомления»);
- выбрать нужное нам событие: «Contact Came Online» («Контакт появился в сети»);
- включить «Advanced View» («Больше настроек»);
- появится галочка «Execute the following script:» («Запускать следующий скрипт:») — включить её;
- ввести имя нашего скрипта с двумя параметрами
"%sskype" "%sname"
; - снять галочки «Play sound file» («Проиграть звуковой файл») и «Display pop-up notification» («Отображать всплывающее уведомление»)… КО утверждает, что наш фильтр на них не распространяется;
- нажать «Apply» («Применить») и закрыть окно настроек.
notify-send
.Заключение
Благодаря «продвинутой» системе оповещений, Skype открыт для многочисленных улучшений: от ещё одного апгрейда notify-send — до озвучки входящих сообщений чата. Если у Вас есть другие интересные рецепты, предлагаю поделиться.
P.S. Спасибо НЛО за инвайт.
UPD: при заливке на github исправил баг в filter_contacts.py. Запуск
"./reload_contacts.py"
на предпоследней строчке не работал (ибо папка, в которой лежит скрипт, не является текущей, если скрипт запускается клиентом Skype).