Mateusz Mazurek – programista z pasją

Python, architektura, ciekawostki ze świata IT

Programowanie Programowanie webowe

Ekg2, GGAPI.. Czyli bot GG.

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2010-09-28) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

Siema :)
Ostatnio myślałem nad tym jak działają boty gg.. Mam stronkę która w sumie już dość dobrze funkcjonuje i fajnym dodatkiem było by udostępnić taki numer GG żeby jakiś tam user mógł sobie w przystępny sposób korzystać z zasobów owego serwisu.

No to zacząłem czytać… Aby postawić BotaGG potrzebujemy hosting który stoi na jakimś linuxie, dostęp do SSH i zainstalowany program ekg2 z obsługą Pythona.. W sumie większość płatnych hostingów bez problemu udostępni takie dodatki :)

No to zaczynamy, pobierz sobie program PuTTy – przez niego będziesz się łączył z serwerem – uruchom go, wpisz serwer, port i połącz się… Wpisujesz następnie swój login, zatwierdzasz enterem i hasło i znów enter.

Teraz tworzysz terminal „drugi” w którym uruchomiony będzie ekg2 a robisz to wpisując:

1
screen ekg2

i enter :)

W ten prosty sposób mamy działający w „tle” ekg2.
Teraz dodajemy swój numer GG:

1
2
3
session -a
session password
save

sa to komendy które trzeba wbić aby móc się połączyć ;)

Następnie wpisujemy

1
connect

i jeśli wszystko ok, to połączymy się z serwerem GG.

Teraz warto dołączyć plugin Python takim poleceniem:

1
plugin +python

W tym momencie mamy w pełni działający komunikator GG ;) Możemy dodać do niego motywy gaficzne, ale nie będziemy się tym teraz zajmować.

Wypróbujmy!

Wpisz sobie coś takiego:

1
msg gg:tutaj_numer_gg_kolegi emanko!

Po wysłaniu takiego polecenia właściciel numeru który podałeś w miejsce „tutaj_numer_gg_kolegi” dostanie wiadomość o treści „emanko!” :)
Ok, ale zrobić z tego Bota? Tutaj przyda nam się plugin python, który dołączyliśmy wcześniej..

No i tu teraz mogą być rozbierzności co do folderu gdzie plik bota będzie znajdował.. U mnie jest to home/login/.ekg2/scripts
Prawdopodobnie będziesz miał taką ścieżkę ew. podobną.
Teraz w folderze scripts tworzymy plik bot.py

Teraz warto wejść przez ftp i zacząć go edytować poprzez jakiś windowsowy edytor,  no chyba że lubisz linuxowe edytory.. Jeśli tak to uzyj vi albo nano. Ja używałem przez ftp Notepad++ ;)
Także otwieramy plik.
Tutaj zaczyna się właściwe pisanie Bota, będziemy tworzyć go w języku Python..  W sumie jest dość fajny, tylko zakres funkcji oznaczany jest przez głębokość wcięć.. Mi to średnio odpowiada, ale na pewno ma jedną zaletę – kod programu wygląda schludnie. Ale cóż, nie zawsze przychodzi nam pracować w tym co lubimy najbardziej – choć jest możliwość napisania tego w PHP to czasem warto znać wiecej niż jeden język, a nauczyłem się mocnych podstaw tego języka właśnie pisząc tego Bota.

Tak czy siak – otwierasz plik i wklejasz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# -*- coding: utf-8 -*-
import ekg
import urllib2
import os

def init():
    ekg.printf("generic","Bot loaded - success");
    ekg.command("gg:back Hip-Hop.. 'To jest 'tańcz i klaszcz' a nie 'gwałć i pal'! '\n____\nZapraszamy na http://rap-cytaty.com !");
    return 1

def deinit():
     ekg.printf("genetic","Bot unloaded");

def handle_msg(session, uid, type, text, sent_time, ignore_level):

    check=0;

    if text.lower() in ("czesc", "cze", "hej" ):
        ekg.command("gg:msg "+uid +" Czesc, jestem botem ")
        check=1;
        return 1

    if text.lower() in ("elo" ):
        ekg.command("gg:msg "+uid +" Elo ziomuś. Po tej stronie Bot  ")
        check=1;
        return 1

    if text.lower() == "kontakt":
        ekg.command("gg:msg "+uid +" Aby skontaktowac sie z Administratorem serwisu prosze napisac na kajzur@o2.pl \n\n Pozdrawiam, \n Administrator.")
        check=1;
        return 1

    if text.lower() in ("spierdalaj", "wypierdalaj"):
        ekg.command("gg:msg "+uid +" Ja tu zostaje. Ciebie nikt nie trzyma.")
        check=1;
        return 1

    if text.lower() in ("kurwa", "dziwka", "szmata"):
        ekg.command("gg:msg "+uid +" Zadna praca nie hanbi ;d")
        check=1;
        return 1

#smiechy teraz

    if text.lower() in ("huj"):
        ekg.command("gg:msg "+uid +" Chyba 'chuj' analfabeto! ")
        check=1;
        return 1

    if text.lower() in ("chuj", "pierdol sie", "frajer", "szmaciarz", "tepak" ):
        ekg.command("gg:msg "+uid +" No chyba nie.. ogarnij ziom, kultura musi byc! ")
        check=1;
        return 1

    if text.lower() in ("kocham cie", "kocham cię"):
        ekg.command("gg:msg "+uid +" Ooo, kochasz? Nie wiem co powiedzieć.. Chyba czuje to samo!")
        check=1;
        return 1

    if text.lower() in ("lubie cie", "lubie cię"):
        ekg.command("gg:msg "+uid +" Miło mi to słyszeć, odwzajemniam.. ")
        check=1;
        return 1

    if text.lower() == "sex":
        ekg.command("gg:msg "+uid +" Pezet - Niegrzeczna, pobawisz se ze mna troche? Ja z Toba zawsze!")
        check=1;
        return 1

    if text.lower() in ("kretyn", "debil", "kutas"):
        ekg.command("gg:msg "+uid +" Z Ciebie ;p Wyluzuj i wbij se na http://rap-cytaty.com")
        check=1;
        return 1

    if check!=1:
        ekg.command("gg:msg "+uid +" Nieprawidlowa komenda. Wpisz 'komendy' lub 'pomoc' aby uzyskac pomoc.")
        check=1;
        return 1

ekg.handler_bind('protocol-message-received', handle_msg)

Jak to działa?
Tłumacze na przykładzie:

1
2
3
4
5
6
7
8
#text - zmienna przechowuje to co do nas ktos napisał, zamieniamy ją na małe litery, wtedy nie musimy sprawdzać dwóch wartości np Elo i elo, a tylko jedną. Instrukcja if sprawdza czy, w tym przypadku, tekst który wpisał user to "elo"
    if text.lower() in ("elo" ):
#jesli tak (spójrz na wcięcia) to wykonujemy funkcję ekg.command.. Która.. Uruchamia dokładnie to co wpisywałeś wysyłająć testową wiadomość do kogoś z klawiaturki w terminalu, czyli:
        ekg.command("gg:msg "+uid +" Elo ziomuś. Po tej stronie Bot  ")
#wyslalismy wiadomosc, fajnym pomysłem bedzie oznaczenie tego faktu, czyli ustawiamy sobie wartosc zmiennej check na 1
        check=1;
#i konczymy returnem
        return 1

Co tu jeszcze ciekawego napisać.. A obsługa tej zmiennej check:

1
2
3
4
    if check!=1:
        ekg.command("gg:msg "+uid +" Nieprawidlowa komenda. Wpisz 'komendy' lub 'pomoc' aby uzyskac pomoc.")
        check=1;
        return 1

Po prostu jesli skrypt nie wykona sie, tzn zaden z ifów nie umieści w zmiennej check wartosci 1, czyli to co napisał user nie było przez nas zaprogramowane, to wyswietlamy ze nie ma takiej komendy :)
I w sumie to koniec..
Teraz wracamy do naszego terminala i wpisujemy

1
python load bot

I powinnismy dostac komunikat ze bot zaladowany :) Ew błedy w parsowaniu pliku, co może przy kopiowaniu się zdarzyć – uważajcie na wcięcia.

Dobra.. Teraz inna sprawa
Bot na ekg2 – działa.. Ale nie zawsze jest on stabilny, a ponad to łamie regulamin GG.. Niedawno GG udostępniło API które pozwala napisać bota w PHP – bardzo ładne, przejrzyście napisane API z sensowną dokumentacją i przykładami na stronie..

Zalety EKG2:

  • Brak umowy.
  • Pełna kontrolna nad tym co wysyłamy
  • Praktycznie brak limitów.
  • Możliwosć zdalnej obsługi.
  • Tworzenie archwium (log).

Wady EKG2

  • Wiesza się.
  • Nie zawsze działa stabilnie.
  • Nie zawsze obłsuguje długie numery GG.
  • Łamie regulamin GG.
  • Głupieje jak ma kolejkę do wysłania wiadomości.

Teraz popatrzmy na ofertę GG:

Zalety APIGG:

  • Dostajemy klasy do obsługi Bota.
  • Nie łamiemy regulaminu GG.
  • Działa stabilnie.
  • Masz pewność ze zadziała :)
  • Obsługuje wszystkie numery GG bez problemu.

Wady APIGG

  • Umowa z dość ciekawą opłatą gdy złamiemy porozumienie.
  • GG ma prawo wysyłać reklamy do userów którzy korzystają z Bota.
  • Brak klasy do obłsugi archiwum – chyba że sam sobie napiszesz.
  • Limity.

Także.. Twój wybór!

Enjoy :)

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

2 komentarzy
Inline Feedbacks
View all comments
Monter

„W tym momencie mamy w pełni działający komunikator GG Tylko że brak oprawy graficznej – co możemy zmienić, ale nie będziemy się tym zajmować teraz…”
Ekg w oprawie graficznej ?! Pierwszy raz słyszę, aczkolwiek komunikator jest pod konsolę więc jak tam wsadzisz oprawę graficzną.POWIEDZ MI!