pastebin.ch - Untitled

Subject
Untitled
Author
Unnamed
Description
No description given
Posted on
Thu, 12 Nov 2009 20:08:59 +0100
Content
##### WHATauto - an irssi auto-download script #####
# Version 1.1.6 By mlapaglia & gravey13 (7-19-2009)
# Regular
Expressions provided by oorza # Original download routines provided by pssimon # # run "/load
~/WHATauto.pl" in IRSSI to start script. # copy it to "~/.irssi/scripts/autorun" to make it autoload
with IRSSI. # # Once loaded into irssi, this script waits for releases from Drone in #what.cd-announce. # When found,
the script checks them against user-created download criteria, and downloads # the .torrent file accordingly. # #
General commands can be found by typing "%help" # Administrative commands can be found by typing "%admin
help" # ################################################### ################################################### ###############
BEGIN CONFIGURATION ############### ################################################### # Variables are handled the
same as notification filters. # All variables except for @artistFilter and @tagFilter _MUST_ be populated for this
script to work. ############ OUTPUT OPTIONS ############# # Default location for downloaded .torrents -
"/home/mlapaglia/test" # Torrents will go here if a specific directory isn't specified below my
$torrentDir = "/home/rhodan/private/rtorrent/watch/"; # Percentage of hard drive space required in order
to download .torrents # Only applies to the What.CD autodownloader my $freePercent = 5; # Folder data is stored
in, for showing free space - ("/home/Downloads/"); my $drive =
"/home/rhodan/"; ########################################## ################ IRC Info
################ #AS OF VERSION 1.1.4, WhatBot will now obey you based on your address, not nick. To find your
address, #identify yourself with drone, then type /whois <yournick> and find you should see your address,
formatted similar to below. ###################################### # IRC addresses the script will obey, cannot be
live altered. - ('81126@mlapaglia.vip.what.cd', '122433@gravey13.elite.what.cd'); # Users listed here do NOT need to
be in @nickFilter or @adminNickFilter. my @nickOwner = ('181800@rhodan.member.what.cd'); # IRC addresses the
script will obey. - ('81126@mlapaglia.vip.what.cd', '122433@gravey13.elite.what.cd'); my @nickFilter =
(""); # IRC administrative addresses the script will obey. - ("81126@mlapaglia.vip.what.cd",
"122433@gravey13.elite.what.cd"); # Users in this list must also be in @nickFilter, and can change filter
and authorization settings my @adminNickFilter = (""); # IRC channels the script should accept commands
in - ("#WhatBot"); my @chanFilter = ("#WhatBot",
"#whatbot"); ######################################### ### WHAT.CD LOGIN INFO - **REQUIRED** ### #
username and password to download What.cd .torrents # if password has special characters, it must be in single
quotes my $usernameWHAT = "rhodan"; my $passwordWHAT = 'hunter2'; # IRC pass - found in your
profile my $ircPassWHAT = "hunter2"; # IRC Nick password - to identify with NickServ my $nickPassWHAT
= "hunter2"; ######################################### ######### WHAT.CD AUDIO FILTERS
######### ##Leave each filter empty to "skip" it ## #@activateMusic = (0|1); Use to turn on/off music
downloading my $activateMusic = 1; #@artistFilter = ("Augustana", "The Killers",
"Phoenix"); my @artistFilter = (); #@tagFilter = ("rock", "post.rock",
"metal", "progressive.metal", "death.metal", "alternative", "hip.hop",
"jpop", "house"); my @tagFilter = (); #@formatFilter = ("MP3" "FLAC",
"Ogg", "APE", "AAC", "AC3", "WavPack", "DTS",
"ALAC"); my @formatFilter = ("MP3"); #@qualityFilter = (192, "APS (VBR)", "V2
(VBR)", "V1 (VBR)", 256, "APX (VBR)", "V0 (VBR)", "q8.x (VBR)", 320,
"Lossless", "24bit Lossless", "Other"); my @qualityFilter = ("V0
(VBR)"); #@sourceFilter = ("CD", "DVD", "Vinyl", "Soundboard",
"SACD", "DAT", "Cassette", "WEB"); my @sourceFilter = (); #@yearFilter =
(1990, 1991, 1992, 1993); WILDCARDS DO NOT WORK, SORRY my @yearFilter = (2009); # $sceneFilter = (1|0); my
$sceneFilter = 0; #####FLAC FILTERS###### # $logFilter = (1|0); Only applies to FLAC releases. my $logFilter
= 0; # $logPercentFilter = (0-100); $logfilter must be set to 1. # Set to 0 to download all torrents with
logs. Anything above given percent will be downloaded. my $logPercentFilter = 0; # $cueFilter = (1|0); my
$cueFilter = 0; ######################################### #### WHAT.CD EBOOK/SOFTWARE FILTERS ##### ## Leave each
filter open to "skip" it ## # @activateEbook = (0|1); Use to turn on/off ebook downloading my
$activateEbook = 0; # @titleFilter = ("superman", "marvel") my @ebookTitleFilter = (); #
@ebooktagsFilter = ("tutorial", "adobe", "ebook") my @ebookTagFilter =
(); ######################################### ########### OTHER LOGIN IDs ############# # To specify a
different watch directory to download .torrents to, fill in the appropriate path # ex: my $watchSCT =
"/home/gravey/watch" #username and password to download Waffles .torrents my $usernameWAFFLES =
""; my $passwordWAFFLES = ''; my $watchWAFFLES = ""; # username and password to download ScT
.torrents my $usernameSCT = ""; my $passwordSCT = ''; my $watchSCT = ""; # username and
password to download SCC .torrents my $usernameSCC = ""; my $passwordSCC = ''; my $watchSCC =
""; #username and password to download HDbits .torrents my $usernameHDbits = ""; my
$passwordHDbits = ''; my $watchHDbits = ""; #username and password to download x264 .torrents my
$usernamex264 = ""; my $passwordx264 = ''; my $watchx264 = ""; #username and password to
download RevTT .torrents my $usernameRevTT = ""; my $passwordRevTT = ''; my $watchRevTT =
""; #username and password to download STMusic .torrents my $usernameSTMUSIC = ""; my
$passwordSTMUSIC = ''; my $watchSTMUSIC = ""; #username and password to download Goem .torrents my
$usernameGoem = ""; my $passwordGoem = ''; my $watchGoem = ""; #username and password to
download SDbits .torrents my $usernameSDbits = ""; my $passwordSDbits = ''; my $watchSDbits =
""; #username and password to download TehConnection .torrents my $usernameTC = ""; my
$passwordTC = ''; my $watchTC = ""; #username and password to download Libble .torrents my
$usernameLibble = ""; my $passwordLibble = ''; my $watchLibble = ""; #username and password
to download Bit-HDTV .torrents my $usernameBitHDTV = ""; my $passwordBitHDTV = ''; my $watchBitHDTV =
""; #username and password to download TorrentDamage .torrents my $usernameTD = ""; my
$passwordTD = ''; my $watchTD = ""; #username and password to download PTN .torrents my $usernamePTN =
""; my $passwordPTN = ''; my $watchPTN =
""; ########################################## ################################################# ###############
END CONFIGURATION ############### ################################################# use strict; use Irssi; use
Irssi::Irc; use threads; use WWW::Mechanize; use Filesys::DiskSpace; use HTML::Entities; use vars qw($VERSION
%IRSSI); $VERSION="1.1.6"; %IRSSI = ( authors=> 'mlapaglia & gravey', name=>
'WHATauto', description=> 'an irssi auto-download script', license=> 'GPL', ); # Irssi
settings Irssi::settings_set_int('cmds_max_at_once', 20); Irssi::settings_set_int('cmd_queue_speed', 0); # Log data
(sets how many torrents the script has seen and downloaded) my $seen = 0; my $downloaded = 0; # Print script error
if any What.CD information is left empty if (!$usernameWHAT || !$passwordWHAT || !$ircPassWHAT|| !$torrentDir)
{ Irssi::print (" "); Irssi::print ("****************************************"); Irssi::print
("** ERROR: What.CD username, password, and IRC pass, and torrent watch directory required."); Irssi::print
("** Please provide this information in the configuration."); Irssi::print ("** username:
$usernameWHAT, password: $passwordWHAT, IRCkey: $ircPassWHAT, torrent director: $torrentDir"); Irssi::print
("****************************************"); Irssi::print (" "); } else { Irssi::print
("-------------------------------------"); Irssi::print ("*Configured Filters:"); Irssi::print
("---Music---"); Irssi::print ("||Music Activated: $activateMusic"); Irssi::print
("||Torrent Directory: $torrentDir"); Irssi::print ("||Artist Filter:
@artistFilter"); Irssi::print ("||Tag Filter: @tagFilter"); Irssi::print ("||Format
Filter: @formatFilter"); Irssi::print ("||Quality Filter: @qualityFilter"); Irssi::print
("||Source Filter: @sourceFilter"); Irssi::print ("||Year Filter:
@yearFilter"); Irssi::print ("||Scene Filter: $sceneFilter | FLAC log Filter: $logFilter | FLAC percent
Filter: $logPercentFilter | CUE Filter: $cueFilter"); Irssi::print
("---Ebook/Software/Comics---"); Irssi::print ("||Ebook Activated:
$activateEbook"); Irssi::print ("||Title Filter: @ebookTitleFilter"); Irssi::print ("||Tag
Filter: @ebookTagFilter"); Irssi::print
("-------------------------------------"); } ############### #subroutine executes every time a channel
is joined sub channel_joined { my @chanlist = @_; my $channel = $chanlist[0]->{name}; my $server =
$chanlist[0]->{server}; chanBlock($channel, $server); } ############### #subroutine executes every time a new
connection is made sub event_connected { my ($server) = @_; print Dumper $server->{address}; if
($server->{address} eq "irc.what-network.net") { threads->new(\&initalize_what,
$server)->detach(); } } ############### # What.CD connection established sub initalize_what { my ($server)
= @_; $server->send_raw("PRIVMSG NickServ :identify $nickPassWHAT");
sleep(2); $server->send_raw("PRIVMSG drone :enter #what.cd-announce $usernameWHAT $ircPassWHAT");
sleep(2); $server->command("JOIN #WhatBot"); } ############### #subroutine executes when channel
invite is received sub message_invite { my ($server, $channel, $nick, $address) = @_; if (isOwner($address)) {
$server->command("JOIN $channel"); } } ############### #subroutine for each private message
received #splitting each message into it's own thread. sub event_privmsg { #inputting message from irssi my
($data, $message, $nick, $address) = @_; #stripping off leading channel identification my ($target, $text) = split(/
:/, $message, 2); #continue if message is from Drone. if($target eq "#what.cd-announce" &&
$nick eq "Drone") { #if the message matches the known music release string, break message into component
parts for comparison. #This regular expression brought to you by the sheer awesomeness oorza. Thanks! if($text =~
m!(.+) - (.+) \[([0-9]+)\] - (MP3|FLAC|Ogg|AAC|AC3|DTS) / ((24bit)? ?Lossless|[Vxq\.0-9|APS]{1,5}( \(VBR\))?) / (Log)?
?/? ?([\-0-9]+\%)? ?/? ?(Cue)? ?/? ?(CD|DVD|Vinyl|Soundboard|SACD|Cassette|DAT|WEB) ?/? ?(Scene)? -
http://what\.cd/torrents\.php\?id=([0-9]+) / http://what\.cd/torrents\.php\?action=download&id=([0-9]+) - (.+)!)
{ $seen++; #Don't download if music filter isn't activated if(!$activateMusic) { return; } #Dont't
download if disk space gets below set amount if(checkSpace() != 1) { return; } #Assign the values pulled from
the regex my ($artist, $album, $year, $format, $quality, $log, $logPercent, $cue, $source, $scene, $torrentID,
$downloadID, @tags) = ($1, $2, $3, $4, $5, $8, $9, $10, $11, $12, $13, $14, split /, /, $15); print
"*Detected announce: $artist - $album \[$year\] - $format / $quality / $log / $logPercent /
$source"; #Check each filter for matches in format, quality, source, year, and
artist. if(filter("format", $format, @formatFilter) && filter("quality", $quality,
@qualityFilter) && filter("source", $source, @sourceFilter) && filter("year",
$year, @yearFilter) && filter("artist", $artist, @artistFilter)) { #if log filter is present, but
doesn't match the given release, exit. if ($logFilter && $format eq "FLAC" && !$log) {
print "||Didn't detect match in log: log not present"; return; } elsif ($logFilter &&
$log) { print "||Detected match in log: log present"; if ($logPercentFilter != 0 &&
$logPercentFilter > $logPercent) { print "||Didn't detect match in log percentage: $logPercent"; return;
} elsif ($logPercentFilter != 0 && $logPercentFilter <= $logPercent) { print "||Detected match in
log percentage: $logPercent"; } } if ($cueFilter && $format eq "FLAC" &&
!$cue) { print "||Didn't detect match in cue: cue not present"; return; } elsif($cueFilter &&
$cue) { print "||Detected match in cue: cue present"; } if ($sceneFilter
&& !$scene) { print "||Didn't detect match in scene: $scene"; return;
} elsif($sceneFilter && $scene) { print "||Detected match in scene:
$scene"; } if(@tagFilter) { foreach my $filter1(@tagFilter) { foreach my $filter2(@tags)
{ if(lc($filter2) eq lc($filter1)) { print "||Detected match in tags:
@tags"; $downloaded++; my $t = threads->new(\&downloadWHAT, 1, $downloadID,
$torrentDir); $t->detach(); return; } } } print "||Didn't detect
match in tags: @tags"; print "-------------------------------------"; return; }
else { print "||Tag filter not defined: @tags"; $downloaded++; my $t =
threads->new(\&downloadWHAT, 1, $downloadID, $torrentDir); $t->detach(); } } } #if
the message matches the known e-book and software release string, break message into component parts for
comparison. elsif($text =~ m!(.+) - http://what\.cd/torrents\.php\?id=([0-9]+) /
http://what\.cd/torrents\.php\?action=download&id=([0-9]+) - (.+)!) { $seen++; #Don't download if the ebook
filter isn't activated if(!$activateEbook) { return; } my ($title, $torrentID, $downloadID, @tags) = ($1, $2,
$3, split /, /, $4); print "Detected e-book/software announce: $title -
@tags"; if(filter("title", $title, @ebookTitleFilter)) { if(@ebookTagFilter) { foreach my
$filter1(@ebookTagFilter) { foreach my $filter2(@tags) { if($filter2 eq $filter1) { print
"||Detected match in tags: @tags"; $downloaded++; my $t =
threads->new(\&downloadWHAT, 1, $downloadID,
$torrentDir); $t->detach(); return; } } } print "||Didn't detect
match in tags: @tags"; print "-------------------------------------"; } else { print
"||Tag filter not defined: @tags"; $downloaded++; my $t = threads->new(\&downloadWHAT, 1,
$downloadID, $torrentDir); $t->detach(); print
"-------------------------------------"; } } } } ##################### #IRC LISTEN
COMMANDS# ##################### else { #If private message, $target contains our nick, so we #change $target
to $nick in order to reply via PM if (!$data->ischannel($target)) { $target = $nick; } #Decide the
authorization required whether message is through channel or PM if( (chanPass($target,@chanFilter) &&
nickPass($address, @nickFilter) ) || ($target eq $nick && nickPass($address, @nickFilter)) )
{ ##################### ##DOWNLOAD COMMANDS## ##################### if($text =~ /^%download (.*)/i)
{ #################### #%download WAFFLES command if($1 =~ /^WAFFLES ([0-9]+)/i) { if($1 >
1000000000) { $data->command("msg $target Trying to crash me now, eh?") } else
{ $data->command("msg $target Downloading $1 from Waffles.fm now"); downloadWAFFLES($1,
$torrentDir, $data, $target); } } #################### #%download STMUSIC command elsif($1
=~ /^STMUSIC ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now,
eh?") } else { $data->command("msg $target Downloading $1 from STMusic
now"); downloadSTMUSIC($1, $torrentDir, $data,
$target); } } #################### #%download SCT command elsif($1 =~ /^SCT ([0-9]+)/i)
{ if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?") } else
{ $data->command("msg $target Downloading $1 from SCT now"); downloadSCT($1, $torrentDir,
$data, $target); } } #################### #%download SCC command elsif($1 =~ /^SCC
([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?")
} else { $data->command("msg $target Downloading $1 from SCC now"); downloadSCC($1,
$torrentDir, $data, $target); } } #################### #%download WHAT
command elsif($1 =~ /^WHAT ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying
to crash me now, eh?") } else { $data->command("msg $target Downloading $1 from What.cd
now"); downloadWHAT(0, $1, $torrentDir, $data,
$target); } } #################### #%download Hdbits command elsif($1 =~ /^HDBITS
([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?")
} else { $data->command("msg $target Downloading $1 from HDbits
now"); downloadHDbits($1, $torrentDir, $data,
$target); } } #################### #%download x264 command elsif($1 =~ /^X264
([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?")
} else { $data->command("msg $target Downloading $1 from x264 now"); downloadx264($1,
$torrentDir, $data, $target); } } #################### #%download RevTT command elsif($1 =~
/^REVTT ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now,
eh?") } else { $data->command("msg $target Downloading $1 from RevTT
now"); downloadRevTT($1, $torrentDir, $data,
$target); } } #################### #%download Goem command elsif($1 =~ /^GOEM
([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?")
} else { $data->command("msg $target Downloading $1 from Goem now"); downloadGoem($1,
$torrentDir, $data, $target); } } #################### #%download SDbits command elsif($1
=~ /^SDBITS ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now,
eh?") } else { $data->command("msg $target Downloading $1 from SDbits
now"); downloadSDbits($1, $torrentDir, $data,
$target); } } #################### #%download TC command elsif($1 =~ /^TC ([0-9]+)/i)
{ if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?") } else
{ $data->command("msg $target Downloading $1 from TC now"); downloadTC($1, $torrentDir,
$data, $target); } } #################### #%download Libble command elsif($1 =~ /^LIBBLE
([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?")
} else { $data->command("msg $target Downloading $1 from Libble now"); downloadLibble(
$1, $torrentDir, $data, $target); } } #################### #%download Libble
command elsif($1 =~ /^BITHDTV ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target
Trying to crash me now, eh?") } else { $data->command("msg $target Downloading $1 from
Bit-HDTV now"); downloadBitHDTV($1, $torrentDir, $data,
$target); } } #################### #%download TD command elsif($1 =~ /^TD ([0-9]+)/i)
{ if($1 > 1000000000) { $data->command("msg $target Trying to crash me now, eh?") } else
{ $data->command("msg $target Downloading $1 from TD now"); downloadTD($1, $torrentDir,
$data, $target); } } #################### #%download PTN
command elsif($1 =~ /^PTN ([0-9]+)/i) { if($1 > 1000000000) { $data->command("msg $target Trying
to crash me now, eh?") } else { $data->command("msg $target Downloading $1 from PTN
now"); downloadPTN($1, $torrentDir, $data, $target); } }
else { $data->command("msg $target Download Syntax: %download
<BitHDTV|Gome|HDbits|Libble|RevTT|SCC|SCT|SDbits|TC|TL|STMUSIC|WAFFLES|WHAT|x264>
<torrentID>"); $data->command("msg $target ex. %download WAFFLES
103856"); } } ##################### ###GENERALCOMMANDS### ##################### #%stats
command elsif($text =~ /^%stats/i) { $data->command("msg $target I have seen $seen announces and downloaded
$downloaded announces matching search criteria"); } #################### #%time
command elsif($text =~ /^%time/i) { my $time = showTime(); $data->command("msg $target *Current
System Time: $time"); } #################### #%current command elsif($text =~ /^%current/i)
{ $data->command("msg $target *Current
Configuration:--------------"); $data->command("msg $target
---Music---"); $data->command("msg $target ||Music Activated:
$activateMusic"); $data->command("msg $target ||Artist Filter:
@artistFilter"); $data->command("msg $target ||Tag Filter:
@tagFilter"); $data->command("msg $target ||Format Filter:
@formatFilter"); $data->command("msg $target ||Quality Filter:
@qualityFilter"); $data->command("msg $target ||Source Filter:
@sourceFilter"); $data->command("msg $target ||Year Filter:
@yearFilter"); $data->command("msg $target ||Scene Filter: $sceneFilter | FLAC log Filter: $logFilter
| FLAC percent Filter: $logPercentFilter | CUE Filter: $cueFilter"); $data->command("msg $target
---Ebook/Software/Comics---"); $data->command("msg $target ||Ebook Activated:
$activateEbook"); $data->command("msg $target ||Title Filter:
@ebookTitleFilter"); $data->command("msg $target ||Tag Filter:
@ebookTagFilter"); $data->command("msg $target
-------------------------------------"); } #################### #%free command elsif($text =~
/^%free/i) { my ($avail, $free) = showFree(); $data->command("msg $target **Free Space on $drive:
$avail GB ($free %)"); } #################### #%version command elsif($text =~ /^%version/i)
{ $data->command("msg $target WHATauto - version $VERSION by mlapaglia &
gravey"); } #################### #%help command elsif($text =~ /^%help/i)
{ $data->command("msg $target WHATauto - a Multi-purpose IRSSI download
script"); $data->command("msg $target %filter help | %admin help | %download
help"); $data->command("msg $target Other commands: %stats %current %time %free %join
%part"); } #################### #%join command elsif($text =~ /^%join #(.*)/i) { if
(isOwner($address)) { $data->command("JOIN #$1"); } } #################### #%part
command elsif($text =~ /^%part #(.*)/i) { if (isOwner($address)) { $data->command("PART #$1");
} } ##################### ###FILTER COMMANDS### ##################### elsif($text =~
/%filter (.*)/i && nickPass($address, @nickFilter)) { if($1 =~ /^add (.*)/i) { if($1 =~ /^artist
(.*)/i) { push(@artistFilter, $1); $data->command( "msg $target added $1 to artists"); } elsif($1 =~
/^tag (.*)/i) { push(@tagFilter, $1); $data->command( "msg $target added $1 to tags"); } elsif($1
=~ /^format (.*)/i) { push(@formatFilter, $1); $data->command( "msg $target added $1 to formats");
} elsif($1 =~ /^quality (.*)/i) { push(@qualityFilter, $1); $data->command( "msg $target added $1 to
qualities"); } elsif($1 =~ /^source (.*)/i) { push(@sourceFilter, $1); $data->command( "msg $target
added $1 to sources"); } elsif($1 =~ /^year ([0-9]+)/i) { push(@yearFilter, $1); $data->command(
"msg $target added $1 to years"); } elsif($1 =~ /^scene/i) { $sceneFilter = 1; $data->command(
"msg $target toggled scene to $1"); } elsif($1 =~ /^log/i) { $logFilter = 1; $data->command(
"msg $target toggled log to $1"); } elsif($1 =~ /^logpercent/i) { $logPercentFilter =
1; $data->command( "msg $target toggled log percent to $1"); } elsif($1 =~ /^cue/i) { $cueFilter =
1; $data->command( "msg $target toggled cue to $1"); } else { $data->command( "msg $target
FAIL! Try %filter help"); } } elsif($1 =~ /del (.*)/i) { my $count = 0; if($1 =~ /^artist
(.*)/i) { foreach(@artistFilter) { if($_ eq $1) { splice(@artistFilter,$count); $data->command( "msg
$target removed $1 from artists"); return; } $count++; } } elsif($1 =~ /^tag (.*)/i) {
foreach(@tagFilter) { if($_ eq $1) { splice(@tagFilter,$count); $data->command( "msg $target removed
$1 from tags"); return; } $count++; } } elsif($1 =~ /^format (.*)/i) { foreach(@formatFilter) { if($_ eq
$1) { splice(@formatFilter,$count); $data->command( "msg $target removed $1 from formats"); return; }
$count++; } } elsif($1 =~ /^quality (.*)/i) { foreach(@qualityFilter) { if($_ eq $1) {
splice(@qualityFilter,$count); $data->command( "msg $target removed $1 from qualities"); return; }
$count++; } } elsif($1 =~ /^source (.*)/i) { foreach(@sourceFilter) { if($_ eq $1) {
splice(@sourceFilter,$count); $data->command( "msg $target removed $1 from sources"); return; }
$count++; } } elsif($1 =~ /^year ([0-9]+)/i) { foreach(@yearFilter) { if($_ eq $1) {
splice(@yearFilter,$count); $data->command( "msg $target removed $1 years"); return; } $count++; }
} elsif($1 =~ /^scene/i) { $sceneFilter = 0; } elsif($1 =~ /^log/i) { $logFilter = 0; } elsif($1
=~ /^logpercent/i) { $logPercentFilter = 0; } elsif($1 =~ /^cue/i) { $cueFilter = 0; } else {
$data->command( "msg $target FAIL! Try %filter help"); } } else {
$data->command("msg $target Filter Syntax: %filter [add|del] [artist|tag|format|quality|source|year]
[filter]"); } } ##################### ####ADMIN COMMANDS### ##################### elsif($text
=~ /^%admin (.*)/i && nickPass($address, @nickFilter)) { my $count = 0; if($1 =~ /^print/i)
{ $data->command("msg $target Users with authorization: @nickFilter"); $data->command("msg
$target Users with admin authorization: @adminNickFilter"); } elsif($1 =~ /^add (.*)/i) {
push(@nickFilter, $1); $data->command("msg $target successfully added $1 to auth list"); } elsif($1
=~ /^del (.*)/i) { foreach(@nickFilter) { if($_ eq $1) { splice(@nickFilter, $count, 0); last; }
$count++; } $data->command("msg $target successfully removed $1 from auth list"); } elsif($1 =~
/^adminAdd (.*)/i) { push(@adminNickFilter, $1); $data->command("msg $target successfully added $1 to
admin auth list"); } elsif($1 =~ /^adminDel (.*)/i) { foreach(@adminNickFilter) { if($_ eq $1) {
splice(@adminNickFilter, $count, 0); last; } $count++; } $data->command("msg $target successfully removed $1
from admin auth list"); } elsif($1 =~ /^watchDir (.*)/i) { $torrentDir = $1;
$data->command("msg $target successfully changed watch folder to: $1"); }
elsif($1 =~ /^musicToggle ([0-1])/i) { $activateMusic = $1; $data->command("msg $target music
auto-downloading set to: $1"); } elsif($1 =~ /^ebookToggle ([0-1])/i) {
$activateEbook = $1; $data->command("msg $target ebook/software auto-downloading set to: $1");
} else { $data->command("msg $target Filter Syntax: %admin
[adminAdd|adminDel|add|del|watchDir|musicToggle|ebookToggle] [username|foldername|0|1]");
} } } } } ############### #Checks for channel authorization sub chanPass { my ($test, @filter) =
@_; foreach (@filter) { if ($test eq $_) { return 1; } } return 0; } ############### #Checks for user
address authorization sub nickPass { my ($address, @filter) = @_; foreach (@nickOwner) { if ($address eq $_) {
return 1; } } foreach (@filter) { if ($address eq $_) { return 1; } } return 0; } ############### #Returns
the current date and time properly formatted. sub showTime { my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct
Nov Dec); my @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun); my ($second, $minute, $hour, $dayOfMonth, $month,
$yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); my $year = 1900 + $yearOffset; my $theTime =
"$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year"; return
$theTime; } ############### #Returns the amount and percentage of disk space remaining sub showFree { my
($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df "$drive"; my $free =
sprintf("%.2f",$avail / ($avail+$used) * 100); $avail = sprintf("%.2f",$avail /
1024000); return($avail, $free); } ############### #Warns about low disk space via text message sub checkSpace
{ my ($avail, $free) = showFree(); if ($free < $freePercent) { print "***Server space at
$free%***"; return 0; } else { return 1; } } ############### #Loop through each filter, looking for the
given item. If #item is found, return true. If not, return false. sub filter { my ($name, $item, @filter) =
@_; #if there is no filter present, skip if (!@filter) { print "||No Filter for $name,
skipping."; return 1; } foreach (@filter) { if( $_ eq $item) { print "||Detected match in $name:
$_"; return 1; } } print "||Didn't detect match in $name: $item"; print
"-------------------------------------"; return 0; } ############### #automatically leaves channel if
it's an official channel (no bots allowed) sub chanBlock { my ($channel, $server) = @_; my @chanBlocks =
("#what.cd", "#what.cd-help", "#pu+", "#tm+", "#elite"); foreach
(@chanBlocks) { if ($_ eq $channel) { Irssi::print("*** WARNING: Bots are not allowed in $channel. Now
leaving..."); $server->command("PART $channel"); } } } ############### #Checks for user
address authorization sub isOwner { my ($address) = @_; foreach (@nickOwner) { if ($address eq $_) { return 1;
} } return 0; } ############### #Download subroutine for What.cd #Credits to pssimon for this subroutine. sub
downloadWHAT { my ($isAuto, $downloadID, $torrentDir, $server, $target) = @_; my $mech = WWW::Mechanize->new(
autocheck => 1 ); #login to site $mech->get("http://what.cd/login.php"); $mech->submit_form(
form_number => 0, fields => { username => "$usernameWHAT", password => "$passwordWHAT",
} ); my $answer = 1; #actual download command my $response =
$mech->get("http://what.cd/torrents.php?action=download&id=$downloadID"); if( my $disposition =
$response->{_headers}->{"content-disposition" } ) { $disposition =~
/filename="(.*)"$/; if(-e "$torrentDir/$1") { if($server) { $server->command( "msg
$target **$1 already exists."); } } else { #wait 8 seconds for tracker to register torrent before it gets
added if($isAuto) { sleep 8; } $mech->save_content("$torrentDir/$1"); if($server) {
$server->command( "msg $target **$1 downloaded successfully." ); } print "**$1 downloaded
successfully."; print "-------------------------------------"; } } else
{ $server->command( "msg $target **$downloadID does not exist on What.cd**." ); print "**$1
download FAILED**"; print "-------------------------------------"; $answer = 0; } #logout of
site $mech->get("http://what.cd/"); $mech->follow_link(url_regex => qr/logout\.php/); return
$answer; } ############### #Download subroutine for WAFFLES sub downloadWAFFLES { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://www.waffles.fm/w/index.php?title=Special:UserLogin&returnto=Main_Page"); $mech->submit_form(
form_number => 0,fields => { 'wpName' => "$usernameWAFFLES", 'wpPassword' =>
"$passwordWAFFLES", } ); #actual download command my $answer =
1; $mech->get("https://www.waffles.fm/details.php?id=$downloadID"); print Dumper $mech; if(my $link =
$mech->find_link(url_regex => qr/(download\.php.+uid=[0-9]+)/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on Waffles.fm**." ); } print "**$downloadID download
FAILED**"; print "-------------------------------------"; $answer = 0; } #logging out of site
(no auth key to grab) $mech->get("https://www.waffles.fm/logout.php"); return
$answer; } ############### #Download subroutine for STMUSIC sub downloadSTMUSIC { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://www.stmusic.org/login.php"); $mech->submit_form( form_number => 0, fields
=> { username => "$usernameSTMUSIC", password => "$passwordSTMUSIC", } ); my $answer =
1; $mech->get("http://www.stmusic.org/details.php?id=$downloadID"); if(my $link =
$mech->find_link(url_regex => qr/download\.php\/[0-9]+\/(.*?torrent)/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on STMusic**." ); } print "**$downloadID download
FAILED**"; print "-------------------------------------"; $answer = 0; } #logging out of site
(no auth key to grab) $mech->get("http://www.stmusic.org/logout.php"); return
$answer; } ############### #Download subroutine for ScT sub downloadSCT { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://www.scenetorrents.org/login.php"); $mech->submit_form( form_number => 0,
fields => {username => "$usernameSCT", password => "$passwordSCT", } ); #actual download
command my $answer = 1; $mech->get("https://www.scenetorrents.org/details.php?id=$downloadID"); if(my
$link = $mech->find_link(url_regex => qr/download\.php(.+)=([a-z0-9]+)/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on SCT**" ); } print "**$downloadID download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logging out of site (no auth key to
grab) $mech->get("https://scenetorrents.org/logout.php"); return
$answer; } ############### #Download subroutine for SCC sub downloadSCC { my ($downloadID, $torrentDir, $server,
$target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://www.sceneaccess.org/login.php"); $mech->submit_form( form_number => 0,
fields => { username => "$usernameSCC", password => "$passwordSCC", } ); #actual download
command my $answer =
1; $mech->get("https://www.sceneaccess.org/details.php?id=$downloadID"); $mech->dump_forms(); $mech->dump_links(); if(my
$link = $mech->find_link(url_regex => qr/download(big)?2\.php.*?torrent/)) { $mech->get($link); my $name
= $link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on SCC**" ); } print "**$downloadID download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logging out of site (no auth key to
grab) $mech->get("https://sceneaccess.org/logout.php"); return
$answer; } ############### #Download subroutine for HDbits sub downloadHDbits { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://hdbits.org/login.php"); $mech->submit_form( form_number => 0, fields
=> { uname => "$usernameHDbits", password => "$passwordHDbits", } ); #actual download
command my $answer = 1; $mech->get("https://hdbits.org/details.php\?id=$downloadID"); if(my $link =
$mech->find_link(url_regex => qr/download.php\?id=[0-9]+/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on HDbits**" ); } print "**$downloadID download
FAILED**"; print "-------------------------------------"; $answer = 0; } #logging out of site
(no auth key to grab) $mech->get("https://hdbits.org/logout.php"); return
$answer; } ############### #Download subroutine for x264 sub downloadx264 { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://x264.me/"); $mech->submit_form( form_number => 0, fields => {username
=> "$usernamex264", password => "$passwordx264", } ); my $answer =
1; $mech->get("http://x264.me/details.php?id=$downloadID"); if(my $link = $mech->find_link(url_regex
=> qr/download\.php\/[1-9]+\/(.*?torrent)/)) { $mech->get($link); my $name = $link->text(); if(-e
"$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) { $server->command( "msg
$target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on x264**" ); } print "**$downloadID download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logging out of site (no auth key to
grab) $mech->get("http://x264.me/logout.php"); return $answer; } ############### #Download
subroutine for RevTT sub downloadRevTT { my ($downloadID, $torrentDir, $server, $target) = @_; my $mech =
WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://www.revolutiontt.net/login.php"); $mech->submit_form( form_number => 0,
fields => { username => "$usernameRevTT", password => "$passwordRevTT", } ); my $answer =
1; $mech->get("https://www.revolutiontt.net/details.php?id=$downloadID"); $mech->dump_forms(); if(my
$link = $mech->find_link(url_regex => qr/download\.php\/[0-9]+\/.*passkey=[0-9a-z]+/))
{ $mech->get($link); my $name = $link->text(); if(-e "$torrentDir/$name") { if(-e
"$torrentDir/$name") { if($server) { $server->command( "msg $target **$name already exists."); }
} } else { $mech->save_content("$torrentDir/$name"); if($server) { $server->command(
"msg $target **$name downloaded successfully." ); } print "**$name downloaded
successfully."; print "-------------------------------------"; } } else { if($server) {
$server->command( "msg $target **$downloadID does not exist on RevTT**" ); } print "**$downloadID
download FAILED**"; print "-------------------------------------"; $answer = 0; } #logging
out of site (no auth key to grab) $mech->get("https://www.revolutiontt.net/logout.php"); return
$answer; } ############### #Download subroutine for goem sub downloadGoem { my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://goem.org/login.php"); $mech->dump_forms(); $mech->submit_form(
form_number => 0, fields => {username => "$usernameGoem", password => "$passwordGoem", }
); my $answer = 1; $mech->get("http://goem.org/details.php?id=$downloadID"); if (my $link =
$mech->find_link(url_regex => qr/download\.php\/[1-9]+\/(.*?torrent)/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on Goem**" ); } print "**$downloadID download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logging out of site (no auth key to
grab) $mech->get("http://goem.org/logout.php"); return $answer; } ############### #Download
subroutine for SDbits sub downloadSDbits { my ($downloadID, $torrentDir, $server, $target) = @_; my $mech =
WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://www.sdbits.org/login.php"); $mech->submit_form( form_number => 0, fields
=> {uname => "$usernameSDbits", password => "$passwordSDbits",}); my $answer =
1; $mech->get("http://sdbits.org/details.php?id=$downloadID"); if(my $link =
$mech->find_link(url_regex => qr/download\.php.*?torrent/)) { $mech->get($link); my $name =
$link->text(); if(-e "$torrentDir/$name") { if(-e "$torrentDir/$name") { if($server) {
$server->command( "msg $target **$name already exists."); } } } else {
$mech->save_content("$torrentDir/$name"); if($server) { $server->command( "msg $target
**$name downloaded successfully." ); } print "**$name downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on SDbits**" ); } print "**$downloadID download
FAILED**"; print "-------------------------------------"; $answer = 0; } #logging out of site
(no auth key to grab) $mech->get("http://www.sdbits.org/logout.php"); return $answer;
} ############### #Download subroutine for TC sub downloadTC{ my ($downloadID, $torrentDir, $server, $target) =
@_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("https://tehconnection.eu/login.php"); $mech->submit_form( form_number => 0,
fields => {username => "$usernameTC", password => "$passwordTC", } ); my $answer =
1; #actual download command my $response =
$mech->get("https://tehconnection.eu/torrents.php?action=download&id=$downloadID"); my $disposition =
$response->{_headers}->{"content-disposition"}; if($disposition =~ /^attachment;
Filename="(.*)"$/) { if(-e "$torrentDir/$1") { if(-e "$torrentDir/$1") { if($server) {
$server->command( "msg $target **$1 already exists."); } } } else {
$mech->save_content("$torrentDir/$1"); if($server) { $server->command( "msg $target **$1
downloaded successfully." ); } print "**$1 downloaded successfully."; print
"-------------------------------------"; } } else { $server->command( "msg $target
**$downloadID does not exist on TC**." ); print "**$1 download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logout of
site $mech->get("https://tehconnection.eu/"); $mech->follow_link(url_regex =>
qr/logout\.php/); return $answer; } ############### #Download subroutine for Libble sub downloadLibble{ my
($downloadID, $torrentDir, $server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://libble.com/login.php"); $mech->submit_form( form_number => 0, fields
=> {username => "$usernameLibble" ,password => "$passwordLibble", } ); my $answer =
1; #actual download command my $response =
$mech->get("http://libble.com/torrents.php?action=download&id=$downloadID"); my $disposition =
$response->{_headers}->{"content-disposition"}; if($disposition =~ /^attachment;
Filename="(.*)"$/) { if(-e "$torrentDir/$1") { if(-e "$torrentDir/$1") { if($server) {
$server->command( "msg $target **$1 already exists."); } } } else {
$mech->save_content("$torrentDir/$1"); if($server) { $server->command( "msg $target **$1
downloaded successfully." ); } print "**$1 downloaded successfully."; print
"-------------------------------------"; } } else { $server->command( "msg $target
**$downloadID does not exist on Libble**." ); print "**$1 download FAILED**"; print
"-------------------------------------"; $answer = 0; } #logout of
site $mech->get("http://libble.com/"); $mech->follow_link(url_regex => qr/logout\.php/); return
$answer; } ############### #Download subroutine for Bit-HDTV sub downloadBitHDTV{ my ($downloadID, $torrentDir,
$server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://www.bit-hdtv.com/login.php"); $mech->submit_form( form_number => 0,
fields => {username => "$usernameBitHDTV", password => "$passwordBitHDTV", } ); my
$answer = 1; $mech->get("http://www.bit-hdtv.com/details.php?id=$downloadID"); if(my $link =
$mech->find_link(url_regex => qr/download\.php\/[0-9]+\/.*?torrent/)) { #bithdtv doesn't perform
content-disposition correctly, grab unicode name from filename instead $mech->get($link); $link->url() =~
qr/download\.php\/[0-9]+\/(.*?torrent)/; if(-e "$torrentDir/$1") { if(-e "$torrentDir/$1") {
if($server) { $server->command( "msg $target **$1 already exists."); } } } else {
$mech->save_content("$torrentDir/$1"); if($server) { $server->command( "msg $target **$1
downloaded successfully." ); } print "**$1 downloaded successfully."; print
"-------------------------------------"; } } else { if($server) { $server->command( "msg
$target **$downloadID does not exist on Bit-HDTV**" ); } print "**$downloadID download
FAILED**"; print "-------------------------------------"; $answer = 0; } #logging out of site
(no auth key to grab) $mech->get("http://www.bit-hdtv.com/logout.php"); return $answer;
} ############### #Download subroutine for TD sub downloadTD{ my ($downloadID, $torrentDir, $server, $target) =
@_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://www.torrent-damage.net/login.php"); $mech->submit_form( form_number => 0,
fields => {username => "$usernameTD", password => "$passwordTD", } ); my $answer =
1; $mech->get("http://www.torrent-damage.net/torrents.php?action=download&id=$downloadID"); if(my
$link = $mech->find_link(url_regex => qr/download\.php\/[0-9]+\/.*?torrent/))
{ $mech->get($link); $link->url =~ /download\.php\/[0-9]+\/(.*?torrent)/; if(-e
"$torrentDir/$1") { if(-e "$torrentDir/$1") { if($server) { $server->command( "msg $target
**$1 already exists."); } } } else { $mech->save_content("$torrentDir/$1"); if($server) {
$server->command( "msg $target **$1 downloaded successfully." ); } print "**$1 downloaded
successfully."; print "-------------------------------------"; } } else { if($server) {
$server->command( "msg $target **$downloadID does not exist on TD**" ); } print "**$downloadID
download FAILED**"; print "-------------------------------------"; $answer = 0; } #logging
out of site $mech->get("http://www.torrent-damage.net/"); $mech->follow_link(url_regex =>
qr/logout\.php/); return $answer; } ############### #Download subroutine for PTN sub downloadPTN{ my
($downloadID, $torrentDir, $server, $target) = @_; my $mech = WWW::Mechanize->new (autocheck => 1); #login to
site $mech->get("http://www.piratethe.net/login10.php"); $mech->submit_form( form_number => 0,
fields => {username => "$usernamePTN", password => "$passwordPTN", } ); my $answer
= 1; $mech->get("http://www.piratethe.net/detailsost.php?id=$downloadID"); if(my $link =
$mech->find_link(url_regex => qr/download.php\/[0-9]+\/(.*torrent)/)) { $mech->get($link);
$link->url =~ qr/download.php\/[0-9]+\/(.*torrent)/; if(-e "$torrentDir/$1") { if(-e
"$torrentDir/$1") { if($server) { $server->command( "msg $target **$1 already exists."); } } }
else { $mech->save_content("$torrentDir/$1"); if($server) { $server->command(
"msg $target **$1 downloaded successfully." ); } print "**$1 downloaded
successfully."; print "-------------------------------------"; } } else {
if($server) { $server->command( "msg $target **$downloadID does not exist on PTN**" ); } print
"**$downloadID download FAILED**"; print "-------------------------------------"; $answer =
0; }
$mech->get("http://www.piratethe.net/logout.php"); } Irssi::signal_add_first("event connected",
"event_connected"); Irssi::signal_add("message invite",
"message_invite"); Irssi::signal_add("channel joined",
"channel_joined"); Irssi::signal_add("event privmsg", "event_privmsg");
Don't email to hereI'm now supporting the experiment spamschlucker.org too :)