From b7be9af75c3badbd9fd0a39f3f85e9a6f1bde9c0 Mon Sep 17 00:00:00 2001 From: dms Date: Sat, 3 Feb 2001 14:03:28 +0000 Subject: [PATCH] - $nuh{} fix up. - created on_dcc_open_chat for whois reply to get nuh. - getRandomInt - allow decimal. git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@316 c11ca15a-4712-0410-83d8-924469b57eb5 --- src/IRC/Irc.pl | 9 ++++-- src/IRC/IrcHooks.pl | 77 +++++++++++++++++++++++++++------------------ src/Misc.pl | 2 +- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/IRC/Irc.pl b/src/IRC/Irc.pl index a6f49c6..ff275c7 100644 --- a/src/IRC/Irc.pl +++ b/src/IRC/Irc.pl @@ -654,9 +654,12 @@ sub closeDCC { foreach $type (keys %dcc) { next if ($type ne uc($type)); - foreach (keys %{$dcc{$type}}) { - &DEBUG("closing DCC $type to $_ (FIXME)."); - $dcc{$type}{$_}->close(); + foreach $nick (keys %{$dcc{$type}}) { + next unless (defined $nick); + &DEBUG("closing DCC $type to $nick (FIXME)."); + next unless (defined $dcc{$type}{$nick}); + + $dcc{$type}{$nick}->close(); } } } diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index a1b710f..dd09af7 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -67,7 +67,7 @@ sub on_chat { ### TODO: prevent users without CRYPT chatting. if (!defined $crypto) { &DEBUG("chat: no pass required."); - $success++; +### $success++; } elsif (&ckpasswd($msg, $crypto)) { # stolen from eggdrop. @@ -102,10 +102,6 @@ sub on_chat { return; } -### REMOVE IF OK. -# &DEBUG("IrcHooks.pl: line 104: userHandle => $userHandle"); -# $userHandle = &verifyUser($who, $nuh); - &status("$b_red=$b_cyan$who$b_red=$ob $message"); if ($message =~ s/^\.//) { # dcc chat commands. @@ -176,6 +172,7 @@ sub on_dcc { # pity Net::IRC doesn't store nuh. Here's a hack :) $self->whois($nick); + $nuh{lc $nick} = "GETTING-NOW"; # trying. $type ||= "???"; if ($type eq 'SEND') { # GET for us. @@ -233,49 +230,67 @@ sub on_dcc_open { my $type = uc( ($event->args)[0] ); my $nick = $event->nick(); my $sock = ($event->to)[0]; - $msgType = 'chat'; + $msgType = 'chat'; $type ||= "???"; + ### BUG: who is set to bot's nick? + # lets do it. if ($type eq 'SEND') { - &status("${b_green}DCC lGET$ob established with $b_cyan$nick$ob"); } elsif ($type eq 'CHAT') { - - &status("${b_green}DCC CHAT$ob established with $b_cyan$nick$ob $b_yellow($ob$nuh{$nick}$b_yellow)$ob"); - - &verifyUser($nick, $nuh{lc $nick}); - - if (!exists $users{$userHandle}{HOSTS}) { - &pSReply("you have no hosts defined in my user file; rejecting."); - ### TODO: $sock->close(); - return; - } - - my $crypto = $users{$userHandle}{PASS}; - $dcc{'CHAT'}{$nick} = $sock; - foreach (keys %{ $users{$userHandle} }) { - &VERB(" $_ => $users{$userHandle}{$_}",2); - } - - if (defined $crypto) { -### &dccsay($nick,"Enter your password, $userHandle."); - &dccsay($nick,"Enter your password."); + # very cheap hack. + ### TODO: run ScheduleThis inside on_dcc_open_chat recursively + ### 1,3,5,10 seconds then fail. + if ($nuh{$nick} eq "GETTING-NOW") { + &ScheduleThis(3/60, "on_dcc_open_chat", $nick, $sock); } else { - &dccsay($nick,"Welcome to blootbot DCC CHAT interface, $userHandle."); + on_dcc_open_chat(undef, $nick, $sock); } } elsif ($type eq 'SEND') { - &DEBUG("Starting DCC receive."); foreach ($event->args) { &DEBUG(" => '$_'."); } } else { - &WARN("${b_green}DCC $type$ob (3)"); + + } +} + +# really custom sub to get NUH since Net::IRC doesn't appear to support +# it. +sub on_dcc_open_chat { + my(undef, $nick,$sock) = @_; + + if ($nuh{$nick} =~ /^(\S+)(\d+)$/) { + my $i = $2; + $i++; + $nuh{$nick} = $1.$i; + &DEBUG("getting nuh for $nick failed. FIXME."); + return; + } + + &status("${b_green}DCC CHAT$ob established with $b_cyan$nick$ob $b_yellow($ob$nuh{$nick}$b_yellow)$ob"); + + &verifyUser($nick, $nuh{lc $nick}); + + if (!exists $users{$userHandle}{HOSTS}) { + &pSReply("you have no hosts defined in my user file; rejecting."); + ### TODO: $sock->close(); + return; + } + + my $crypto = $users{$userHandle}{PASS}; + $dcc{'CHAT'}{$nick} = $sock; + + if (defined $crypto) { + &dccsay($nick,"Enter your password."); + } else { + &dccsay($nick,"Welcome to blootbot DCC CHAT interface, $userHandle."); } } @@ -863,6 +878,8 @@ sub on_whoisuser { my ($self, $event) = @_; my @args = $event->args; + &DEBUG("on_whoisuser: @args"); + $nuh{lc $args[1]} = $args[1]."!".$args[2]."\@".$args[3]; } diff --git a/src/Misc.pl b/src/Misc.pl index 76dc9b7..43c3f2a 100644 --- a/src/Misc.pl +++ b/src/Misc.pl @@ -358,7 +358,7 @@ sub getRandomInt { srand(); - if ($str =~ /^(\d+)$/) { + if ($str =~ /^(\d+(\.\d+)?)$/) { my $i = $1; my $fuzzy = int(rand 5); if ($i < 10) { -- 2.39.5