summaryrefslogtreecommitdiffstats
path: root/scripts/ircgmessagenotify.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/ircgmessagenotify.pl')
-rw-r--r--scripts/ircgmessagenotify.pl218
1 files changed, 218 insertions, 0 deletions
diff --git a/scripts/ircgmessagenotify.pl b/scripts/ircgmessagenotify.pl
new file mode 100644
index 0000000..cb019d1
--- /dev/null
+++ b/scripts/ircgmessagenotify.pl
@@ -0,0 +1,218 @@
+#!/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');