5. Change the badwords interface to be the same as baddx, badspotter et al.
[spider.git] / perl / DXCommandmode.pm
index b6140082f6a741b59ab5ece9541823213e2eafaa..a5aaa5cfebd1f122c1b68b274d166e3c613774bf 100644 (file)
@@ -32,7 +32,7 @@ use Sun;
 use Internet;
 
 use strict;
-use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase $maxerrors %nothereslug);
+use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase $maxerrors %nothereslug $suppress_ann_to_talk);
 
 %Cache = ();                                   # cache of dynamically loaded routine's mod times
 %cmd_cache = ();                               # cache of short names
@@ -40,6 +40,8 @@ $errstr = ();                                 # error string from eval
 %aliases = ();                                 # aliases for (parts of) commands
 $scriptbase = "$main::root/scripts"; # the place where all users start scripts go
 $maxerrors = 20;                               # the maximum number of concurrent errors allowed before disconnection
+$suppress_ann_to_talk = 1;             # don't announce 'to <call> ' or '<call> ' type announcements
+
 
 use vars qw($VERSION $BRANCH);
 $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
@@ -75,6 +77,10 @@ sub start
        my $call = $self->{call};
        my $name = $user->{name};
        
+       # log it
+       my $host = $self->{conn}->{peerhost} || "unknown";
+       Log('DXCommand', "$call connected from $host");
+
        $self->{name} = $name ? $name : $call;
        $self->send($self->msg('l2',$self->{name}));
        $self->send_file($main::motd) if (-e $main::motd);
@@ -113,8 +119,6 @@ sub start
                $user->qra(DXBearing::lltoqra($lat, $long)) if (defined $lat && defined $long);  
        }
 
-       Log('DXCommand', "$call connected");
-
        # send prompts and things
        my $info = Route::cluster();
        $self->send("Cluster:$info");
@@ -425,6 +429,9 @@ sub disconnect
 {
        my $self = shift;
        my $call = $self->call;
+
+       return if $self->{disconnecting}++;
+
        delete $self->{senddbg};
 
        my $uref = Route::User::get($call);
@@ -698,6 +705,11 @@ sub announce
        my $text = shift;
        my ($filter, $hops);
 
+       if ($suppress_ann_to_talk && $to ne $self->{call}) {
+               my $call = AnnTalk::is_talk_candidate($_[0], $text);
+               return if $call && Route::get($call);
+       }
+
        if ($self->{annfilter}) {
                ($filter, $hops) = $self->{annfilter}->it(@_ );
                return unless $filter;