use strict;
## Brief docs
## 1) Place vtvauto.pl in $HOME/.irssi/scripts
## 2) Place vtvshows.txt in $HOME/.irssi/ where each shows is on their own line
## you can use regular expressions
## /script load vtvauto
## to load the script
## /set dcc_autoget ON
## /set dcc_autoget_masks *!*botty@benzoate.mine.nu
## /set dcc_download_path ~/launchmanydir
## the dcc_download_path is the most important ingredient
## YOU NEED TO HAVE BitTorrent or BitTornado launchmany.py or launchmanycurses.py
## watching that dcc_download_path
## /vtvreload to reload vtvshows.txt
## /vtvshows to display current list
## /vtvdebug to change debug level, 0 = no debug, 1 = general debug, 2 = verbose debug
## changelog:
## 20050916
## - added support for non "!trigger" triggers
## 20050913
## - fixed nick detection to use hostmask instead
## - detects now secondary announces too if you happened to be on netsplit
## when first one occured
## - added /vtvdebug
## 20050910
## - initial version
use vars qw($VERSION %IRSSI);
$VERSION = "20050916";
%IRSSI = (
authors => "",
contact => "",
name => "",
description => "vtv autoloader",
license => "to kill",
url => "",
changed => "$VERSION",
);
use Irssi;
our @shows;
our %seentriggers;
my $announcebot = "botty\@crystallum.mine.nu"; ## ident for the announce bot
my $debug = 0; ## enable debug, by putting 1 instead of 0
## verbose debug with 2
sub sig_pubmessage
{
my ($server, $text, $nick, $address, $target) = @_;
$text =~ s/\x03\d?\d?(,\d?\d?)?|\x02|\x1f|\x16|\x06|\x07|\x0f//g;
# begin with |, capture 1: non ")", match: non ")" inside (), capture 2: ! + non ")"
if ($address=~/$announcebot/ && $text =~m{([^)]+)\s\([^)]+\)\s\(Trigger\s=\s([^)]+)\)}) {
my $matchshow = $1;
my $trigger = $2;
Irssi::print("debug: match $matchshow ==> $trigger") if $debug;
foreach my $show (our @shows) {
chomp($show);
if(!length $show) { next; }
Irssi::print("debug: going to match $show") if($debug > 1);
if ($matchshow =~ /$show/i) {
if(!defined $seentriggers{$trigger}) {
Irssi::print("Download ($show) - $trigger");
$server->command ("msg $target $trigger");
$seentriggers{$trigger} = 1;
last;
} else {
Irssi::print("debug: already triggered '$trigger' for ($show)") if $debug;
}
} else {
Irssi::print("debug: $matchshow !~ /$show/i") if($debug > 1);
}
}
}
}
sub cmd_reload {
my $file = Irssi::get_irssi_dir."/vtvshows.txt";
if (-r $file) {
open(DAT, "< $file");
our @shows = <DAT>;
close(DAT);
Irssi::print("Reloaded shows from vtvshows.txt");
} else {
Irssi::print("Couldn't open vtvshows.txt");
}
}
sub cmd_shows {
Irssi::print("-- shows --");
foreach my $show (our @shows) {
chomp($show);
Irssi::print($show);
}
Irssi::print("-- shows --");
}
sub cmd_debug {
my ($data, $server, $channel) = @_;
Irssi::print("Setting vtvauto debuglevel to $data");
$debug = $data;
}
Irssi::signal_add_last("message public", "sig_pubmessage");
Irssi::command_bind('vtvreload','cmd_reload');
Irssi::command_bind('vtvshows','cmd_shows');
Irssi::command_bind('vtvdebug','cmd_debug');
cmd_reload();