ПредишенСледващото

Тя отдавна се смята, че се направи един вид остана Инструменти помощник, който може да ми и валутните курсове и дисплей за времето и подкрепа анекдот стръв, но всички ръцете не достигат ... Ами, знаете ли как е, нали? Освен това, в моя безкраен списък със забавни идеи, които би било хубаво някой ден да реализира - това е точка "бот за Skype 4fun».

предговор

Ние просто трябва да се компилира всички в \ SkypeBotAdapterConsole \ бин \ Debug ще лежи готов konsolka искате да пуснете теста (да се регистрирате skyp4com библиотечна система + стар скайп). По-нататък в статията, тези моменти са боядисани в по-големи подробности.

влизане


На следващия уикенд, след като се умори малко конче тяхното потомство - на следващия убиец Facebook, реших да намери по нещо за душата, така че да се реализират. Изборът падна на бота за Skype. Реших да напиша веднага до резервата за разтегливост, така че колегите биха могли да завършат тези бот модули, които се нуждаят от тях веднага.
Между другото, аз съм в чата на Skype, което от своя страна се състои от приятели, роднини, колеги и така imenumy Мъжки клуб. Тя е създадена по време на съвместната работа по един проект, толкова много, така че някак си пуснала корени в нашите списъци с контакти, като за ролята на мъжки Чат. Именно поради тази чат бот написах, така че хората да имат по-малко забавно, но правят малко жар.

Ние поставяме цели


И така. Ние решаваме, че биха искали да имат в крайна сметка:

Домейнът проучване

Осъществяване на внимателен лицето, аз си записа половин час код, който на всеки няколко секунди, за да кликнете върху чат съобщение се копира в клипборда и по този начин си взаимодействат с UI черупка. Разглеждайки този Франкенщайн, сърцето ми се сви и Стиснах връщане назад за една добра 10 секунди. "Не може да бъде, че няма по-добро решение" - мина през главата ми, а ръцете му се протегнаха към клавиатурата.

Имах идея да завърже старата библиотека на стария API на скайп, но както знаете - Microsoft и след това ние засадени розово животно, като се забранява да използва по-стари версии на Skype. След изучаване на редица статии Аз дойдох до заключението, че има някои стари преносима версия, преработени от опитни майстори на здравословна състояние със запазване на стария функционалност. И все пак, да, работи Skype на virtualke, аз бях убеден, че старата библиотека API все още се работи с малко по-стар скайп.

изпълнение


И така, за изпълнение на планираните, ние трябва:

- Skype4COM.dll - е ActiveX компонент, който осигурява API да общуват с Skype'om
- Interop.SKYPE4COMLib.dll - Лииб прокси да взаимодействат с Skype4COM.DLL от .net код
- Изстрелян Skype (подходящ за пример версия 6.18, и се опита 4.2, но все още няма чат подкрепа)
- кисело мляко и овесени бисквитки

Skype4COM.DLL се регистрирате в системата. Най-лесният начин - да се създаде .bat файл и пишат там


Ние го поставете до DLL и стартирайте файла партида. Nadkusyvaem бисквитка, пие айран и триене ръцете си, защото на десетия ден от работата е свършена.

На следващо място, ние трябва по някакъв начин да се провери дали работи изобщо.

Взаимодействие с Skype


Създаване на конзолно приложение, свържете Interop.SKYPE4COMLib.dll и пише следното прост код:


Бягай, помолете някого да ни пишете на Skype - в konsolku показва текста на събеседник. Win. Стигаме до друга бисквитка и попълнете чаша мътеница.

Писане на модули


И така, има много малко. Ние трябва да се приложи робот, за да се свържете допълнителни модули с команди за бота е по-лесно, отколкото да се намажете охладителя в захранването.

Създаване на проект с име библиотека, нека HelloBotCommunication. Това ще служи като мост между модулите и бота. Поставете три интерфейси:

Той ще отговаря за класове, занимаващо се със съобщения.

където CallCommandList списък с отбори, които ще се нарича HandleMessage, CommandDescription трябва да се въвеждат описание отбор модули (виж по-долу) и HandleMessage - когато модулът трябва да обработва входящите параметри (аргументи), предава отговор на телефонния секретар, sendMessageFunc

Той ще отговаря за регистрацията на нашите манипулатори.

Той ще отговаря за допълнителна информация за клиента, в този случай - на Skype, ако е необходимо манипулатор.


Смисълът на всичко това е следната: разработчик създава .dll, свързва нашата библиотека за комуникация, и е наследен от IActionHandler IActionHandlerRegister и изпълнява това функционалността, без да мисля за всичко, което се намира на по-горе.

Пример за командния модул "кажа", което ще доведе до бота да каже на всички, които ще дойдат след името на командата.

Писане тялото на робота


Модул е ​​библиотека за комуникация се, остава да се напише главния герой от повода - Мосю бота и всичко свързано по някакъв начин. Да лесно - може да се каже, и тичам до кухнята за втори пакет от кисело мляко. И ще бъдеш прав.

Обадих му се и HelloBot създаден отделен проект библиотека. Същността на този клас е да се намерят необходимите .dll модули и работа с тях. Това се осъществява чрез

Тук искам да ви предупредя малко. Това е общо взето решение по челото и потенциално дупка в сигурността. В добро нужда да се създаде отделен домейн, и да даде само най-необходимите права при изпълнение на чуждестранни единици, но ние сме хора, наивен и да приемем, че всички код се проверява, както и модулите са написани с най-добри намерения. (Правилното решение е да се напише под наем и zayuzat например, MEF)

След регистрацията на създаването на обекта ще бъде на разположение на командването префикс (по подразбиране е "!") И маска, за да търсите .dll модули. И тъй като метод HandleMessage който се създава и цялата магия.
Магията е да се вземат входящи съобщения, някои конкретни данни от клиента (ако има такива) и извика, за да отговори. Просто влезе в списъка на системни команди ( «помощ» и «модули»), които ви позволяват да се види най-добрият отбор в първия случай, както и списък на всички свързани модули през втората.
Изпълнение модул се разпределят отделна нишка, и ограничени по време на изпълнение (по подразбиране 60 секунди), следвани от търговията просто престава да съществува.

Лодка готов, наляво последен щрих - да го свържат с konsolnym приложение, което обработва съобщения от Skype.

Окончателната версия за конзолата Program.cs кандидатстване

Това е всъщност всичко. За няколко дни, колеги и ме няколко модула са написани. Примерите по разреза.

Баш показва случаен цитат от Баша
!ithap показва случаен IT история
. Времето показва текущото време в Минск
!да речем каже какво искаш
!изчислено извършва аритметични операции (чрез NCalc библиотека)

цици направи снимка с произволно превключване. Ами, тъй като без тях. Между другото, един от най-популярните отбори в чат))


. Разбира се показва текущите лихвени проценти и условия на параметрите може да се усъвършенства продукцията. Евро замяна на долара и така нататък.
и др.

известни проблеми
За съжаление, нещо в доклада се е променило и роботът не вижда новите разговори на групата. По-стари някак си взима с гръм и трясък, но с нов проблем. Опитах се да се копае, но не са намерени решения. Ако някой ми каже как да се преодолее този болки, аз ще бъда благодарен.
Също така е понякога случай, че съобщенията са изгубени и се нуждаят от Skype "затопляне", след което той започва и адекватно да отговори на всички следващи съобщения.

Благодаря ви за вниманието, надявам се, от първия опит не отиде на бучки и материалът се оказа полезно.

Подкрепете проекта - споделете линка, благодаря!