Własny bot gadu-gadu przy pomocy EKG
Mój pierwszy tutorial opisujący sposób na stworzenie skryptu, który będzie odpisywał na wiadomości wysłane pod numer gg bota. Przy pomocy instrukcji każdy posiadający dostęp do ekg (eksperymentalny klient gadu-gadu) będzie mógł stworzyć własny skrypt (o ile zna jakiś język programowania) odpowiednio interpretujący otrzymane wiadomości. Zastosowaniem naszego bota może być na przykład odpowiadanie piszącym do nas osobą, że nie ma nas przy komputerze lub wykonywanie poleceń systemowych przesłanych w wiadomości.
Zaczynamy- konfiguracja EKG
Aby korzystać z Eksperymentalnego Klienta Gadu-gadu (w skrócie EKG) należy go najpierw skonfigurować. Konieczne jest posiadanie konta gg. Konfiguracja jest bardzo prosta, sprowadza się do uruchomienia EKG i wpisania czterech komend:
set uin twój_numer
set password twoje_haslo
set email twoj_mail
save
Aby połączyć się z siecią komunikatora należy wydać polecenie
connect
a do rozłączenia używamy
disconnect
Kolejny etap - zdarzenia
Kiedy już dokonaliśmy konfiguracji i połączliśmy się z siecią gg możemy rozpocząć naszą zabawę w pisanie bota. Na początku dodamy zdarzenie, które na każdę wiadomość będzie odpowiadać "jestem botem". W EKG wpisujemy polecenie
/on --add msg,chat * /exec --bmsg %1 echo "jestem botem"
Za pomocą polecenia on z paramttrem --add dodaliśmy zdarzenie, które po otrzymani wiadomości od dowolnego użytkownika gg wykona komendę echo "jestem botem" i wyśle jej wynik do nadawcy, a wynikiem polecenia echo jest wyświetlenie tekstu podanego jako parametr. Aby przetestować działanie tego zdarzenia wyślemy z własnego gg wiadomość o dowolnej treści. Jeżeli otrzymamy odpowiedź "jestem botem", będzie to oznaczało, że wszystko działa poprawnie.
Teraz usuniemy dodane wcześniej zdarzenie, ponieważ za chwilę chcemy dodać je w zmienionej wercji, EKG nie umożliwia dodania kilku zdarzeń msg,chat.
/on -d 1
Piszemy program
Programy, których będziemy używać można pisać w dowolnym jezyku programowania. Do demonstracji działania użyję PHP.
przykładowy program będzie zapisywał otrzymaną wiadomość do pliku txt i odpowiadał, że nie ma nas przy komputerze.
Pierwszą czynnościa jest utworzenie pliku o rozszerzeniu php, a następnie dodanie zdarzenia
/on --add msg,chat * /exec --bmsg %1 /sciezka/do/naszego/skryptu.php %1 "%3"
Dzięku temu po otrzymaniu wiadomości zostanie urychomiony skrypt z numerem nadawcy(%1) oraz treścią wiadomości(%3) jako parametrami.
Teraz otwieramy plik ze skryptem i piszemy:
#!/usr/bin/php
<?php
Pierwsza linijka informuje system o scieżce do inpretera php, a druga to rozpoczęcie kodu php.
Teraz zapiszemy parametry do naszych zmiennych, żeby później nie trzeba było pamiętać, który element tablicy jest czym. Dodamy także zmienna ze ścieżką do naszego pliku txt, który będzie przechowywał wiadomości.
$numer=$argv[1];
$tresc=$argv[2];
$sciezka="/sciezka/do/naszego/pliku.txt";
Teraz zajmiemy się przypadkiem, kiedy pisząc z własnego numery będziemy chcieli odczytać zostawione wiadomości. Najpierw utworzymy plik txt z prawami do zapisu. Później do naszego kodu php doday fragment który po otrzymaniu od nas wiadomości (tylko z naszego numeru gg) o treści czytaj wyśle nam zawartość pliku.
if($numer=='TWÓJ_NUMER_GG' && $tresc=='czytaj')
{
$tresc=file_get_contents($sciezka);
echo $tresc;
}
Następnym krokiem jest dodanie kodu, który będzie odpowiedzialny za skasowanie zawartości pliku z wiadomościami, jeżeli wyślemy na numer bota wiadomość z naszego gg o treści kasuj
elseif($numer=='TWÓJ_NUMER_GG' && $tresc=='kasuj')
{
$plik=fopen($sciezka,"w");
fputs($plik,'');
fclose($plik);
echo 'Skasowano';
}
Na koniec zajmiemy się pozostałymi przypadkami, czyli tymi kiedy Wiadomość będzie z dowolnego numeru poza naszym lub z naszego numeru, ale nie będzie o treści czytaj lub kasuj.
else
{
$plik=fopen($sciezka,"a");
fputs($plik,$numer."\t".$tresc."\n");
fclose($plik);
echo 'Twoja wiadomość została zapisana.';
}
?>
Jeżeli dotrwałeś do tego momentu artykułu to znaczy, że powinieneś poradzić sobie ze stworzeniem własnego bota. Oczywiście zamieszczony tu przykład jest tylko jednym z wielu zastosowań własnego bota gadu-gadu. Każdy znający jakiś język programowania może stworzyć własny program według swojego pomysłu. Zapomniełbym dodać, że jeżeli chcesz aby polskie znaki wyświetlaly się poprawnie u odbiorcy wiadomości wyśłanych przez bota powinieneś zmienić kodowanie w pliku php na ISO-8859-2.
Co zrobić żeby bot był dostępny kiedy komputer jest wyłączony
Ostatnio opisywałem tworzenie własnego bota do gadu-gadu przy pomocy konsolowego programu EKG. Dzięki prostemu skryptowi zapisywaliśmy otrzymane wiadomości do pliku txt, jednak bot działa tylko wtedy, kiedy mamy włączony EKG. W tym artykule opiszę co zrobić, aby bot dostępny był cały czas.
Oczywiście aby bot działał EKG musi być włączony, ale nie musi być on uruchomiony na własnym komputerze. W celu uruchomienia bota skorzystamy z konta shell. Oczywiście możemy skorzystać z płatnego konta, jednak jeżeli jedynym przeznaczeniem naszego konta jest uruchomienie bota gg możemu skorzystać z darmowego konta.
Polecam shelle na
bimbrownia.org.
Kiedy już będziemy mieli konto, logujemy się na nie poleceniem ssh (lub programem Putty w Windowsie).
ssh TWÓJ_LOGIN@ADRES_SERWERA
Pierwszym krokiem będzie zapisanie naszego skryptu na serwerze. Będąc w swoim katalogu domowym na serwerze wydajemy polecenia
touch bot.php
chmod +x bot.php
nano bot.php
Pierwsza z tych komend tworzy plik bot.php, następna nadaje prawo do wykonywania, a ostatnia włącza plik w edytorze tekstu nano. W edytorze wpisujemy nasz skrypt w php, a następnie zapisujemy
Ctrl + O
i zamykamy nano
Ctrl + X
Wydajemy polecenie
screen ekg
Pokaże się nam EKG tak samo jak na własnym komputerze. Konfigurujemy go korzystając z poleceń przedstawionych w poprzednim artykule. Kiedy połączymy się z serwerem gadu-gadu dodajemy zdarzenie.
Używamy skrótu klawiszowego
Ctrl + a + d
Uwaga! Nie wciskamy klawiszy "a" i "d" jednocześnie, ale trzymając ctrl najpierw wciskamy "a", a następnie "d".
Teraz możemy wylogować się z naszego konta shell poleceniem
logout
Gdybyśmy wcześniej nie użyli polecenia "screen ekg", ale "ekg" w momencie wylogowania EKG wyłączył by się, a nasz bot stał by się "niedostępny". Dzięki użyciu polecenia screen po wylogowaniu program pozostaje włączony. Jeżeli chcemy wrócić do okna EKG, będąc zalogowanym na serwerze wydajemy polecenie
screen -x
Polecenie zadziała tylko wtedy, gdy za pomocą polecenia screen włączymy jeden program. Jeśli włączymy w ten sposób kilka procesów, to za pomocą polecenia
screen -ls
dostaniemy listę id procesów a korzystając z
screen -x ID_PROCESU
wyświetlimy dany program. Jeżeli po wyświetleniu EKG, jeżeli chcemu go wyłączyć używamy polecenia
quit
ale jeśli chcemy aby pozostało włączne używamy skrótu
ctrl + a + d