#!/usr/bin/perl -w
use strict;
use POE qw(Component::IRC Component::IRC::Plugin::Connector);
use POE::Component::IRC::State;
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
# my ($con0day,$conmp3,$contv,$conxvid,$conxxx,$conscr,$conapps) = (1,1,1,1,1,1,0);
my %conf;
$conf{"0DAY"} = 1;
$conf{"MP3"} = 1;
$conf{"TV"} = 1;
$conf{"XVID"} = 1;
$conf{"XXX"} = 1;
$conf{"SCR"} = 1;
$conf{"APPS"} = 0;
my $times;
my %rotator;
my $irc = POE::Component::IRC->spawn();
POE::Session->create(
inline_states => {
_start => \&_start,
irc_001 => \&on_connect,
irc_public => \&on_public,
irc_invite => \&on_invite,
},
package_states => [
'main' => [ qw(_start lag_o_meter) ],
],
heap => { irc => $irc },
);
sub lag_o_meter {
my ($kernel,$heap) = @_[KERNEL,HEAP];
$kernel->delay( 'lag_o_meter' => 120 );
undef;
}
sub _start {
my $kernel = $_[KERNEL];
my $heap = $_[HEAP];
my $session = $_[SESSION];
$irc->yield( register => "all" );
$heap->{connector} = POE::Component::IRC::Plugin::Connector->new();
$irc->plugin_add( 'Connector' => $heap->{connector} );
$irc->yield( connect =>
{ Nick => "lfor",
Server => "irc.p2p-network.net",
Port => "6667",
UseSSL => "0",
Username => "SQP",
Ircname => "SQP",
Flood => "1",
Debug => "0",
}
);
$kernel->delay( 'lag_o_meter' => 120 );
undef;
}
sub on_invite {
my ($invitechan) = $_[ARG1];
if ($invitechan eq '#ht') { $irc->yield(join => "#ht"); }
if ($invitechan eq '#htlottery') { $irc->yield(join => "#htlottery"); }
}
sub on_connect {
$irc->yield( privmsg => NickServ => "identify raceme" );
$irc->yield( privmsg => ChanServ => "invite #ht.spam");
$irc->yield( privmsg => ChanServ => "invite #htlottery");
}
sub log {
my ($event) = shift;
my $time = localtime();
my $log = 'trader.log';
open LOG, ">>", "$log" or print "$!\n";
print LOG "$time -> $event\n";
close LOG;
}
sub cc {
my ($rel,$sec) = @_;
if ($sec eq '0DAY') { if ($conf{"0DAY"} == 1) { return 1; }}
elsif ($sec eq 'APPS') { if ($conf{"APPS"} == 1) { return 1; }}
elsif ($sec eq 'MP3') { if ($conf{"MP3"} == 1) {
if ($rel !~ /_iNT|iNTERNAL|CABLE|SAT|DAB|DVB|TAPE|MIXTAPE|RADIO|DAT|DEMO|SBD|LINE|FM|AUDIOBOOK|x264|DVDRip/) { return 1; }
else { return 0; }
}}
elsif ($sec eq 'TV') { if ($conf{"TV"} == 1) {
if ($rel !~ /x264|Blu[R|r]ay|DVDRip|iNTERNAL|720p|iTALiAN|SPANISH/) {
if ($rel =~ /Prison\.Break/) { return 1; }
elsif ($rel =~ /Lost/) { return 1; }
elsif ($rel =~ /Smallville/) { return 1; }
elsif ($rel =~ /Lost/) { return 1; }
elsif ($rel =~ /CSI/) { return 1; }
elsif ($rel =~ /Scrubs/) { return 1; }
elsif ($rel =~ /House/) { return 1; }
elsif ($rel =~ /Greys\.Anatomy/) { return 1; }
elsif ($rel =~ /Reaper/) { return 1; }
elsif ($rel =~ /Kyle\.XY/) { return 1; }
elsif ($rel =~ /Medium/) { return 1; }
elsif ($rel =~ /Gossip\.Girl/) { return 1; }
elsif ($rel =~ /One\.Tree\.Hill/) { return 1; }
elsif ($rel =~ /Bones/) { return 1; }
elsif ($rel =~ /How\.I\.Met\.Your\.Mother/) { return 1; }
elsif ($rel =~ /The\.Simpsons/) { return 1; }
elsif ($rel =~ /The\.Family\.Guy/) { return 1; }
elsif ($rel =~ /Desperate\.Housewives/) { return 1; }
elsif ($rel =~ /The\.Tudors/) { return 1; }
elsif ($rel =~ /Numb3rs/) { return 1; }
elsif ($rel =~ /Battlestar\.Galactica/) { return 1; }
elsif ($rel =~ /My\.Name\.Is\.Earl/) { return 1; }
elsif ($rel =~ /Cold\.Case/) { return 1; }
elsif ($rel =~ /Ghost\.Whisperer/) { return 1; }
elsif ($rel =~ /American\.Dad/) { return 1; }
elsif ($rel =~ /Greek/) { return 1; }
else { return 0; }
}
else { return 0; }}}
elsif ($sec eq 'XVID') { if ($conf{"XVID"} == 1) {
if ($rel !~ /VHS|Docu|German|GERMAN|SUBBED|STV|Musical|KOR|[F|f][R|r][E|e][N|n][C|c][H|h]|[I|i]NTERNAL|PORTUGUESE|SWED[i|I]SH|SUBFRENCH|[I|i]TAL[I|i]AN|NORWEG[I|i]AN|iNT|720p|x264|TEASER|SPAN[i|I]SH|Live|199.\.DVDRip|FLEM[I|i]SH|Hungarian|S\d\d/) {
if ($rel =~ /Larceny|DiAMOND|iMBT|EPiC|MoH|PUKKA|FLAiTE|NeDiVx|SAPHiRE|BaLD|KiDDoS|SATIVA|TRVE|SUNSPOT|RESERVED|/) {
return 1; }
}
else { return 0; }
}}
elsif ($sec eq 'XXX') { if ($conf{"XXX"} == 1) {
if ($rel =~ /DivXfacTory|Pr0nStarS|PORNOLATiON|DFA|TESORO/) { return 1; }
else { return 0; }
}}
else { return 0; }
}
sub on_public {
my ($who, $where, $what) = @_[ARG0, ARG1, ARG2];
print "$who $where->[0] $what\n";
if (($what =~ /PRE (.*) (.*)/) && ($where->[0] eq '#ht.spam')) {
print $1,$2,"\n";
my $sec = $1; my $rel = $2; my $more = 3;
&check1($sec,$rel,$more);
}
elsif ($where->[0] eq '#htlottery') {
if ($what =~ /^!status/) {
foreach (keys %conf) {
if ($conf{$_} == 1) { $irc->yield(privmsg => '#htlottery' => "[$_] => [1]"); }
else { $irc->yield(privmsg => '#htlottery' => "[$_] => [0]"); }
}
}
elsif ($what =~ /^!help/) {
$irc->yield(privmsg => '#htlottery' => "\cC5!status\cC");
$irc->yield(privmsg => '#htlottery' => "\cC5!off SEKCJA");
$irc->yield(privmsg => '#htlottery' => "\cC5!on SEKCJA");
}
elsif ($what =~ /^!off (.*)/) {
if ((defined $conf{$1}) && ($conf{$1} == 1)) { $conf{$1} = 0; $irc->yield(privmsg => '#htlottery' => "$1 zostalo wylaczone"); }
else {
if (defined $conf{$1}) { $irc->yield(privmsg => '#htlottery' => "$1 jest wylaczone"); }
else { $irc->yield(privmsg => '#htlottery' => "Podaj prawidlowa sekcje"); }
}
}
elsif ($what =~ /^!on (.*)/) {
if ((defined $conf{$1}) && ($conf{$1} == 0)) { $conf{$1} = 1; $irc->yield(privmsg => '#htlottery' => "$1 zostalo wlaczone"); }
else {
if (defined $conf{$1}) { $irc->yield(privmsg => '#htlottery' => "$1 jest wlaczone"); }
else { $irc->yield(privmsg => '#htlottery' => "Podaj prawidlowa sekcje"); }
}
}
}
}
sub check1 {
my ($sec,$rel,$more) = @_;
if ((&cc($rel,$sec) == 1) && ($more == 3)) {
if (($sec eq 'MP3') || ($sec eq '0DAY') || ($sec eq 'TV') || ($sec eq 'APPS')) {
&log("Sprawdzam czy jest 100% `$rel` w sekcji `$sec` || $rotator{$rel}");
&check($sec,$rel);
}
elsif (($sec eq 'XXX') || ($sec eq 'XVID')) {
&log("Sprawdzam czy jest 100% `$rel` w sekcji `$sec` || $rotator{$rel}");
&checkxvid($sec,$rel);
}
}
elsif ((&cc($rel,$sec) == 1) && ($more == 1)) {
if (($sec eq 'XXX') || ($sec eq 'XVID')) {
&log("Sprawdzam czy jest 100% `$rel` w sekcji `$sec` || $rotator{$rel}");
&checkxvid($sec,$rel);
}
}
elsif ((&cc($rel,$sec) == 1) && ($more == 0)) {
if (($sec eq 'MP3') || ($sec eq '0DAY') || ($sec eq 'TV') || ($sec eq 'APPS')) {
&log("Sprawdzam czy jest 100% `$rel` w sekcji `$sec` || $rotator{$rel}");
&check($sec,$rel);
}
}
}
sub check {
my ($sec,$rel) = @_;
my $exist;
my $dontrace = 0;
my $more = 0;
if ($sec eq '0DAY') {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" S0DAY'`;
$times = 10;
}
elsif ($sec eq 'MP3') {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SMP3'`;
$times = 10;
}
elsif ($sec eq 'TV') {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" STV'`;
$times = 15;
}
elsif (($sec eq 'XVID') && ($rel !~ /R5|DVDSCR|SCREENER|SCR|TS|TC|CAM/)) {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SMOVIESX'`;
$times = 15;
}
elsif ($sec eq 'XXX') {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SXXX'`;
$times = 15;
}
elsif (($sec eq 'XVID') && ($rel =~ /R5|DVDSCR|SCREENER|SCR|TS|TC|CAM/)) {
$exist = `lftp -c 'open -e "ls $rel | grep \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SSCR'`;
$times = 15;
}
chomp($exist);
if ($exist == 1) {
$irc->yield(privmsg => '#htlottery' => "Race: \cC5`$rel`\cC \cB`$sec`\cB");
&trade($sec,$rel);
if (defined $rotator{"$rel"}) { delete $rotator{"$rel"}; &log("Skasowano z rotatora `$rel`"); }
$dontrace = 1;
}
else {
&rotate($times,$rel,$sec,$dontrace,$more);
}
}
sub rotate {
my ($times,$rel,$sec,$dontrace,$more) = @_;
if ($dontrace == 0) {
if (!defined $rotator{"$rel"}) { $rotator{"$rel"} = 0; }
if (defined $rotator{"$rel"}) {
$rotator{"$rel"}++;
unless ($rotator{$rel} >= $times) { &check1($sec,$rel,$more); }
}
if ($rotator{"rel"} >= $times) { delete $rotator{"$rel"}; &log("Skasowano z rotatora `$rel`"); }
}
}
sub checkxvid {
my ($sec,$rel) = @_;
my ($exist,$exist1,$more) = 0;
my $dontrace = 0;
if (($sec eq 'XVID') && ($rel !~ /R5|DVDSCR|SCREENER|SCR|TS|TC|CAM/)) {
$times = 15;
$exist = `lftp -c 'open -e "ls $rel | grep -i \'CD\.\' | wc -l" SMOVIESX'`;
chomp($exist);
$exist1 = `lftp -c 'open -e "find $rel | grep -i \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SMOVIESX'`;
chomp($exist1);
}
elsif ($sec eq 'XXX') {
$times = 15;
$exist = `lftp -c 'open -e "ls $rel | grep -i \'CD\.\' | wc -l" SXXX'`;
chomp($exist);
$exist1 = `lftp -c 'open -e "find $rel | grep -i \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SXXX'`;
chomp($exist1);
}
elsif (($sec eq 'XVID') && ($rel =~ /R5|DVDSCR|SCREENER|SCR|TS|TC|CAM/)) {
$times = 15;
$exist = `lftp -c 'open -e "ls $rel | grep -i \'CD\.\' | wc -l" SSCR'`;
chomp($exist);
$exist1 = `lftp -c 'open -e "find $rel | grep -i \'SPeeDeR\' | grep -i \'COMPLETE\' | wc -l" SSCR'`;
chomp($exist1);
}
if (($exist == 0) && ($exist1 == 1)) {
&check($sec,$rel);
}
else {
if (($exist1 ne '') && ($exist == $exist1)) {
$more = 1;
$irc->yield(privmsg => '#htlottery' => "Race: \cC5`$rel`\cC \cB`$sec`\cB");
&trade($sec,$rel);
if (defined $rotator{"$rel"}) { delete $rotator{"$rel"}; &log("Skasowano z rotatora `$rel`"); }
$dontrace = 1;
}
else {$more = 3; &rotate($times,$rel,$sec,$dontrace,$more); }
}
}
sub trade {
my ($sec,$rel) = @_;
my $retry = 0;
my $leave = 0;
do {
if ($leave < 1) {
print BOLD GREEN "Zamierzam przerzucać `$rel` `$sec`\n";
&log("Zamierzam przerzucac `$rel` z sekcji `$sec`");
}
$leave++;
if ($sec eq '0DAY') {
system("lftp -c 'open -e \"mirror -c -vvv --loop --only-missing $rel ftp://ms:dwaraz\91.21.155.112:27461/0DAY/\" S0DAY'");
my $check = `lftp -c 'open -e \"ls 0DAY/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
elsif ($sec eq 'MP3') {
system("lftp -c 'open -e \"mirror -c -vvv --loop --only-missing $rel ftp://ms:1337killler\91.121.155.192:27461/MP3-EN/\" SMP3'");
my $check = `lftp -c 'open -e \"ls MP3-EN/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
elsif ($sec eq 'TV') {
system("lftp -c 'open -e \" mirror -c -vvv --loop --only-missing $rel ftp://ms:dwaraz\91.121.155.912:27461/TV-EN/\" STV'");
my $check = `lftp -c 'open -e \"ls TV-EN/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
elsif (($sec eq 'XVID') && ($rel !~ /R5|SCREENER|DVDSCR|SCR|TS|TC|CAM/)) {
system("lftp -c 'open -e \" mirror -c -vvv --loop --only-missing $rel ftp://ms:dwaraz\91.121.165.112:27461/XVID-EN/\" SMOVIESX'");
my $check = `lftp -c 'open -e \"find XVID-EN/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
elsif ($sec eq 'XXX') {
system("lftp -c 'open -e \" mirror -c -vvv --loop --only-missing $rel ftp://ms:dwaraz\91.121.255.112:27461/XXX/\" SXXX'");
my $check = `lftp -c 'open -e \"find XXX/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
elsif (($sec eq 'XVID') && ($rel =~ /R5|SCREENER|DVDSCR|SCR|TS|TC|CAM/)) {
system("lftp -c 'open -e \" mirror -c -vvv --loop --only-missing $rel ftp://ms:raz\91.121.115.112:27461/XVID-EN/\" SSCR'");
my $check = `lftp -c 'open -e \"find XVID-EN/$rel | grep \'COMPLETE\' | grep \'FTA\' | wc -l" NUE'`;
chomp($check);
if ($check != 0) { $retry = 1; }
}
else { $retry = 1; }
} while (($retry == 0) && ($leave <= 20));
unless ($leave >= 20) {
print BOLD GREEN "Przerzucilem `$rel` `$sec`\n";
&log("Przerzucilem `$rel` `$sec`\n");
}
}
$poe_kernel->run();