Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
219 lines (184 sloc) 6.62 KB
#!/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');