{"id":178,"date":"2009-06-30T01:13:27","date_gmt":"2009-06-30T00:13:27","guid":{"rendered":"http:\/\/pinklerose.mydevil.net\/blog\/?p=178"},"modified":"2025-08-05T22:31:43","modified_gmt":"2025-08-05T21:31:43","slug":"bot-dla-ekg","status":"publish","type":"post","link":"https:\/\/pinklerose.pl\/?p=178","title":{"rendered":"Bot dla EKG"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Od jakiego\u015b czasu na swoje potrzeby mam skonfigurowany w domu serwer dzia\u0142aj\u0105cy na Debianie Lenny. Jednym z dzia\u0142aj\u0105cych na serwerze program\u00f3w jest EKG.<br>Czym jest EKG?<br><a title=\"EKG\" href=\"http:\/\/ekg.chmurka.net\/\" target=\"_blank\" rel=\"noopener\">EKG<\/a> czyli <strong>E<\/strong>ksperymentalny <strong>K<\/strong>lient <strong>G<\/strong>adu-Gadu jest otwartym klientem dla system\u00f3w uniksowych dzia\u0142aj\u0105cy w terminalu, a co za tym idzie mo\u017cna mie\u0107 do niego dost\u0119p przez ssh.<br><br>Program znajduje si\u0119 w repozytoriach wi\u0119kszo\u015bci dystrybucji wi\u0119c jego instalacja nie powinna powodowa\u0107 problem\u00f3w mniej zaawansowanym u\u017cytkownikom.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Dla Debiana i Ubuntu b\u0119dzie to polecenie:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">apt-get install ekg<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">(oczywi\u015bcie jako root lub przez dodanie na pocz\u0105tku sudo).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po instalacji konfigurujemy komunikator (bardzo dobry opis konfiguracji jest <a title=\"tutaj\" href=\"http:\/\/debian.linux.pl\/viewtopic.php?t=582\" target=\"_blank\" rel=\"noopener\">tutaj<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz mo\u017cemy przyst\u0105pi\u0107 do stworzenia bota.<br>[ad]<br><span style=\"text-decoration: underline;\">Na wst\u0119pie zaznacz\u0119, \u017ce <strong>nie jestem programist\u0105<\/strong>, a kod programu napisany w <a title=\"Pythonie\" href=\"http:\/\/pl.wikipedia.org\/wiki\/Python\" target=\"_blank\" rel=\"noopener\">Pythonie<\/a> mo\u017ce nie by\u0107 do ko\u0144ca napisany poprawnie.<\/span> Kod jest zbieranin\u0105 r\u00f3\u017cnych opis\u00f3w tworzenia bota znalezionych przeze mnie w internecie i zmodyfikowany na tyle aby dzia\u0142a\u0142 i robi\u0142 to czego ja oczekuj\u0119.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na pocz\u0105tek (je\u015bli nie posiadamy takiego folderu) tworzymy folder 'scripts&#8217; w folderze konfiguracji ekg &#8217;.gg&#8217;.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">mkdir ~\/.gg\/scripts<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Nast\u0119pnie w nowo utworzonym folderze tworzymy plik bot.py<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">touch ~\/.gg\/scripts\/bot.py<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">i edytujemy go swoim ulubionym edytorem (np. vim lub nano)<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">nano ~\/.gg\/scripts\/bot.py<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Na pocz\u0105tek musimy doda\u0107 wa\u017cne nag\u0142\u00f3wki dla interpretera Pythona, aby wiedzia\u0142 z czym b\u0119dzie mia\u0142 do czynienia i za\u0142adowa\u0107 odpowiednie modu\u0142y.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><code><br><br>#!\/usr\/bin\/python<br><br># -*- coding: ISO-8859-2 -*-<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import ekg<br>import os<br>import urllib<br>import re<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz poni\u017cej dopisujemy dwie funkcje, dzi\u0119ki kt\u00f3rym b\u0119dziemy wiedzieli czy bot jest za\u0142adowany w EKG.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><blockquote><pre><code>def init():\n\tekg.printf(\"generic\",\"Bot czuwa...\")\n\treturn 1\n\ndef deinit():\n\tekg.printf(\"generic\",\"Bot zdech\u0142...\")\n\treturn 1\n<\/code><\/pre><\/blockquote><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Uwaga! Wa\u017cne s\u0105 tabulacje!<br>[ad#ciemny-banner-1]<br>Oraz dodajemy funkcj\u0119 odpowiedzialn\u0105 za wysy\u0142anie i odbieranie wiadomo\u015bci przez bota.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><code>def handle_msg(uin, name, msgclass, text, time, secure):<\/code><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz mo\u017cemy ju\u017c dodawa\u0107 instrukcje, kt\u00f3re ma wykonywa\u0107 nasz bot. W poni\u017cszym przyk\u0142adzie gdy pisz\u0105ca do nas osoba napisze<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">!czas<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">zostanie jej wy\u015bwietlona data i godzina serwera w dok\u0142adnie takiej samej postaci jakby\u015bmy sami wpisali polecenie<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">date<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">w terminalu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><blockquote><pre>if text==\"!czas\":\n\tczas = os.popen(\"%s\" % \"date\").read()\n\tekg.command(\"msg %d %s\" % (uin, czas))\n\treturn 1<\/pre><\/blockquote><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zapisujemy plik i nast\u0119pnie \u0142adujemy naszego bota w EKG przez polecenie<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\/python load bot<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Od teraz ktokolwiek do nas napisze <em>!czas<\/em> zostanie wykonana instrukcja programu i zostanie wy\u015bwietlony wynik polecenia <em>date<\/em>.<br>Gdyby\u015bmy chcieli wy\u0142\u0105czy\u0107 bota wykonujemy to poleceniem<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\/python unload bot<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Mojego bota mo\u017cna przetestowa\u0107 na <span style=\"text-decoration: line-through;\">moim gg 7841700<\/span> gg: <a href=\"gg:7191939\">7191939<\/a> (ostatnio nie zawsze w\u0142\u0105czony). Na pocz\u0105tek polecam wpisa\u0107 polecenie<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">!help<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">aby pozna\u0107 dost\u0119pne polecenia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plik z moim botem: <a href=\"https:\/\/pinklerose.pl\/wp-content\/uploads\/2009\/06\/bot.py\">bot<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Od jakiego\u015b czasu na swoje potrzeby mam skonfigurowany w domu serwer dzia\u0142aj\u0105cy na Debianie Lenny. Jednym z dzia\u0142aj\u0105cych na serwerze program\u00f3w jest EKG.Czym jest EKG?EKG czyli Eksperymentalny Klient Gadu-Gadu jest otwartym klientem dla system\u00f3w uniksowych dzia\u0142aj\u0105cy w terminalu, a co za tym idzie mo\u017cna mie\u0107 do niego dost\u0119p przez ssh. Program znajduje si\u0119 w repozytoriach [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[41,15,39,40,37,7,30,16],"class_list":["post-178","post","type-post","status-publish","format-standard","hentry","category-o-wszystkim","tag-bot","tag-debian","tag-ekg","tag-gadu-gadu","tag-gentoo","tag-linux","tag-software","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/pinklerose.pl\/index.php?rest_route=\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pinklerose.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pinklerose.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pinklerose.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pinklerose.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=178"}],"version-history":[{"count":0,"href":"https:\/\/pinklerose.pl\/index.php?rest_route=\/wp\/v2\/posts\/178\/revisions"}],"wp:attachment":[{"href":"https:\/\/pinklerose.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pinklerose.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pinklerose.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}