eggdrop – działający skrypt do google
Kręciłem się ostatnio po internecie w poszukiwaniu odpowiedniego skryptu do eggdropa (popularnego bota IRC) umożliwiającego wyszukiwanie za pomocą google. Znalazłem kilka skryptów, lepszych i gorszych. Najlepszy z nich był chyba skrypt zrobiony przez incith, który można znaleźć na egghelp – jednak i on miał czasem problemy. Zwyczajnie sie zawieszał.
Dlatego też, z pomocą Trila (który dał mi swój perlowy regexp, który próbowałem zrozumieć i przerobić go na tcla (; ) stworzyłem własny skrypt.
Skrypt to narazie faza testowa – nie musi koniecznie działać. Póki co działa poprawnie, nie zauważyłem w nim problemów. Plik do pobrania znajduje się u dołu wpisu.
Krótki opis instalacji:
- wgrywamy skrypt do jakiegoś folderu, gdzie tam sobie trzymamy skrypty do eggdropa
- edytujemy plik konfiguracyjny eggdropa (zazwyczaj eggdrop.conf) i dodajemy na końcu linijke
source /ścieżka/do/naszego/folderu/google.tcl
- telnetujemy się do naszego bota i wpisujemy następującą komende:
.rehash.chanset #nasz-kanal +gogiel
I cieszymy się działającym skryptem google do eggdropa :)
Poniżej zamieszczam zarówno kod skryptu, jak i plik do pobrania:
# Google 0.9.7 by samaelszafran (samaelszafran.pl)
#
# .chanset #kanal +gogiel
#
# To jest jeszcze wersja testowa. Kombinuje z biblioteka tcllib zeby usprawnic dekodowanie encji htmlowych. Wszystko prawidlowe i dzialajace pojawi sie w wersji 1* :>
package require http
package require htmlparse
bind pub - !g pub:google
bind pub - !google pub:google
set ver "0.9.7"
set agent "Mozilla"
setudef flag gogiel
proc pub:google { nick uhost handle channel arg } {
global agent
if {![channel get $channel gogiel]} {
putlog "Flag is not enabled for $channel"
} else {
if {[llength $arg]==0} {
putquick "PRIVMSG $channel :\002\[GOOGLE\]\002 Nieprawidlowe kryteria wyszukwiania!"
} else {
putquick "NOTICE $nick :\002\[GOOGLE\]\002 szukam -> $arg"
set arg [http::formatQuery $arg]
set query "http://www.google.pl/custom?q=$arg"
set token [http::config -useragent $agent]
set title [http::data [set token [http::geturl $query]]]
set title [string map {"\n" "" "\t" ""} $title]
set title [string map {"<em>" "\002*" "</em>" "*\002"} $title]
regexp -nocase {class=l[^>]*?>(.*?)</a><table} $title -> title2
regexp -nocase {<a href="([^"]+)"[^>]*>} $title -> newurl
set title2 [string map {"<b>...</b>" ""} $title2]
set title2 [::htmlparse::mapEscapes $title2]
if { [string match "/interstitial?url=*" $newurl] } { set newurl "Ta strona zostala uznana za potencjalnie niebezpieczna i zostala zablokowana zgodnie z ustawieniami bezpieczenstwa" }
if { [info exists title2] && [info exists newurl] } {
putquick "PRIVMSG $channel :\002\[GOOGLE\]\002 $title2 -> $newurl"
} else {
putquick "PRIVMSG $channel :\002\[GOOGLE\]\002 Nic nie znalazlem ;<"
}
}
}
}
putlog "Google $ver by samaelszafran (www.samaelszafran.pl) loaded!"

Zostaw komentarz