X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FProcess.pl;h=aea3e1e5561795852b72d733b428e3652fe0876c;hb=fc4f9d45199c0da42170e40d445ab204018f0e98;hp=d4473b414dd98c44ebea2723a5a411f740f231d3;hpb=45ba7270eabca3ce9467bb7a1f52ce714f9d1a77;p=infobot.git diff --git a/src/Process.pl b/src/Process.pl index d4473b4..aea3e1e 100644 --- a/src/Process.pl +++ b/src/Process.pl @@ -6,7 +6,13 @@ # process the incoming message # -#use strict; +use strict; + +use vars qw($who $msgType $addressed $message $ident $user $host $chan + $learnok $talkok $force_public_reply $noreply $addrchar + $literal $addressedother $userHandle $lobotomized); +use vars qw(%channels %users %param %cache %chanconf %mask %orig %lang + ); sub process { $learnok = 0; # Able to learn? @@ -18,7 +24,12 @@ sub process { return 'addressedother set' if ($addressedother); $talkok = ($param{'addressing'} =~ /^OPTIONAL$/i or $addressed); - $learnok = ($param{'learn'} =~ /^HUNGRY$/i or $addressed); + $learnok = 1 if ($addressed); + if ($param{'learn'} =~ /^HUNGRY$/i) { + $learnok = 1; + $addressed = 1; + $talkok = 1; + } &shmFlush(); # hack. @@ -27,7 +38,6 @@ sub process { # is $who arg lowercase? if (exists $channels{$chan}{o}{ $orig{who} } && &IsFlag("O") eq "O") { &status("Gave $who/$chan +o (+O)\'ness"); - $users{$userHandle}{FLAGS} =~ s/o//g; $users{$userHandle}{FLAGS} .= "o"; } @@ -38,7 +48,7 @@ sub process { &msg($who, "give me an unlobotomy.") if ($delta_time > 60*60); $cache{lobotomy}{$who} = time(); } - return 'LOBOTOMY'; + return 'LOBOTOMY' unless IsFlag("A"); } # talkMethod. @@ -65,6 +75,11 @@ sub process { return; } + if ($thischan !~ /^$mask{chan}$/) { + &msg($who, "$thischan is not a valid channel name."); + return; + } + if (&IsFlag("o") ne "o") { if (!exists $chanconf{$thischan}) { &msg($who, "I am not allowed to join $thischan."); @@ -72,8 +87,7 @@ sub process { } if (&validChan($thischan)) { - &msg($who,"warn: I'm already on $thischan, joining anyway..."); -# return; + &msg($who,"warn: I'm already on $thischan, joining anyway..."); } } $cache{join}{$thischan} = $who; # used for on_join self. @@ -143,7 +157,7 @@ sub process { return; } - # todo: use &getUser()? + # TODO: use &getUser()? my $first = 1; foreach (keys %users) { if ($users{$_}{FLAGS} =~ /n/) { @@ -191,6 +205,8 @@ sub process { my $found = 0; foreach (keys %channels) { + # don't test for $channel{_default} elsewhere !!! + next if (/^\s*$/ || /^_?default$/); next unless (&IsNickInChan($who,$_)); $found++; @@ -255,10 +271,8 @@ sub process { # greetings. if ($message =~ /how (the hell )?are (ya|you)( doin\'?g?)?\?*$/) { - my $reply = &getRandom(keys %{ $lang{'howareyou'} }); - &performReply($reply); - + &performReply(&getRandom(keys %{ $lang{'howareyou'} })); return; } @@ -268,11 +282,7 @@ sub process { { return 'praise: no addr' unless ($addressed); - &status("random praise detected"); - - my $tmp = (rand() < 0.5) ? "thanks $who " : ""; - &pSReply($tmp.":)"); - + &performReply(&getRandom(keys %{ $lang{'praise'} })); return; } @@ -289,33 +299,31 @@ sub process { ### # karma. set... - if ($message =~ /^(\S+)(--|\+\+)\s*$/ and $addressed) { - return '' unless (&hasParam("karma")); - - my($term,$inc) = (lc $1,$2); - - if ($msgType !~ /public/i) { - &msg($who, "karma must be done in public!"); - return; - } + if ($msgType =~ /public/i && $message =~ /^(\S+)(--|\+\+)\s*$/ && + $addressed && &hasParam("karma") + ) { + # to request factoids such as "g++" or "libstdc++", append "?" to the query. + my ($term,$inc) = (lc $1,$2); if (lc $term eq lc $who) { &msg($who, "please don't karma yourself"); return; } - my $karma = &dbGet("stats", "counter", "nick=".&dbQuote($term). - " AND type='karma'") || 0; + my $karma = &sqlSelect("stats", "counter", + { nick => $term, type => "karma" }) || 0; if ($inc eq '++') { $karma++; } else { $karma--; } - &dbSet("stats", - { nick => $term, type => "karma" }, - { counter => $karma } - ); + &sqlReplace("stats", { + nick => $term, + type => "karma", + 'time' => time(), + counter => $karma, + } ); return; } @@ -332,13 +340,22 @@ sub process { return 'SOMETHING 1'; } + # allow administration of bot via messages (default is DCC CHAT only) + if (&IsFlag("A")) { + &loadMyModule( $myModules{'ircdcc'} ); + $er = &userDCC(); + if (!defined $er) { + return 'SOMETHING 2'; + } + } + if (0 and $addrchar) { &msg($who, "I don't trust people to use the core commands while addressing me in a short-cut way."); return; } } - if (&IsParam("factoids") and $param{'DBType'} =~ /^(mysql|sqlite|pgsql|dbm)/i) { + if (&IsParam("factoids") and $param{'DBType'} =~ /^(mysql|sqlite|pgsql)/i) { &FactoidStuff(); } elsif ($param{'DBType'} =~ /^none$/i) { return "NO FACTOIDS.";