]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Process.pl
join channel with key
[infobot.git] / src / Process.pl
index d4473b414dd98c44ebea2723a5a411f740f231d3..b2f5d61d25ab4a1dcf538b6a838f6bcc15a951f2 100644 (file)
@@ -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.
@@ -55,32 +65,34 @@ sub process {
     if ($message =~ /^join(\s+(.*))?\s*$/i) {
        return 'join: not addr' unless ($addressed);
 
-       $2 =~ /^($mask{chan})(,(\S+))?/;
-       my($thischan, $key) = (lc $1, $3);
-       my $chankey     = lc $thischan;
-       $chankey        .= " $key"      if (defined $key);
+       $2 =~ /^($mask{chan})(\s+(\S+))?/;
+       my($joinchan, $key) = (lc $1, $3);
 
-       if ($thischan eq "") {
+       if ($joinchan eq "") {
            &help("join");
            return;
        }
 
+       if ($joinchan !~ /^$mask{chan}$/) {
+           &msg($who, "$joinchan 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.");
+           if (!exists $chanconf{$joinchan}) {
+               &msg($who, "I am not allowed to join $joinchan.");
                return;
            }
 
-           if (&validChan($thischan)) {
-               &msg($who,"warn: I'm already on $thischan, joining  anyway...");
-#              return;
+           if (&validChan($joinchan)) {
+               &msg($who,"warn: I'm already on $joinchan, joining anyway...");
            }
        }
-       $cache{join}{$thischan} = $who; # used for on_join self.
+       $cache{join}{$joinchan} = $who; # used for on_join self.
 
-       &joinchan($chankey);
-       &status("JOIN $chankey <$who>");
-       &msg($who, "joining $chankey");
+       &status("JOIN $joinchan $key <$who>");
+       &msg($who, "joining $joinchan $key");
+       &joinchan($joinchan, $key);
        &joinNextChan();        # hack.
 
        return;
@@ -119,7 +131,7 @@ sub process {
            return;
        }
 
-       my $mask = "*!$user@".&makeHostMask($host);
+       my $mask = "$who!$user@".&makeHostMask($host);
        ### TODO: prevent adding multiple dupe masks?
        ### TODO: make &addHostMask() CMD?
        &pSReply("Added $mask for $do_nick...");
@@ -143,7 +155,7 @@ sub process {
            return;
        }
 
-       # todo: use &getUser()?
+       # TODO: use &getUser()?
        my $first       = 1;
        foreach (keys %users) {
            if ($users{$_}{FLAGS} =~ /n/) {
@@ -191,6 +203,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 +269,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 +280,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 +297,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 +338,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.";