]> git.donarmstrong.com Git - infobot.git/blobdiff - src/UserExtra.pl
ws
[infobot.git] / src / UserExtra.pl
index cfd15aa1f509ae1c116f247e9e64dece494e91b3..d028ca5ab74b9fe65919971ee64268a5f3b91ff0 100644 (file)
@@ -17,25 +17,25 @@ use vars qw(%channels %chanstats %cmdstats %count %ircstats %param
 
 &addCmdHook("main", 'chan(stats|info)', ('CODEREF' => 'chaninfo', ) );
 &addCmdHook("main", 'cmd(stats|info)', ('CODEREF' => 'cmdstats', ) );
-&addCmdHook("main", 'factinfo', ('CODEREF' => 'factinfo', 
+&addCmdHook("main", 'factinfo', ('CODEREF' => 'factinfo',
        'Cmdstats' => 'Factoid Info', Module => 'factoids', ) );
-&addCmdHook("main", 'factstats?', ('CODEREF' => 'factstats', 
-       'Cmdstats' => 'Factoid Stats', Help => "factstats", 
+&addCmdHook("main", 'factstats?', ('CODEREF' => 'factstats',
+       'Cmdstats' => 'Factoid Stats', Help => "factstats",
        Forker => 1, 'Identifier' => 'factoids', ) );
-&addCmdHook("main", 'help', ('CODEREF' => 'help', 
+&addCmdHook("main", 'help', ('CODEREF' => 'help',
        'Cmdstats' => 'Help', ) );
 &addCmdHook("main", 'karma', ('CODEREF' => 'karma', ) );
-&addCmdHook("main", 'i?spell', ('CODEREF' => 'ispell', 
+&addCmdHook("main", 'i?spell', ('CODEREF' => 'ispell',
        Help => 'spell', Identifier => 'spell', ) );
-&addCmdHook("main", 'd?nslookup', ('CODEREF' => 'DNS', 
+&addCmdHook("main", 'd?nslookup', ('CODEREF' => 'DNS',
        Help => 'nslookup', Identifier => 'allowDNS',
        Forker => "NULL", ) );
-&addCmdHook("main", 'tell|explain', ('CODEREF' => 'tell', 
+&addCmdHook("main", 'tell|explain', ('CODEREF' => 'tell',
        Help => 'tell', Identifier => 'allowTelling',
        Cmdstats => 'Tell') );
-&addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', 
+&addCmdHook("main", 'news', ('CODEREF' => 'News::Parse',
        Module => 'news', 'Cmdstats' => 'News' ) );
-&addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', 
+&addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats',
 #      Forker => "NULL",
  ) );
 
@@ -841,22 +841,41 @@ if (0) {
     }
 
     # wantNick. xk++
-    if ($message =~ /^wantNick$/i) {
+    if ($message =~ /^wantNick(\+)?$/i) {
+       my ($force) = ($1) ? 1 : 0;
+       $force = 0 unless (&IsFlag("n"));
+
+       # cannot trust Net::IRC's nick()
        if ($param{'ircNick'} eq $ident) {
            &msg($who, "I hope you're right. I'll try anyway.");
+           &DEBUG("ircNick => $param{'ircNick'}");
+           &DEBUG("ident => $ident");
        }
-       &DEBUG("ircNick => $param{'ircNick'}");
-       &DEBUG("ident => $ident");
 
-       if (! &IsNickInAnyChan( $param{ircNick} ) ) {
+       # fallback check, I guess.  needed?
+       if (! &IsNickInAnyChan( $param{'ircNick'} ) ) {
            my $str = "attempting to change nick to $param{'ircNick'}";
            &status($str);
            &msg($who, $str);
-           &nick($param{'ircNick'});
-       } else {
-           &msg($who, "hrm.. I shouldn't do it (BUG?) but doing it anyway!");
-           &DEBUG("wN: nick is somewhere... should try later.");
-           &nick($param{'ircNick'});
+           &nick($param{ 'ircNick' });
+           return;
+       }
+
+       # idea from dondelecarlo :)
+       # todo: use cache{nickserv}
+       if ($param{'nickServ_pass'}) {
+           return if ($param{'ircNick'} eq $ident or $force == 0);
+
+           &status("someone is using our nick; GHOSTing");
+           &msg($who, "using GHOST on $param{'ircNick'}.");
+           &msg("NickServ", "GHOST $param{'ircNick'} $param{'nickServ_pass'}");
+
+           $conn->schedule(5, sub {
+               &status("going to change nick after GHOST.");
+               &nick( $param{'ircNick'} );
+           } );
+
+           return;
        }
 
        return;