I have dropped by at #poe, but they didn't know either. below is the main file I hope it gets through as it should... The try function is called in the irc::irc_public() function
This is the third version I'm building of ReaperBot. The first one could only do one thing at a time. Then I build the second one, which uses forking, but sometimes the database gets fucked up cause different processes read/write the same file, so here I am, writing it in POE and got stuck :( thanks Bart ------------------------------------------------------------------------ #!/usr/bin/perl -w use strict; use POE qw (Session Component::IRC); use Time::HiRes qw (gettimeofday); use try; my $nickname = 'ReaprBot2'; my $username = 'ReaperBot'; my $ircname = 'ReaperBot, by daReaper'; my $server = 'irc.scholieren.com'; my $port = 6667; my $channel = '#ftp4RB'; our @database; my @leeches; readDB(); sub irc::_start { my ($kernel, $object) = @_[KERNEL, OBJECT]; $kernel->post('irc', 'register', 'all'); $kernel->post('irc', 'connect', { Debug => 1, Nick => $nickname, Server => $server, Port => $port, Username => $username, Ircname => $ircname, } ); } sub irc::irc_001 { my $kernel = $_[KERNEL]; $kernel->post('irc', 'join', "$channel"); } sub irc::irc_connect { print "Connected to server\n"; } sub irc::irc_public { my ($kernel, $who, $chan, $msg) = @_[KERNEL, ARG0 .. ARG2]; if ($msg =~ /^\[#?FTP4Warez\]/i) { addAd($kernel, $msg, $who); } if ($msg =~ /\@try ?(.+)?/i) { if ($1) { try->try($kernel, $1, $who); } } } POE::Component::IRC->new('irc') or die "noooo! $!\n"; POE::Session->new('irc' => [qw(_start irc_001 irc_public irc_connect)]); $poe_kernel->run(); sub readDB { open (DATABASE, "ftp4db.txt"); my $counter = 0; while (<DATABASE>) { chomp; my @entry = split (/\t/); for (my $x = 0; $x < @entry; $x++) { $database[$counter][$x] = $entry[$x]; } $counter ++; } close DATABASE; } sub writeDB { open (DATABASE, ">ftp4db.txt"); for (my $x = 0; $x < @database; $x++) { for (my $y = 0; $y < @{$database[$x]}; $y++) { print DATABASE "$database[$x][$y]\t"; } print DATABASE "\n"; } close (DATABASE); } sub addAd { my ($kernel, $msg, $who) = @_; my ($nick, $ident, $host) = split(/!|@/, $who); my @ftpsite; while ($msg =~ /]]+/) { $msg =~ s/]]+/]/; } while ($msg =~ /\[\[+/) { $msg =~ s/\[\[+/\[/; } while ($msg) { if ($msg =~ s/[^[]*\[([^\]]*)\]//) { push @ftpsite, $1; } else { $msg =~ s/ ?\[?//; push @ftpsite, $msg; $msg = ""; } } my %ftp = getInfo(@ftpsite); if ($ftp{download}[0] && $ftp{look}[0] && $ftp{address} && $ftp{port}) { if (!$ftp{request}) { $ftp{request} = "-" } if (!$ftp{other}) { $ftp{other} = "-" } if (!$ftp{upload}) { $ftp{upload}[0] = "-"; $ftp{upload}[1] = "-" } $ftp{owner} = $nick; insertDB(%ftp); } } sub getInfo { my @ftpsite = @_; my %info; my $counter = 0; shift @ftpsite; foreach(@ftpsite) { if ($counter == 0) { $info{name} = $_; } elsif (/^(port(:)?( )?)?(\d*)$/i) { $info{port} = $4; } elsif (/^(([^ ]*)|({?your nick}?))\/(([^ ]*)|({?your nick}?))$/i) { my $user = $1; my $pass = $4; if ($user =~ /upload/i || $pass =~ /upload/i) { $info{upload}[0] = $user; $info{upload}[1] = $pass; } elsif ($user =~ /look|browse/i || $pass =~ /look|browse/i) { $info{look}[0] = $user; $info{look}[1] = $pass; } elsif (!$info{download}[0]) { $info{download}[0] = $user; $info{download}[1] = $pass; } } elsif (/^(ip:[ ]?)?(.+\..+\..+[\..+]*)$/i && !$info{address}) { $info{address} = $2; } elsif (/^req(uest)?(ing)?(s)?(:)?\s*(.*)/i) { $info{request} = $5; } elsif (!$info{other}) { $info{other} = $_; } $counter++; } return %info; } sub getAdByName { my ($name) = @_; for (my $x = 0; $x < scalar(@database); $x++) { if ($database[$x][0] eq $name) { return $x; } } return -1; } sub getAdByOwner { my ($owner) = @_; for (my $x = 0; $x < $#database; $x++) { if ($database[$x][1] eq $owner) { return $x; } } return -1; } sub insertDB { my (%info) = @_; # 0. Name 1. Owner my @ftpsite = ( $info{name}, $info{owner}, # 2. IP 3. Port $info{address}, $info{port}, # 4. Download User 5. Download Pass $info{download}[0], $info{download}[1], # 7. Upload User 7. Upload Pass $info{upload}[0], $info{upload}[1], # 8. Look User 9. Look Pass $info{look}[0], $info{look}[1], # 10. Requests 11. Other $info{request}, $info{other}, # 12. Status 13. Last Check "NOCHK", "0", # 14. Last time ad seen 15. Last login time, "0", # 16. Login OK ? 17. Total FTP Size "0", "0", ); if (getAdByName($info{name}) == -1) { push (@database, [@ftpsite]); } else { my $ad = getAdByName($info{name}); foreach(12, 13, 15, 16, 17) { $ftpsite[$_] = $database[$ad][$_]; } $ftpsite[14] = time; $database[$ad] = [@ftpsite]; } writeDB(); } ------------------------------------------------------------------------ Erick Calder wrote: > grr.. I keep hitting "reply" and I keep getting the messages bounced back to > me. > > you should post the code so we know what you're doing. I suggest you drop > by #poe on EFNET or feel free to contact me on AIM/YM: svekkis or ICQ > 1005378