Egy skype botot írunk a c # -re egy moduláris felépítéssel

Régóta gondolták, hogy egy fajta megragadt Tools segítő ami engem és az árfolyamok és az időjárás kijelző és az azt alátámasztó anekdota csali, de minden kéz nem éri el ... nos, tudod, hogy van ez, igaz? Ezen túlmenően, az én végtelen lista szórakoztató ötlet, hogy jó lenne egy nap, hogy észre - ez volt a lényeg „bot Skype 4fun».

előszó

Mindössze össze kell fordítania mindent, és a \ SkypeBotAdapterConsole \ bin \ Debug-ban egy kész konzolt fog készíteni a teszteléshez (meg kell regisztrálnia a skyp4com könyvtárat a rendszeren és a régi Skype-n). A cikkben részletesebben részletesen festették ezeket a pillanatokat.

belépés


A következő hétvégén egy kicsit fáradt, hogy meglátta az utódját - a facebook egy gyilkosának, úgy döntöttem, hogy valamit választok a léleknek, és felismerem. A választás a Skype botjára esett. Úgy döntöttem, azonnal megírom a tartalékkal a bővíthetőséget, hogy a kollégák befejezhessék a botnak a közvetlenül szükséges moduljait.
Egyébként egy Skype chatben vagyok, ami viszont barátokból, ismerősökből és kollégákból, valamint a férfi klubból áll. A projektek egyikén közös munka során jött létre, és valahogy megszokták a kapcsolattartó listáinkat, feltételezve a hím bollock szerepét. Ez a csevegés volt, hogy írtam a botot, hogy kicsit szórakoztassam az embereket, és egy kicsit zendüljenek.

Állítsa be a feladatokat


És így. határozza meg, mit szeretne a végén:

Kutatási terület

Átgondolt arccal készítettem egy kódot fél órára, amely pár másodpercenként rákattintott a csevegésre, átmásolta az üzenetet, és így kapcsolatba lépett az ui héjjal. Frankensteinre pillantva a szívem elsüllyedt, és jó másodpercig megnyomtam a hátsó területet. "Igen, nem lehet, hogy nincs jobb megoldás" - villant át a fejem, és a kezem elérte a billentyűzetet.

Volt egy ötlet arra, hogy összekapcsolja a régi api könyvtárat a régi skype-vel, de mint tudod - a Microsoft, majd rózsaszín állatot hozott nekünk, megtiltva a régi Skype-verziók használatát. Számos cikket tanulmányozva arra a következtetésre jutottam, hogy különálló, régi hordozható változatok vannak, amelyeket a kézművesek átdolgoztak egy működőképes állapotba, megőrizve a régi funkciókat. És még mindig igen, a Skype virtuális futtatásával meggyőződésem, hogy a régi api könyvtár még mindig valamivel régebbi Skype-n dolgozik.

végrehajtás


Ezért a terv végrehajtásához szükségünk lesz:

- A Skype4COM.dll egy olyan ActiveX komponens, amely API-t biztosít a Skype kommunikációjához
- Interop.SKYPE4COMLib.dll - proxy a Skype4COM.DLL-től a .net-kóddal való kommunikációhoz
- A Skype indította el (például a 6.18-as verziót, a próbálkozást és a 4.2-et, de nem volt támogatás a csevegőszobák számára)
- Kefir és zabpehely sütik

A Skype4COM.DLL-t regisztráljuk a rendszerben. A legegyszerűbb módja a .bat fájl létrehozása és ott beírni


A dll mellett teszünk, és futtatjuk a kötegelt fájlt. Harapunk a sütit, kefirrel mossuk és dörzsöljük a kezünket, mert a tizedik rész elkészült.

Ezután meg kell bizonyosodnunk arról, hogy egyáltalán működik-e.

Interakció a skype-val


Hozzon létre egy konzolalkalmazást, csatlakoztassa az Interop.SKYPE4COMLib.dll-t, és írja be a következő egyszerű kódot:


Fussunk, kérjük, hogy írjon nekünk a Skype-on - a konzol a beszélgető szövegét jeleníti meg. Win. Egy másik sütit megyünk, és egy bögre joghurtot cipelünk.

Modulok írása


És így nagyon kevés. A botot úgy kell végrehajtanunk, hogy könnyebben csatlakoztatható további modulok a bothoz, mint a tápegység hűtése.

Hozzon létre egy könyvtári projektet és nevezze el, mondjuk HelloBotCommunication. Hídként fog szolgálni a modulok és a bot között. Három interfészt helyezünk el:

Az üzenetkezelő osztályokért felelős.

ahol CallCommandList listáját csapatok fogják hívni HandleMessage, CommandDescription kell, hogy a csapat leírás modulok (lásd alább) és HandleMessage -!, ahol a modult kell feldolgozni a beérkező paraméterek (args), továbbítja a választ a visszahívási sendMessageFunc

Ő lesz felelős a kezelőink nyilvántartásáért.

Ő lesz a további információkért az ügyfélről, ebben az esetben - a Skype-ról, ha szükséges a kezelő számára.


Az mit jelent ez az egész: egy fejlesztő létrehoz egy .dll, összeköti a könyvtár a kommunikáció, és öröklődik IActionHandler IActionHandlerRegister és végrehajtja a funkcionalitás gondolkodás nélkül mindent, ami felett fekszik.

Példa a "tell" parancsmodul formájában, amely arra kényszeríti a botot, hogy mindent elmondjon a parancs után.

Írjuk a botot


A modul ott van, van egy kommunikációs könyvtár, még mindig meg kell írnia az ünneplés legfontosabb bűnösét - monsieur botot, és mindez valahogy csatlakozik. Igen, könnyű - meg fogod mondani, és a kefir második csomagjába menekülsz a konyhába. És igazad van.

Én hívtam HelloBot-nak, és létrehoztam egy külön könyvtári projektet. Az osztály lényege, hogy megtalálja a megfelelő .dll-t a modulokkal, és működjön együtt velük. Ez történik

Itt szeretnék egy kicsit figyelmeztetni. Ez nagyjából megoldást jelent a homlokra és esetleg biztonsági lyukra. Jó mód van arra, hogy hozzon létre egy külön tartományt, és csak a többi ember moduljainak végrehajtásához joga van, de naiv emberek vagyunk, és feltételezzük, hogy az összes kódot ellenőriztük, és a modulokat a legjobb okok miatt írtuk le. (A helyes döntés nem kerékpár, hanem például MEF)

Miután regisztrálta az objektum létrehozását, megvan a parancs előtagja (alapértelmezés szerint "!") És a maszk a .dll modulok kereséséhez. És a HandleMessage módszer is, amelyben minden mágia létrejön.
A mágia elfogadja a bejövő üzenetet, az ügyféllel kapcsolatos konkrét adatokat (ha van ilyen) és a visszahívást a válaszhoz. Ezenkívül megjelenik a rendszerparancsok ("súgó" és "modulok") listája, amelyek lehetővé teszik, hogy az első esetekben láthassa ezeket a parancsokat, és az összes csatlakoztatott modul listáját a másodikban.
A modul végrehajtása külön szálon van elrendezve, és végrehajtási ideje korlátozott (alapértelmezés szerint 60 másodpercen belül), amely után a szál egyszerűen megszűnik.

A bot készen áll, az utolsó érintés volt - csatlakozni a konzolalkalmazáshoz, amely feldolgozza a Skype üzeneteket.

A Program.cs végső változata a konzolalkalmazáshoz

Ez minden. Néhány nap múlva kollégáim és én pár modulot írtunk. Példák a vágás alatt.

A bash egy véletlen idézetet jelenít meg a bashből
!ithap megjeleníti a véletlenszerű IT-előzményeket
. az időjárás mutatja a jelenlegi időjárás Minszkben
!mondja azt, amit mondasz
!calc elvégzi az aritmetikai műveleteket (NCalc könyvtáron keresztül)

A mellek véletlenszerű képet készítenek a pohárról. De mi van velük? By the way, az egyik legnépszerűbb parancs a chatben))


. a kurzus megjeleníti az aktuális kurzusokat és a paraméterek segítségével részletezi a kimenetet. Euró váltás usd-be és így tovább.
és mások.

Ismert problémák
Sajnálatos módon úgy tűnik, hogy valami a protokollban megváltozott, és a bot nem lát új csoportos csevegőszobákat. Az öreg valamilyen okból felbukkan egy bumm, de az új probléma. Megpróbáltam ásni, de nem találtam megoldást. Ha valaki azt mondja, hogyan lehet legyőzni ezt a fájdalmat, hálás leszek.
Néha előfordul, hogy az üzenetek elveszettek, és a Skype-nak "felmelegedésre" van szüksége, és ezután elkezdődik és megfelelően reagál az összes későbbi üzenetre.

Köszönöm a figyelmet, remélem, hogy az első palacsinta nem egy csomó, és az anyag hasznos volt.