All pastes #2073901 Raw Edit

Someone

public text v1 · immutable
#2073901 ·published 2011-06-02 22:50 UTC
rendered paste body
package identify;

use strict;
use warnings;
use POE::Component::IRC qw( :ALL );
use POE::Component::IRC::Plugin qw( :ALL );
use DBI;
use Config::Simple;
use Time::Duration;
my $irc;
my $db = &Trice::get_sql();

my $cfg = new Config::Simple();
$cfg->read('bot.cfg') or die $cfg->error();

# Plugin object constructor
sub new {
    my $package = shift;
    return bless {}, $package;
}

sub PCI_register {
    my ($self, $irc) = splice @_, 0, 2;

    $irc->plugin_register( $self, 'SERVER', qw(msg public) );
    return 1;
}

# This is method is mandatory but we don't actually have anything to do.
sub PCI_unregister {
    return 1;
}

sub S_public {
    my ($self, $irc) = splice @_, 0, 2;

    # Parameters are passed as scalar-refs including arrayrefs.
    my $nick = ( split /!/, ${ $_[0] } )[0];
    my $channel = ${ $_[1] }->[0];
    my $msg = ${ $_[2] };
    $msg = &Trice::strip_formatting(&Trice::strip_color($msg));
    
    if ((lc($channel) eq "#torbot-logfeed") && (lc($nick) eq "torbot")) {
        if ($msg =~ /LOGOUT (.*?) (.*?) :(.*?)/i) {
            my $sql = $db->prepare("UPDATE `users_main` SET `onirc`=0 WHERE `Username`=$2");
            $sql->execute();
        } elsif ($msg =~ /IDENTIFY (\S+).*[;:]([A-Za-z0-9]+)\-([A-Za-z0-9\s]+)\-PWN\-http[s]?:\/\/pwnnetwork\.net/i) {
            my($nickname, $username) = ($1, $2);
            my $sql = $db->prepare("SELECT u.ID, u.Username, u.IRCKey, u.Enabled, p.name, p.Level FROM users_main AS u
            JOIN permissions AS p ON u.PermissionID=p.ID  JOIN users_info AS ui ON ui.UserID=u.ID
            WHERE Username = $username");
            $sql->execute();
            if ($sql->rows > 0) {
                my ($user_id, $username, $irckey, $enabled, $class) = $sql->fetchrow_array();
                if($enabled eq '1'){
                    #$irc->yield(quote => "SAJOIN $nickname ".$cfg->param('#pwn'));
                    my $sql = $db->prepare("UPDATE users_main SET onirc = '1' WHERE Username = ?");
                    $sql->execute($username);
                    if($db->rows()){
                        $irc->yield(notice => $nickname => "IRC Bonus Enabled.");
                    }
                        $irc->yield(privmsg => "#torbot-logfeed" => "IDENTIFIED $nickname AS $username");
                } else {
                    $irc->yield(privmsg => "TorBot" => "idtracker $nick $username PWN * *");
                    $irc->yield(privmsg => $nickname => "Your account is disabled.");
                    #$irc->yield(quote => "SAJOIN $nickname ".$cfg->param('#pwnhelp'));
                }
            }
        }
        return PCI_EAT_ALL;
    }
    return PCI_EAT_NONE;
}

sub S_msg {
    my ($self, $irc) = splice @_, 0, 2;

    # Parameters are passed as scalar-refs including arrayrefs.
    my $nick = ( split /!/, ${ $_[0] } )[0];
    my $channel = ${ $_[1] }->[0];
    my $msg = ${ $_[2] };
    $msg = &Trice::strip_formatting(&Trice::strip_color($msg));
    
    my $nickname = $nick;
    
    #IDENTIFY NEW
    if ($msg =~ /^IDENTIFY/i) {
        if ($msg =~ /^IDENTIFY (.*?) (.*?)/i) {
            my $user = $1;
            my $pass = $2;
            my $sql = $db->prepare("SELECT u.ID, u.Username, u.IRCKey, u.Enabled, p.name, p.Level
            FROM users_main AS u JOIN permissions AS p ON u.PermissionID=p.ID
            JOIN users_info AS ui ON ui.UserID=u.ID
            WHERE Username = $user AND IRCKey = $pass");
            $sql->execute();
            
            if ($sql->rows > 0) {
                my ($user_id, $username, $irckey, $enabled, $class) = $sql->fetchrow_array();
                if($enabled eq '1'){
                    $irc->yield(privmsg => "TorBot" => "idtracker $nickname $username PWN https://pwnnetwork.net/user.php?id=$user_id $class");
                } else {
                    $irc->yield(privmsg => "TorBot" => "idtracker $nick $username PWN * *");
                    $irc->yield(privmsg => $nickname => "Your account is disabled.");
                }
            } else {
                $irc->yield(privmsg => $nick => "Wrong username and/or IRC key");
            }
        } else {
            $irc->yield(privmsg => $nick => "Invalid syntax: Username and IRC key required. Example: /msg ".$cfg->param('irc_nick')." IDENTIFY <username> <irckey>");
        }
        return PCI_EAT_ALL;
    }

    return PCI_EAT_NONE;
}

1;