Pull to refresh

Skype-бот для голосовых конференций

Instant Messaging *Python *


Вероятно, некоторые помнят сервис Skype Casts — публичные голосовые конференции, где каждый мог создать конференцию, которая анонсировалась на сайте skype.com. В 2008 году сервис был закрыт.

Сегодня единственная возможность хостить конференцию — держать запущенным Skype-клиент.
Это не удобно, потому как человек, который «держит» конференц-звонок не может принять входящий вызов, иначе конференция будет поставлена на удержание и никто в ней не сможет общаться. Если у хоста проблемы с интернетом — связь портится у всех.
К тому же хостить звонок в котором 10-15 участников существенно нагружает компьютер.

Мы пытались решить эту задачу держа запущенным Skype на Windows-сервере. Чтобы звонок не обрывался когда все участники кладут трубку — приходилось запускать две копии клиента и держать второго как участника конференции.
Но такая схема не очень стабильна, через 3-5 дней один из клиентов вылетает и звонок обрывается. Приходилось каждый переподнимать его вручную.

И вот наконец удалось найти стабльное и просто решение на основе skypekit позволяющие:

Постоянно держать звонок с помощью одной копии skypekit.
Если все участники конференции положили трубки, звонок перезапускается как /golive

Хостить бота на Linux-сервере без X-ов.
Десктопный клиент требует для запуска X-сервер. Skypekit можно запускать без него, даже на VPS.
Доступен под все платформы Windows/Linux/Mac

Управлять ботом через комманды в чате
Бот умеет разграничивать права доступа, различать комманды отправленные из основного чата конференции и из других чатов.
При желании можно написать аналог irc-шного eggdrop.



1) Качаем skypekit

developer.skype.com

Он стоит 5$. Если денег жалко я могу поделиться своим.

Компилируем заглушки для видео и звука. это немного неочевидный процесс, поэтому можно спрашивать по ходу).

2) Берем skypebot.py отсюда github.com/zhovner/skypebot

и кладем его в {skypekit_dir}/examples/python/tutorial/

3) Правим skypebot.py

Предпологается, что у вас уже есть созданная конференций в которую будет добавлен бот.
Нельзя чтобы аккаунт бота был создателем конференции. Команда /get creator введенная чате конференции вернет логин создателя.

В строке 38 необходимо вставить ID конференции. Чтобы его получить нужно ввести /get name в чате конференции.
Команда возвращает такую строку name=#skypename1/$skypename2;c7cddqc19522bab3

В скрипт строку необходимо добавлять в таком виде:

conferenceID = '#skypename1/$skypename2;c7cddqc19522bab3'


В списке Admins (строка 43) можно перечислить логины тех кто сможет управлять ботом.

4) Запускаем всю конструкцию

# заглушка видео (в моем случае)
{skypekit_dir}/skypekit/reference/videortphost-loopback/build/videortphost-loopback

# сам skypekit 
{skypekit_dir}/bin/linux-x86/linux-x86-skypekit-videortp

# бот (логин пароль от аккаунта передается через аргументы при запуске)
{skypekit_dir}/examples/python/tutorial/skypebot.py botskypename password


Теперь бот будет держать звонок постоянно.

Команды в чате:

!down — прекратить держать звонок
!up — возобновить звонок

Внимание!
Молодой парень срочно познакомится с более опытным Python-программистом для серьезных отношений в контексте совершенствования бота, потому как моих навыков явно недостаточно. В перспективе можно сделать полноценный аналог бота eggdrop или аналог сервиса SkypeCast.
Tags:
Hubs:
Total votes 66: ↑61 and ↓5 +56
Views 29K
Comments Comments 53