X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ndawn.pl;h=a14ee36fe319bef16eaaeb34b7eda5d8c3e5acf3;hb=921132036eac2233472b1b315e4ee39f5ab17fbd;hp=e1b08a59eb21e5b930557c38882174da8064fa06;hpb=e8c94cdebefdc428ea92fde6db63f18d3e8399b2;p=NDIRC.git diff --git a/ndawn.pl b/ndawn.pl index e1b08a5..a14ee36 100755 --- a/ndawn.pl +++ b/ndawn.pl @@ -24,145 +24,27 @@ use warnings; use feature ':5.10'; use POE qw(Component::IRC::Qnet::State); -use POE::Component::IRC::Plugin::Logger; -use POE::Component::IRC::Plugin::BotTraffic; -use POE::Component::IRC::Plugin::Connector; -use POE::Component::IRC::Plugin::DCC; +eval "require NDIRC::$ARGV[0]"; -use ND::DB; -use ND::Include; -use NDIRC::Dispatcher; -use NDIRC::Context; -use NDIRC::Command; -use NDIRC::Misc; -use NDIRC::CommonStates; - -my $nickname = 'ndbot'; -my $ircname = 'ND test bot'; -my $server = 'irc.netgamers.org'; +die $@ if $@; # We create a new PoCo-IRC object my $irc = POE::Component::IRC::Qnet::State->spawn( - nick => $nickname, - ircname => $ircname, - server => $server, - servers => [$server, 'underworld.no.eu.netgamers.org', ] + nick => $ARGV[0], + ircname => 'ND bot', ) or die "Oh noooo! $!"; $irc->service_bots(QBOT => 'P@cservice.netgamers.org'); -$irc->plugin_add( 'BotTraffic', POE::Component::IRC::Plugin::BotTraffic->new() ); -$irc->plugin_add( 'DCC', POE::Component::IRC::Plugin::DCC->new() ); -$irc->plugin_add('Logger', POE::Component::IRC::Plugin::Logger->new( - Path => 'irclogs', - DCC => 0, - Private => 1, - Public => 1, - Sort_by_date => 1, - Strip_color => 1, - Strip_formatting => 1, -)); - -my $DBH = DB(); -my $TICK = $DBH->selectrow_array('SELECT tick()'); - -$ND::scanchan = '#testarmer'; -$ND::defchan = '#testarlite'; -$ND::memchan = '#testarmer'; +my $bot = eval "new NDIRC::$ARGV[0]"; POE::Session->create( - package_states => [ - 'NDIRC::CommonStates' => [ qw(_default _start irc_001 sig_DIE signal_handler irc_disconnected irc_invite) ], - main => [ qw(irc_public irc_msg refresh sig_usr2 irc_join) ], + object_states => [ + $bot => [ qw(_default _start irc_001 sig_DIE sig_usr1 sig_usr2 + signal_handler irc_disconnected irc_invite auth + irc_public irc_msg refresh irc_join) ], ], - heap => { irc => $irc}, + heap => { irc => $irc }, ); $poe_kernel->run(); - - -sub sig_usr2 { - my $heap = $_[HEAP]; - - my $disp = new NDIRC::Dispatcher; - - $disp->load(qw/Basic SMS Channel Def Intel Members PA Quotes Usermgm/); - - open CHANNELS, 'channels'; - while (){ - print; - my ($chan, @types) = split /\s+/; - say "$chan - @types"; - $disp->add_channel($chan,\@types); - } - close CHANNELS; - - $heap->{disp} = $disp; -} - - -sub irc_public { - my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; - my ($nick,$username,$address) = ( split /[!@]/, $who ); - my $channel = $where->[0]; - - my $irc = $sender->get_heap(); - - #$irc->yield(privmsg => $channel, "Authed? " . $irc->is_nick_authed($nick)); - - if ($msg =~ /^(\S+): (.+)$/ && $heap->{disp}->has_command('anon',$channel)){ - my $_ = $1; - my $text = $2; - unless ($irc->is_channel_member($channel,$1) || /(Constructing|Researching)/){ - $msg = ".anon $_ $text"; - } - - } - if (parseCommand($msg,$irc,$nick,$address,$channel,$heap->{disp},DB())){ - #Command parsed and run successfully - } -} - - -sub irc_msg { - my ($sender, $heap, $who, $where, $msg) = @_[SENDER, HEAP, ARG0 .. ARG2]; - my ($nick,$username,$address) = ( split /[!@]/, $who ); - my $irc = $sender->get_heap(); - - if (parseCommand($msg,$irc,$nick,$address,'pm',$heap->{disp},DB())){ - #Command parsed and run successfully - } -} - -sub irc_join { - my ($sender, $heap, $who, $channel) = @_[SENDER, HEAP, ARG0 .. ARG1]; - my ($nick,$username,$address) = ( split /[!@]/, $who ); - my $irc = $sender->get_heap(); - - if($heap->{disp}->has_command('voice',$channel)){ - my $dbh = DB(); - my $flags = $dbh->prepare_cached(q{ -SELECT DISTINCT flag -FROM users u - JOIN groupmembers g USING (uid) - JOIN channel_group_flags gf USING (gid) -WHERE u.hostmask = $1 AND channel = $2 AND flag IN ('o','v'); - }); - $flags->execute($address, $channel); - my $mode = ''; - my @who; - while (my ($flag) = $flags->fetchrow()){ - $mode .= $flag; - push @who, $nick; - } - say "$mode - @who"; - $irc->yield(mode => $channel, $mode, @who) if $mode; - } -} - -sub refresh { - my ($kernel,$heap) = @_[KERNEL,HEAP]; - print 'Time: ' . time() . ' Lag: ' . $heap->{connector}->lag() . "\n"; - $kernel->delay( refresh => 60 ); - return; -}