Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
KCI II - Poradnik, ciąg dalszy.
#1
Postanowiłem tutaj kontynuować (nazwany umownie) 'poradnik skryptowania', jako że na forum ICeQ zainteresowanie tym zagadnieniem było praktycznie zerowe. Rozpoczęty przeze mnie 'poradnik', ma na celu... nie wiem co ma na celu, ale może ktoś się tym zainteresuje. Zacząłem pisać te brednie około 8 lipca br. i po pewnym czasie, zmęczony brakiem zainteresowania, przestałem rozwijać mój skrypt. Z czasem, jak wzrośnie zainteresowanie, bardzo chętnie podzielę się skryptem, ale ktoś musi również wykazać inicjatywę, bo nie wierzę, że nikt nie bawi/bawił się tym botem. Pragnę również zauważyć, że nie jestem programistą, jestem zwykłym użytkownikiem Polchatu, który z profesjonalnym lub/i amatorskim programowaniem ma tyle wspólnego, że szkoda gadać. Dlatego proszę o nie wytykanie mi wszelkich błędów/przekłamań, które z pewnością w tekście nie występują sporadycznie. Pisane językiem, który w założeniu miał być zrozumiały dla każdego... O ile pamiętam, DMC zawiesił prace nad botem, a nawet nad wszystkimi programami przeznaczonymi na Polchat, jednak wersja dla Windowsa zachowała się u mnie na dysku i bardzo chętnie ją udostępnię. Może nawet , po konsultacji z DMC, Administracja wrzuci bota do działu download (wykonalne?). Początki 'poradnika' pod tym adresem.

Oto co udało mi się osiągnąć:
-bot komunikuje się z bazą danych MySQL
-kilka prostych poleceń typu !seen, !ipseen, !seenip, !top10, !note - związanych z bazą danych
-polecenia popierdułki - !time, !date, !kolorki, !kolorek(nr kloloru), !losuj kolorek (bot losuje nam kolor), tutaj praktycznie możliwości są nieskończone...
-powitania dla konkretnych osób
-reakcja na bluzgi, w trybie 'trzech szans'
-bot zapamiętuje takie rzeczy jak ostatnio wybrany kolorek czy 'ostatnio widziany'
-można dawać uprawnienia konkretnym nickom przy konkretnych poleceniach
-jeszcze kilka rzeczy, których nie pamiętam
#2
Cześć Xtiano.

Oczywiście, że wykonalne. Gdybyś skończył swój poradnik myślę, że można by go umieścić na stronach polfanu (jeśli nie miałbyś nic przeciwko?).
#3
Dobry pomysl.
[URL=http://www.ping-timeout.de][img]http://www.ping-timeout.de/u_sig/520.jpg[/img][/URL]
#4
W gruncie rzeczy nie dziwię się znikłym zaiteresowanim Twojego tematu. Powód jest prosty - nie ma żadnego konkretnego źródła z którego można pobrać KCI II. Byłbym wdzięczny aby umieszczono KCI II w downloadzie polfanu lub podano na forum link umożliwiający ściągniecie, wcześniej umieszczonego przez ciebie na hostingu bota KCI II.
#5
(26-08-2007, 10:06)Smok link napisał(a): Cześć Xtiano.

Oczywiście, że wykonalne. Gdybyś skończył swój poradnik myślę, że można by go umieścić na stronach polfanu (jeśli nie miałbyś nic przeciwko?).


Ja nic przeciwko bym nie miał, ale czytając ten 'poradnik' doszedłem do wniosku, że nic nie tłumaczy i niczego nie uczy xP Początek może to i owo wyjaśnia, ale potem to tylko pośrednio opisuje rozwiązania zastosowane w skrypcie, nie podając fragmentów kodu Big Grin Bo w sumie to taki miałem zamysł, żeby ludzi nakierowywać, a nie podsuwać gotowe rozwiązania.

(26-08-2007, 23:56)credens link napisał(a): W gruncie rzeczy nie dziwię się znikłym zaiteresowanim Twojego tematu. Powód jest prosty - nie ma żadnego konkretnego źródła z którego można pobrać KCI II. Byłbym wdzięczny aby umieszczono KCI II w downloadzie polfanu lub podanie na forum linka umożliwiająceg ściągniecie, wcześniej umieszczonego przez ciebie na hostingu bota KCI II.

Na razie bota można ściągnąć stąd
#6
No to jak? Tongue Napisz taki poradnik, który będzie czegoś uczył, a nie się dziwisz, że zainteresowanie jest znikome Wink
#7
Widzę, że bot znalazł się w dziale download.
Teraz tylko znajdę trochę wolnego czasu i postaram się sklecić wszystko do kupy, tak aby miało ręce i nogi Wink
I taka mała porada, bota najlepiej odpalać w środowisku Pythona 2.1, w nowszych wersjach 'pluje się' o moduły itd.. Jeżeli zaś chodzi o modyfikacje skryptu to polecam IDLE najnowszej dostępnej wersji (2.5.1, zdaje się), a w opcjach ustawić kodowanie znaków na UTF-8.
#8
Na początek trochę suchej teorii:

1.Składnia
1.1. Wcięcia, instrukcje...

Podstawową rzeczą o, której należy pamiętać są wcięcia!
Jako takie wcięcie przeważnie stosuje się cztery spacje, ale nie muszą być akurat cztery,
jednak lepiej jest być konsekwentym ponieważ sprawia to, że nasz skrypt jest przejrzysty.
Przykład (wcięcie = cztery spacje):

Poprawnie:

Kod:
if numerek == 21:
    bot.say('Oczko!')

Z błędem:

Kod:
if numerek == 21:
bot.say('Oczko!')

W drugim przypadku bot najprawdopodobniej nie wystartuje, ponieważ zabrakło wcięcia!
Trzeba pamiętać, że każdy(!) blok instrukcji rozpoczynamy wcięciem:

Kod:
if numerek == 21:
    bot.say('Oczko!')
    print 'Wylosowalem 21'
else:
    bot.say('A to pech. Wylosowalem %s'% numerek)
    print 'Wylosowalem %s'% numerek

Należy pamiętać, że za każdym if i za każdym else występuję dwukropek ':'.
Podpowiada on interpreterowi, że w następnej linijce znajdzie się warunek instrukcji.
Bez dwukropka cały skrypt się posypie. Tyczy się to również pętli, których Python
ma tylko dwie. While i For. Składnie dla każdej z nich wyglądają następująco:
Dla while:

Kod:
while warunek:
    intrukcja
else:
    instrukcja

Dla for:

Kod:
for zmienna in lista/słownik:
    instrukcja

Na razie nie podaję konkretnych przykładów, ponieważ są to porady ogólne ;P

1.2. Nawiasy, cudzysłów, apostrofy i nowa linijka.

Funkcja bot.say() ma następującą strukturę:

Kod:
bot.say('Jakiś tekst') lub bot.say("Jakiś tekst")

Możemy używać "" lub ''(dwa apostrofy), nie ma różnicy, ale zawsze w nawiasach okrągłych!
Wszystko co znajdzie się pomiędzy "" bot wysyła na główne okno czatu, dlatego nazw zmiennych, do których
się odwołujemy, nie umieszczamy pomiędzy "", ale poza nimi, ale to jest niewygodne więc radzę od początku używać takiej składni:

Kod:
bot.say('Witaj %s'% sUserName)

lub bierzemy nazwy zmiennych w nawias i oddzielamy przecinkami, kiedy używamy więcej niż jedną:

Kod:
bot.say('Witaj %s, wlosowałem Ci kolorek %s'% (sUserName, kolor))

Dzięki temu, wszystko można umieścić w pomiędzy "" zamiast przerywać cudzysłów i co chwila wstawiać +zmienna+. Wygodne, prawda? ;D

Jeżeli chcemy, aby bot powiedział coś w kilku linijkach nie musimy robić czegoś takiego:

Kod:
bot.say('Pierwsza linijka')
bot.say('Druga linijka')
bot.say('Trzecia linijka')
...

Zajmuje to dużo miejsca, zamiast tego można wszystko zapisać w jednej linijce:

Kod:
bot.say('Pierwsza linijka\nDruga linijka\nTrzecia linijka')

Efekt ten sam, a pracy mniej. Warto zapamiętać, "\n".
Z bot.say_to() jest tak samo... natomiast z print trochę inaczej:

Kod:
print "cos tam"

Przypominam, że print nie wysyła niczego do serwera Polchatu(!), a jedynie na konsole.
Tekst, który ma zostać wyświetlony na konsoli bierzemy tylko w cudzysłów!
Jeżeli chcemy, aby print wyświetlił nam zmienną to umieszczamy ją poza cudzysłowem i za przecinkiem:

Kod:
print "cos tam:", zmienna, zmienna1, zmienna2, ...

Na razie tyle udało mi się napisać, dziś już nie mam czasu...
Ciąg dalszy nastąpi!

PS proszę o połączenie postów Wink
#9
Rozpoczynając praktyki, zaczniemy od najprostszych rzeczy...
POWITANIA
Na razie zajmiemy się powitaniami, w przyszłości reakcjami na słowa i takie tam.
Reakcje na wejście użytkownika zapisane są w definicji def evOnUserJoined(), definicja wykorzystuje zmienną sUserName - jest to nick osoby wchodzącej.
W podstawowym skrypcie zawartość tej definicji wygląda następująco:

Kod:
print "UserJoined:", sUserName
#powitaj kogos na glownym
bot.say ("<b>witaj </b>" + sUserName)
#i daj -dwulinijkowe- info na priva! :)
bot.say_to("Jestem testowa wersja bota KCI 2.\nWitaj na chacie <b>NAZWA POKOJU</b> :)", sUserName)

Dzięki temu bot wita osoby wchodzące na czat tekstem "witaj NICK", jest taki miły, że powita nawet sam siebie Wink I tu od razu zabezpieczamy powitania, aby bot nie witał sam siebie, no chyba, że to schizofrenik i ma rozdwojenie jaźni, ale jeszcze o takim bocie nie słyszałem. Zmodyfikujmy część odpowiedzialną za powitanie użytkownika na głównym oknie czatu. Kasujemy linijkę bot.say ("<b>witaj </b>" + sUserName) i w jej miejsce wstawiamy:

Kod:
sNick = sUserName.lower()
if sNick == 'nazwabotapisanamalymiliterami':
    return
else:
    bot.say('Witaj <b>%s</b>'% sUserName)

Teraz po kolei:

sNick = sUserName.lower()
zmienna sNick zawiera teraz nick osoby wchodzącej do pokoju, ale pisany małymi literami, ułatwia to identyfikacje nicków, w których użyte są duże litery.
if sNick == 'nazwabotapisanamalymiliterami':
    return

kiedy bot zidentyfikuje swoją nazwę jako nick osoby wchodzącej, po prostu przerwie wykonywanie dalszych instrukcji.
else:
    bot.say('Witaj <b>%s</b>'% sUserName)

jeżeli nick będzie inny to bot powita naszego gościa tekstem "Witaj NICK". Tutaj wpisujemy powitania dla wszystkich! Jeżeli ktoś chcę prywatne powitania to trzeba dodać kilka linijek:

Kod:
sNick = sUserName.lower()
if sNick == 'nazwabotapisanamalymiliterami':
    return
elif sNick == 'nickspecjalny':
    bot.say('Cześć misiu ;* Dawno się nie widzieliśmy ;)')
else:
    bot.say('Witaj <b>%s</b>'% sUserName)

Znów wyjaśniamy:
if sNick == 'nazwabotapisanamalymiliterami':
    return

Nie muszę tłumaczyć...
elif sNick == 'nickspecjalny':
    bot.say('Cześć misiu ;* Dawno się nie widzieliśmy Wink')

elif to taka fuzja else i if, dzięki temu możemy dodać kolejny warunek do tej samej instrukcji, od teraz jeżeli chcemy dodać komuś prywatne powitanie dodajemy kolejny elif, który stawiamy zawsze po if i zawsze przed else.
Takich elifów możemy dać ile chcemy, pamiętajcie, że nick wpisujemy teraz małymi literami!
Podsumowując, przy if dajemy nick bota, potem elif'y dla powitań specjalnych, a na końcu else dla zwykłych użytkowników.
W dalszej kolejności bot wysyła na priv osoby wchodzącej dwu linijkowe info:
bot.say_to("Jestem testowa wersja bota KCI 2.\nWitaj na chacie <b>NAZWA POKOJU</b> Smile", sUserName)
Polecam to wywalić, bo tylko irytuje użytkowników ;P
Oczywiście powitania można sobie pokolorować, aby tego dokonać należy tekst zamieścić w tagach koloru (według definicji RGB), np. <#FF0000>Jakis tekst</#FF0000> dla koloru czerwonego. Pozostałe tagi, których możecie użyć:
<b></b> - pogrubienie
<i></i> - pochylenie
<u></u> - podkreślenie
Dla bardziej zaawansowanych użytkowników nie będzie tajemnicą, że w dość prosty sposób możemy stworzyć sobie powitania losowe. Ale o tym może kiedy indziej ;P

Cały kod, który należy wkleić i odpowiednio zmodyfikować w swoim skrypcie:

# Tworzymym nowa zmienna, ktora przechowa nick pisany malymi literami
sNick = sUserName.lower()
# Tworzymy instrukcje warunkową if dla nicka bota
if sNick == 'nazwabotapisanamalymiliterami':
    return
# elif dla powitan specjalnych, mozna dodac ich dosc duzo
elif sNick == 'nickspecjalny':
    bot.say('Czesc misiu ;* Dawno sie nie widzielismy Wink')
elif sNick == 'nickspecjalny2':
    bot.say('Siem Bro! <o2>')
# else to u nas powitania dla zwyklych uzytkownikow
else:
    bot.say('<#FF0000>Witaj</#FF0000> <b>%s</b>'% sUserName)

Przypominam, że znak # oznacza komentarz i bot nie bierze pod uwagę znaków, które znajdą się właśnie za # aż do końca linijki!
I pamiętajcie o wcięciach!
  


Skocz do:


Użytkownicy przeglądający ten wątek:
1 gości