From cc1142f20c7b5071427059278951137e0204b05c Mon Sep 17 00:00:00 2001 From: timriker Date: Thu, 8 Jul 2004 18:20:38 +0000 Subject: [PATCH] nick changing fixes git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk@991 c11ca15a-4712-0410-83d8-924469b57eb5 --- blootbot/src/IRC/Irc.pl | 46 +++++++++------------- blootbot/src/IRC/IrcHooks.pl | 22 +++++------ blootbot/src/UserExtra.pl | 76 ++++++++++++++++++------------------ 3 files changed, 64 insertions(+), 80 deletions(-) diff --git a/blootbot/src/IRC/Irc.pl b/blootbot/src/IRC/Irc.pl index ddc7fde..1ffda4f 100644 --- a/blootbot/src/IRC/Irc.pl +++ b/blootbot/src/IRC/Irc.pl @@ -601,46 +601,36 @@ sub quit { } sub nick { - my ($nick) = @_; + my ($newnick) = @_; + my $mynick = $conn->nick(); - if (!defined $nick) { + if (!defined $newnick) { &ERROR("nick: nick == NULL."); return; } - if (defined $ident and $nick eq $ident) { - &WARN("nick: nick == ident == '$ident'."); + if (!defined $mynick) { + &WARN("nick: mynick == NULL."); return; } - my $bad = 0; - $bad++ if (exists $nuh{$conn->nick()}); - $bad++ if (&IsNickInAnyChan($conn->nick())); + my $bad = 0; + $bad++ if (exists $nuh{$newnick}); + $bad++ if (&IsNickInAnyChan($newnick)); if ($bad) { - &WARN("Nick: not going to try and get my nick back. [". - scalar(gmtime). "]"); -# hrm... over time we lose track of our own nick. -# return; + &WARN("Nick: not going to try to change from $mynick to $newnick. [". scalar(gmtime). "]"); + # hrm... over time we lose track of our own nick. + #return; } -# FIXME broken for multiple nicks -# if ($nick =~ /^$mask{nick}$/) { -# &rawout("NICK ".$nick); -# -# if (defined $ident) { -# &status("nick: Changing nick to $nick (from $ident)"); -# # following shouldn't be here :( -# $ident = $nick; -# } else { -# &DEBUG("first time nick change."); -# $ident = $nick; -# } -# -# return 1; -# } - &DEBUG("nick: failed... why oh why (nick => $nick)"); - + if ($newnick =~ /^$mask{nick}$/) { + &status("nick: Changing nick from $mynick to $newnick"); + # ->nick() will NOT change cause we are using rawout? + &rawout("NICK $newnick"); + return 1; + } + &DEBUG("nick: failed... why oh why (mynick=$mynick, newnick=$newnick)"); return 0; } diff --git a/blootbot/src/IRC/IrcHooks.pl b/blootbot/src/IRC/IrcHooks.pl index 9b25f6b..a62e0ea 100644 --- a/blootbot/src/IRC/IrcHooks.pl +++ b/blootbot/src/IRC/IrcHooks.pl @@ -725,14 +725,10 @@ sub on_nick { sub on_nick_taken { $conn = shift(@_); my $nick = $conn->nick(); - my $newnick = $nick.int(rand 10); + #my $newnick = $nick . int(rand 10); + my $newnick = $nick . "_"; - if ($nick eq $ident) { - &DEBUG("on_nick_tane: nick eq ident... wtf?"); - return; - } - - &DEBUG("on_nick_taken: ident => $ident"); + &DEBUG("on_nick_taken: nick => $nick"); &status("nick taken ($nick); preparing nick change."); @@ -999,12 +995,12 @@ sub on_quit { delete $chanstats{lc $nick}; ### - # FIXME: does this work? - my $mynick = $conn->nick(); - if ($nick !~ /^\Q$ident\E$/ and $nick =~ /^\Q$mynick\E$/i) { - &status("nickchange: own nickname became free; changing."); - &nick($mynick); - } + # FIXME: broken for multiple connects + #my $mynick = $conn->nick(); + #if ($nick !~ /^\Q$ident\E$/ and $nick =~ /^\Q$mynick\E$/i) { + #&status("nickchange: own nickname became free; changing."); + #&nick($mynick); + #} } sub on_targettoofast { diff --git a/blootbot/src/UserExtra.pl b/blootbot/src/UserExtra.pl index f638098..ba80639 100644 --- a/blootbot/src/UserExtra.pl +++ b/blootbot/src/UserExtra.pl @@ -850,45 +850,43 @@ if (0) { } # wantNick. xk++ -# if ($message =~ /^wantNick(\+)?$/i) { -# my ($force) = ($1) ? 1 : 0; -# $force = 0 unless (&IsFlag("n")); -# -# # cannot trust Net::IRC's nick() (TimRiker asks why?) -# if ($param{'ircNick'} eq $ident) { -# &msg($who, "I hope you're right. I'll try anyway."); -# &DEBUG("ircNick => $param{'ircNick'}"); -# &DEBUG("ident => $ident"); -# } -# -# # 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' }); -# 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; -# } + # FIXME does not try to get nick "back", just switches nicks + if ($message =~ /^wantNick\s(.*)?$/i) { + return unless (&hasFlag("o")); + my $wantnick = lc $1; + my $mynick = $conn->nick(); + + if ($mynick eq $wantnick) { + &msg($who, "I hope you're right. I'll try anyway (mynick=$mynick, wantnick=$wantnick)."); + } + + # fallback check, I guess. needed? + if (! &IsNickInAnyChan( $wantnick ) ) { + my $str = "attempting to change nick from $mynick to $wantnick"; + &status($str); + &msg($who, $str); + &nick($wantnick); + return; + } + + # idea from dondelecarlo :) + # TODO: use cache{nickserv} + if ($param{'nickServ_pass'}) { + my $str = "someone is using nick $wantnick; GHOSTing"; + &status($str); + &msg($who, $str); + &msg("NickServ", "GHOST $wantnick $param{'nickServ_pass'}"); + + $conn->schedule(5, sub { + &status("going to change nick from $mynick to $wantnick after GHOST."); + &nick($wantnick); + } ); + + return; + } + + return; + } return "CONTINUE"; } -- 2.39.2