use strict; use Irssi; use warnings; use LWP::Simple; use vars qw($VERSION %IRSSI $size_min $size_max $size_str $size_rls $passkey $watch_root $release $tmpdir $site $server $msg $nick $address $target $channel $botname $botaddr $torrent $cat $torid $rlsok @section_ok @section_bad %release_ok %watch_dirs @release_bad $dldir $def_dl $section $minfree); $VERSION="0.2"; # %IRSSI = ( # name => 'sct_auto', # authors => 'roto', # contact=> 'roto@irc', # description => 'IRSSI Auto downloader for ScT IRC', # license => 'Public Domain' # ); # # # Put your passkey here, obviously.. # $passkey = "passkey"; # $site = "https://www.eu.scenetorrents.org/"; # $channel = "#scenetorrents"; # $botname = "SceneTorrents"; # $botaddr = 'sct@ScT.bot'; # # # Set this to a value to make sure the torrents always leave at lesat this much space (in megabytes) # $minfree = 1000; # 1gb # # #Enable release size restrictions (in megabytes) # $size_min = 0; # $size_max = 2500; # 2.5gb # # # # Set to your clients auto download/watch root or you can specify the full paths below # $watch_root = "/home/masta/watch/"; # $tmpdir = "/home/masta/tmp/"; mkdir $watch_root; # mkdir $tmpdir; # %watch_dirs = ( def => $watch_root, #set this to a default dir to fallback too # tmpdir => $tmpdir, #used as temporary storage (required) # ); # # Setup release filters only allowing matched names # # The first parameter is used as a key to set the download directory # # # Some very basic examples: # %release_ok = ( def => ['.'], ); # # #Not allowed (-ScT are packs) # @release_bad = ('scat','granny'); # # # Filter to only these sections # # Movies/DVDR, XXX, Music/Videos # @section_ok = ('.'); # Allowed # @section_bad = ('DOX','Music/Videos','Music/MP3','Games/Wii','Games/Xbox 360'); # Not allowed # # ################################################################################################### # # # # # You shouldnt change anything below this unless your feeling adventurous or know wtf your doing! # # # # # ################################################################################################### # # # Download the .torrent # sub fetch { # my $url = $site . 'download.php/' . $torid . '/' . $release . '.torrent?passkey=' . $passkey; # print $url if Irssi::settings_get_bool('debug_enabled'); # if (mirror($url, $watch_dirs{tmpdir}.$release.'.torrent')) # { # my $a = $watch_dirs{tmpdir} . $release.'.torrent'; # my $b = $watch_dirs{$section} . $release.'.torrent'; # unless (rename($a,$b)) # { # Irssi::print("Failed to move temp file: $!",MSGLEVEL_CLIENTERROR); # return 0; # } # return 1; # } # return 0; # } # # # Check if enough space is available # sub check_space # { # my $path = shift; # my @free = split('\s+',`df -Pm $path | tail -n 1`); # Irssi::print("Free space: $free[3]",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # return 1 unless ($minfree + $size_rls > $free[3]); # Irssi::print("There is not enough space left to download $release",MSGLEVEL_CLIENTNOTICE); # return 0; # } # # #Check the release name filters # sub check_rls # { # foreach (@release_bad) # { # Irssi::print($_,MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # return 0 if $release =~ m/($_)/; # } # for my $sec ( keys %release_ok ) # { # foreach (@{$release_ok{$sec}}) # { # Irssi::print("$_",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # if ($release =~ m/($_)/) { # $section = $sec; # Irssi::print("Section set to $section",MSGLEVEL_CLIENTNOTICE); # return 1; # } # } # } # return 0 # } # # #Check the section name filter # sub check_section # { # foreach (@section_bad) # { # Irssi::print($_,MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # return 0 if $cat =~ m/^($_)$/; # } # # foreach (@section_ok) # { # Irssi::print($_,MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # return 1 if $cat =~ m/^($_)$/; # } # return 0; # } # # # Check the size of the release # sub check_size # { # my @s = split('\s',$size_str); # $size_rls = $s[0] if $s[1] eq 'MB'; # $size_rls = $s[0] * 1000 if $s[1] eq 'GB'; # if (Irssi::settings_get_bool('freechk_enabled')) # { # return 0 unless check_space($watch_dirs{$section}); # } # Irssi::print("Size converted to: $size_rls",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # return 1 if ($size_rls > $size_min and $size_rls < $size_max); # return 0; # } # # # Parse channel message for the bots announce # sub parsemsg # { # ($server,$msg,$nick,$address,$target) = @_; # #print "$server,$msg,$nick,$address,$target"; # if (Irssi::settings_get_bool('sct_enabled') and $target eq $channel and $nick eq $botname and $address eq $botaddr) # { # # if ($msg =~ /^Name....:\s(.*)$/) { # $release = $1; # if (Irssi::settings_get_bool('sct_enabled')) # { # if (check_rls()) # { # $rlsok = 1; # Irssi::print(">Set release to: $release",MSGLEVEL_CRAP) ;#if Irssi::settings_get_bool('debug_enabled'); # } # else { # $rlsok = 0; # Irssi::print("Skipped: $release",MSGLEVEL_CRAP) ;#if Irssi::settings_get_bool('debug_enabled'); # } # } # } # if ($rlsok) # { # # Step through each of our requirements if enabled # if ($msg =~ /^Category:\s(.*)$/) # { # $cat = $1; # Irssi::print("->Set cat to: $cat",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # if (Irssi::settings_get_bool('section_enabled')) # { # $rlsok = 0 unless check_section(); # } # } # elsif ($msg =~ /^Size....:\s(.*)$/) { # $size_str = $1; # Irssi::print("-->Set file size to: $size_str",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # if (Irssi::settings_get_bool('size_enabled')) # { # $rlsok = 0 unless check_size(); # } # } # elsif ($msg =~ /^URL.....:.*=(\d+)&/) { # $torid = $1; # Irssi::print("--->Set torrent id to: $torid",MSGLEVEL_CRAP) if Irssi::settings_get_bool('debug_enabled'); # #fetch(); # # if (fetch()) { Irssi::print("---->Downloaded successfully!",MSGLEVEL_CRAP); # } else { Irssi::print("---->Download failed!",MSGLEVEL_CRAP);} # $rlsok = 0; # } # } # } # } # # sub sct_enable # { # print "Enabling ScT AUTO!"; # Irssi::settings_set_bool('sct_enabled', 1); # } # # sub sct_disable # { # print "Disabling ScT AUTO!"; # Irssi::settings_set_bool('sct_enabled', 0); # } # sub rls_enable # { # print "Enabling ScT release name filter!"; # Irssi::settings_set_bool('rls_enabled', 1); # } # sub rls_disable # { # print "Disabling ScT release name filter!"; # Irssi::settings_set_bool('rls_enabled', 0); # } # sub section_enable # { # print "Enabling ScT section filter!"; # Irssi::settings_set_bool('section_enabled', 1); # } # sub section_disable # { # print "Disableing ScT section filter!"; # Irssi::settings_set_bool('section_enabled', 0); # } # sub size_enable # { # print "Enabling ScT size filter!"; # Irssi::settings_set_bool('size_enabled', 1); # } # sub size_disable # { # print "Disableing ScT size filter!"; # Irssi::settings_set_bool('size_enabled', 0); # } # # sub debug_enable # { # print "Enabling ScT debug!"; # Irssi::settings_set_bool('debug_enabled', 1); # } # # sub debug_disable # { # print "Disableing ScT debug!"; # Irssi::settings_set_bool('debug_enabled', 0); # } # # sub freechk_enable # { # print "Enabling ScT free space check!"; # Irssi::settings_set_bool('freechk_enabled', 1); # } # # sub freechk_disable # { # print "Disableing ScT free space check!"; # Irssi::settings_set_bool('freechk_enabled', 0); # } # # sub setup # { # # Im not entirly sure how to do this properly, doesnt work as i would have expected # Irssi::settings_add_bool('sct', 'sct_enabled', 1);# if not defined Irssi::settings_get_bool('sct_enabled'); # Irssi::settings_add_bool('sct', 'rls_enabled', 1);# if not defined Irssi::settings_get_bool('rls_enabled'); # Irssi::settings_add_bool('sct', 'section_enabled', 1);# if not defined Irssi::settings_get_bool('section_enabled'); # Irssi::settings_add_bool('sct', 'size_enabled', 0);# if not defined Irssi::settings_get_bool('size_enabled'); # Irssi::settings_add_bool('sct', 'debug_enabled', 0);# if not defined Irssi::settings_get_bool('size_enabled'); # Irssi::settings_add_bool('sct', 'freechk_enabled', 1);# if not defined Irssi::settings_get_bool('size_enabled'); # } # sub header { # Irssi::print("======================================================================", MSGLEVEL_CRAP); # Irssi::print("| ScT Auto downloader by roto, loosly based off of engywook's dler |", MSGLEVEL_CRAP); # Irssi::print("| Version $VERSION |", MSGLEVEL_CRAP); # Irssi::print("======================================================================", MSGLEVEL_CRAP); # } # sub sct_help # { # header(); # Irssi::print("/sct_help This message obvously :)", MSGLEVEL_CRAP); # Irssi::print("/sct_setup Initialize the config with default values (only required once)", MSGLEVEL_CRAP); # Irssi::print("/sct_enable Enable the sct auto downloader", MSGLEVEL_CRAP); # Irssi::print("/sct_disable Disable the sct auto downloader", MSGLEVEL_CRAP); # Irssi::print("/sct_rls_enable Enable the release name filter", MSGLEVEL_CRAP); # Irssi::print("/sct_rls_disable Disable the release name filter", MSGLEVEL_CRAP); # Irssi::print("/sct_section_enable Enable the section filter", MSGLEVEL_CRAP); # Irssi::print("/sct_section_disable Disable the section filter", MSGLEVEL_CRAP); # Irssi::print("/sct_size_enable Enable the size filter", MSGLEVEL_CRAP); # Irssi::print("/sct_size_disable Disable the size filter", MSGLEVEL_CRAP); # Irssi::print("/sct_freechk_enable Enable sct freespace check", MSGLEVEL_CRAP); # Irssi::print("/sct_freechk_disable Disable sct freespace check", MSGLEVEL_CRAP); # Irssi::print("/sct_debug_enable Enable sct debug output", MSGLEVEL_CRAP); # Irssi::print("/sct_debug_disable Disable sct debug output", MSGLEVEL_CRAP); # } # # Irssi::signal_add("message public", \&parsemsg); # Irssi::command_bind sct_help => \&sct_help; # Irssi::command_bind sct_setup => \&setup; # Irssi::command_bind sct_disable => \&sct_disable; # Irssi::command_bind sct_enable => \&sct_enable; # Irssi::command_bind sct_rls_disable => \&rls_disable; # Irssi::command_bind sct_rls_enable => \&rls_enable; # Irssi::command_bind sct_section_disable => \§ion_disable; # Irssi::command_bind sct_section_enable => \§ion_enable; # Irssi::command_bind sct_size_disable => \&size_disable; # Irssi::command_bind sct_size_enable => \&size_enable; # Irssi::command_bind sct_freechk_disable => \&freechk_disable; # Irssi::command_bind sct_freechk_enable => \&freechk_enable; # Irssi::command_bind sct_debug_disable => \&debug_disable; # Irssi::command_bind sct_debug_enable => \&debug_enable; # # #Initialize # setup(); # header();