crap.pl
1: # crap.pl
2: #
3: # shit nobody cares about
4: #
5: # Szymon 'polemon' Bereziak (2008 - 2010)
6: #
7: # I WILL NOW KILL STUFF WITH FIRE!
8: # This script is licensed untder ISC license
9: #
10:
11: use strict;
12: use vars qw($VERSION %IRSSI);
13:
14: use Irssi;
15: use LWP;
16: use XML::DOM;
17: use Data::Dumper;
18:
19: $VERSION = "0.01";
20:
21: %IRSSI = (
22: author => "Szymon 'polemon' Bereziak",
23: contact => "polemon\@polemon.org",
24: name => "crap",
25: description => "crap nobody cares about",
26: license => "ISC",
27: url => "",
28: changed => "2008-12-12",
29: );
30:
31: Irssi::command_bind('track', 'c_track');
32: Irssi::command_bind('stats', 'c_stats');
33: Irssi::signal_add_first('message public', 't_act');
34:
35: my $agent = LWP::UserAgent->new;
36: $agent->agent("Multi-Crapper/9001");
37:
38: my $parser = XML::DOM::Parser->new;
39:
40: my $damper; # public command damper...
41: my $semaphore = 1; # semaphore: 1 = open, 0 = closed
42:
43: sub c_track {
44: my ($data, $server, $witem) = @_;
45:
46: my $doc;
47: my $req = HTTP::Request->new(GET => 'http://justbase.fm/include/misc.php?section=trackupdate');
48: my $res = $agent->request($req);
49:
50: my $line;
51:
52: if($res->is_success) {
53: $doc = $parser->parse($res->content);
54: $line = $doc->getElementsByTagName("track")->item(0)->getFirstChild->getNodeValue;
55: }
56: else {
57: $line = "(track info unavailable)";
58: }
59:
60: if($witem && (($witem->{type} eq "CHANNEL" && $server->{'address'} eq "justbase.fm") || $witem->{type} eq "QUERY")) {
61: $witem->command("MSG " . $witem->{name} . " [TRACK] " . $line);
62: }
63: else {
64: Irssi::print("[TRACK] " . $line);
65: }
66: }
67:
68: sub c_stats {
69: my ($data, $server, $witem) = @_;
70:
71: my $doc;
72: my $req = HTTP::Request->new(GET => 'http://justbase.fm/stats.xml');
73: my $res = $agent->request($req);
74:
75: my $line;
76:
77: if($res->is_success) {
78: $doc = $parser->parse($res->content);
79: my $mps = $doc->getElementsByTagName("mountpoint");
80:
81: $line = "[STATS]";
82:
83: my $total = 0;
84:
85: for(my $i = 0; $i < $mps->getLength; $i++) {
86: $line .= " " . $mps->item($i)->getAttribute("item") . ": " . $mps->item($i)->getFirstChild->getFirstChild->getNodeValue . ";";
87: $total += $mps->item($i)->getFirstChild->getFirstChild->getNodeValue . ";";
88: }
89: $line .= " Total: " . $total;
90: }
91: else {
92: $line = "(statistics unavailable)";
93: }
94:
95: if($witem && (($witem->{type} eq "CHANNEL" && $server->{'address'} eq "justbase.fm") || $witem->{type} eq "QUERY")) {
96: $witem->command("MSG " . $witem->{name} . " " . $line);
97: }
98: else {
99: Irssi::print($line);
100: }
101: }
102:
103: sub t_act {
104: if($semaphore) {
105: my ($server, $msg, $nick, $address, $target) = @_;
106: my $witem = $server->window_item_find($target);
107:
108: if($msg =~ /^!track/i) {
109: $semaphore = 0;
110: $damper = Irssi::timeout_add_once(5 * 1000, 'open_sema', '');
111:
112: c_track($msg, $server, $witem);
113: }
114: elsif($msg =~ /^!stats/i) {
115: $semaphore = 0;
116: $damper = Irssi::timeout_add_once(5 * 1000, 'open_sema', '');
117:
118: c_stats($data, $server, $witem);
119: }
120: }
121: }
122:
123: sub open_sema {
124: Irssi::timeout_remove($damper);
125: $semaphore = 1;
126: }