#!/usr/bin/perl -T -w # Harjoitustyönä tehty skripta. # Käyttö: # 1) kopioi .irssi/scripts hakemistoon # 2) /run ircgmessagenotify.pl # 3) /set ircgusername yournick # 4) /set ircgpassword yourpassword # 5) Voit myös optionaalisesti säätää ircgcheck_interval arvoa joka sekunneissa määärää kyselyjen välisen ajan sekunteina # 6) ircgdo_polling asetus voi olla joko 1 tai 0 ja se määrää pollataanko serveriä ylipäänsä # 7) /statusbar window add ircgcomments komento lisää statusbariin kohdan IRCG: n jossa n kuvaa uusien viestien lukumäärää. =) # 8) /ircgcomments komento kyselee käsin pakotettuna tilanteen # jos polling on asetettu 0 ei edes käsipelin kysely toimi. # Kiitokset statusbar ideasta Whiz:ille.. kiitos pällistä ideasta pälliin skriptaan jne. # Kiitoksia ei heru Whizille kylläkään toimimattomista regexpeistä... joutu ihan itse opetteleen keletanatu. use strict; use LWP::UserAgent; use HTTP::Cookies; use Irssi; use Irssi::TextUI; # ------------------------------------ # Ircgalleria skriptin poikanen # use vars qw($VERSION %IRSSI); $VERSION = "0.1b"; %IRSSI = ( authors => "BCOW", contact => "bcow\@iki.fi", name => "ircgmessagenotify", description => "Tarkistelee irc-galleria.net:iä ja sanoo kun sinulle on uusia viestejä.", sbitems => "ircgcomments", license => "GPLv2", url => "http://www.verkonpaino.net/", changed => "21.01.2004 23:55:00 EET" ); # alustetaan asetukset Irssi::settings_add_str('ircgmessagenotify', 'ircgusername', ''); Irssi::settings_add_str('ircgmessagenotify', 'ircgpassword', ''); Irssi::settings_add_int('ircgmessagenotify', 'ircgcheck_interval', '120'); Irssi::settings_add_int('ircgmessagenotify', 'ircgdo_polling', '1'); # alustetaan keksisäilö :P my $cookie_jar = HTTP::Cookies->new(file => $ENV{'HOME'}. "/.irssi/ircgmessagenotify_cookie_jar.dat", autosave => 1,); # alustetaan viestilaskuri my $lastcount = 0; # alustetaan timeria my $timeout; my $timeouttag; # -- aseta timeri sub setup_timer { # aseta uusi timeri $timeout = Irssi::settings_get_int("ircgcheck_interval"); if ($timeout < 60) { $timeout == 60; Irssi::print("ircgcheck_interval ei voi olla pienempi kuin 60. Asetin sen 60:een."); } $timeouttag = Irssi::timeout_add($timeout * 1000, 'check_for_new_messages', ''); } # -- varmistetaan että timeri muuttuu ja sen mukaan myös skriptan ajo. sub setup_changed { # määritykset muuttui. aseta timeri uudestan =) Irssi::timeout_remove($timeouttag); &setup_timer; # jokatapauksessa piirrä statusbar uudestaan Irssi::statusbar_items_redraw("ircgcomments"); } # -- varsinainen funktio jolla tsekataan viestit sub check_messages { my $forced = $_[0]; my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); $ua->timeout(10); $ua->cookie_jar($cookie_jar); my $irclogin = Irssi::settings_get_str('ircgusername'); my $passwd = Irssi::settings_get_str('ircgpassword'); my $req = HTTP::Request->new(POST => "http://irc-galleria.net/login.php"); $req->content_type("application/x-www-form-urlencoded"); $req->content("login=$irclogin&passwd=$passwd"); my $res = $ua->request($req); # Oliko palautus ok vai virhe if ($res->is_success) { #print $res->content; # okei saatiin tehtyä kirjautuminen.. ööm ja saatiin se mitä pitäisikin. tämä ei ole kuitenkaan se mitä halutaan ;) Irssi::print("ircgmessagenotify.pl sanoo: ööömm.. tätä ei pitänyt tapahtua: ". $res->as_string); } elsif ($res->is_redirect) { # okei uudelleenohjaus niinkuin pitäisikin(?) olla´ if ($res->header("Location") =~ /error/) { # gallerian virhe Irssi::print("ircgmessagenotify.pl sanoo VIRHE kirjauduttaessa: gallerian virhekoodi!"); } else { # homma ok. Haetaanpas sitten uudella requestilla viestit my $req2 = HTTP::Request->new(GET => "http://irc-galleria.net/". $res->header("Location")); # useragent toivottavasti muistaa keksit my $res2 = $ua->request($req2); if ($res2->is_success) { # ookii ;) saatiin content! if ($res2->content =~ /Sinulle on uusia kommentteja/) { #Irssi::print("Sinulle on uusia kommentteja irc-galleriassa!!!"); my $newcount = $res2->content; #$newcount =~ s/.*commentcount\"\>\(//i; #$newcount =~ s/\)\<.*//i; # irroita arvo :) $newcount =~ /.*commentcount\"\>\((\d)\)\<.*/; $newcount = $1; my $uusia = $newcount - $lastcount; #Irssi::print("Uusia: $uusia, newcount: $newcount, lastcount: $lastcount"); # sitten viimeinen tarkistus ;) if ($lastcount < $newcount) { # uusia viestejä! jeee! Irssi::print("Sinulle on irc-galleriassa $uusia kpl uusia kommentteja. Yhteensä $newcount kpl."); } elsif ($lastcount > $newcount) { # viestejä on luettu sitten viimekerran tai jotain muuta hassua, mutta niitä on kuitenkin Irssi::print("Sinulle on irc-galleriassa $newcount kpl viestejä odottamassa lukemista."); } # nolla tekee jotakin omituista :) # aseta arvo $lastcount = $newcount; } else { # aseta arvo nollille koska ei ole uusia viestejä $lastcount = 0; if ($forced == 1) { # hassuja epäloogisuuksia tuossa ylempänä ja siinä mitä tässä tapahtuu ;) Irssi::print("Sinulle ei ole uusia kommentteja irc-galleriassa."); } } } else { # virhe :((( Irssi::print("ircgmessagenotify.pl sanoo VIRHE viestien lukumäärää selvitettäessä: ". $res2->status_line); } } } else { #print $res->status_line, "\n"; # virhe :((( Irssi::print("ircgmessagenotify.pl sanoo VIRHE kirjauduttaessa: ". $res->status_line); } } # -- tarkista pakotetusti sub check_messages_forced { &check_messages(1); # jokatapauksessa piirrä statusbar uudestaan Irssi::statusbar_items_redraw("ircgcomments"); } # -- tarkista onko uusia viestejä eli yhdy palvelimeen ja tsekkaa lukema sub check_for_new_messages { # tarkista tarvitseeko tehdä mitään? if (Irssi::settings_get_int("ircgdo_polling") > 0) { #Irssi::print("Tick"); &check_messages(0); } # do_polling # jokatapauksessa piirrä statusbar uudestaan Irssi::statusbar_items_redraw("ircgcomments"); } # -- näytä tieto tän hetkisestä laskurista statusbarissa -) sub statusbar { my ($item, $get_size_only) = @_; my $state; if (Irssi::settings_get_int("ircgdo_polling") > 0) { # jos pollataan näytäkkin jotain $state = $lastcount; } else { # ei pollata joten näytä - $state = "-"; } $item->default_handler($get_size_only, undef, "IRCG: $state", 1); } # Kiinnitetään timeri &setup_timer; # sitten signaali liitoksia Irssi::signal_add("setup changed", "setup_changed"); # ja komento liitoksia Irssi::command_bind('ircgcomments', 'check_messages_forced'); # viimeiseksi jää statusbar liitos Irssi::statusbar_item_register('ircgcomments','{sb $0-}', 'statusbar');