/usr/share/irssi/scripts/ircgmessagenotify.pl is in irssi-scripts 20131030.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | #!/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 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ä.",
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');
|