]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/UserDCC.pl
clearer, and wrap fixes
[infobot.git] / src / Modules / UserDCC.pl
index 195fdf846d0d0d548a2da50af88c3dd90b8b3674..a593cfd1e79e66278a06a1e64b246e3f5a839078 100644 (file)
@@ -5,7 +5,14 @@
 #     Created: 20000707 (from UserExtra.pl)
 #
 
-if (&IsParam("useStrict")) { use strict; }
+use strict;
+
+use vars qw(%users %ignore %sched %bans %mask %cache %channels %param
+       %chanconf %dcc);
+use vars qw($who $chan $message $msgType $user $chnick $conn $ident
+       $verifyUser $ucount_userfile $utime_userfile $lobotomized
+       $utime_chanfile $ucount_chanfile);
+use vars qw(@backlog);
 
 sub userDCC {
     # hrm...
@@ -15,7 +22,7 @@ sub userDCC {
     # quit.
     if ($message =~ /^(exit|quit)$/i) {
        # do ircII clients support remote close? if so, cool!
-       &status("userDCC: quit called. FIXME");
+       &FIXME("userDCC: quit called.");
        &dcc_close($who);
        &status("userDCC: after dcc_close!");
 
@@ -116,15 +123,29 @@ sub userDCC {
        return;
     }
 
+    # dump variables ][.
+    if ($message =~ /^symdump$/i) {
+       return unless (&hasFlag("o"));
+       return unless (&IsParam("symdump"));
+
+       &status("Dumping all variables...");
+       &symdumpAllFile();
+
+       return;
+    }
+
     # kick.
-    if ($message =~ /^kick(\s+(\S+)(\s+(\S+))?)?/) {
+    if ($message =~ /^kick(\s+(.*?))$/) {
        return unless (&hasFlag("o"));
-       my ($nick,$chan) = (lc $2,lc $4);
 
-       if ($nick eq "") {
+       my $arg = $2;
+
+       if ($arg eq "") {
            &help("kick");
            return;
        }
+       my @args = split(/\s+/, $arg);
+       my ($nick,$chan,$reason) = @args;
 
        if (&validChan($chan) == 0) {
            &msg($who,"error: invalid channel \002$chan\002");
@@ -136,12 +157,12 @@ sub userDCC {
            return;
        }
 
-       &kick($nick,$chan);
+       &kick($nick,$chan,$reason);
 
        return;
     }
 
-    # kick.
+    # mode.
     if ($message =~ /^mode(\s+(.*))?$/) {
        return unless (&hasFlag("n"));
        my ($chan,$mode) = split /\s+/,$2,2;
@@ -315,13 +336,16 @@ sub userDCC {
     if ($message =~ s/^say\s+(\S+)\s+(.*)//) {
        return unless (&hasFlag("o"));
        my ($chan,$msg) = (lc $1, $2);
+
        &DEBUG("chan => '$1', msg => '$msg'.");
 
+       # TODO: add nick destination.
        if (&validChan($chan)) {
-           &msg($chan, $2);
+           &msg($chan, $msg);
        } else {
-           &msg($who,"i'm not on \002$1\002, sorry.");
+           &msg($who,"i'm not on \002$chan\002, sorry.");
        }
+
        return;
     }
 
@@ -347,7 +371,7 @@ sub userDCC {
            return;
        }
 
-       ### TODO: fix up $op to support mysql/pgsql/dbm(perl)
+       ### TODO: fix up $op to support mysql/sqlite/pgsql
        ### TODO: => add db/sql specific function to fix this.
        my @list = &searchTable("factoids", "factoid_key",
                        "factoid_value", $op);
@@ -418,7 +442,7 @@ sub userDCC {
        }
 
        &status("jumping servers... $server...");
-       &rawout("QUIT :jumping to $server");
+       $conn->quit("jumping to $server");
 
        if (&irc($server,$port) == 0) {
            &ircloop();
@@ -444,10 +468,9 @@ sub userDCC {
        &msg($who,"resetting...");
        my @done;
        foreach ( keys %channels, keys %chanconf ) {
-           &DEBUG("reset: c => $c");
-           next if (grep /^\Q$_\E$/i, @done);
+           my $c = $_;
+           next if (grep /^\Q$c\E$/i, @done);
 
-           &DEBUG("reset: should part... c => $c");
            &part($_);
 
            push(@done, $_);
@@ -460,7 +483,7 @@ sub userDCC {
        &DEBUG("after joinnextchan");
 
        &status("USER reset $who");
-       &msg($who,"resetted");
+       &msg($who,"reset complete");
 
        return;
     }
@@ -516,7 +539,7 @@ sub userDCC {
 
        my @chans;
        while ($args =~ s/^($mask{chan})\s*//) {
-           push(@chans, $1);
+           push(@chans, lc($1));
        }
 
        if (!scalar @chans) {
@@ -535,7 +558,12 @@ sub userDCC {
 
            my %vals;
            foreach (keys %chanconf) {
-               my $val = $chanconf{$_}{$what} || "NOT-SET";
+               my $val;
+               if (defined $chanconf{$_}{$what}) {
+                   $val = $chanconf{$_}{$what};
+               } else {
+                   $val = "NOT-SET";
+               }
                $vals{$val}{$_} = 1;
            }
 
@@ -552,21 +580,25 @@ sub userDCC {
        if ($cmd eq "chanset" and !defined $what) {
            &DEBUG("showing channel conf.");
 
-           foreach $chan ($chan, "_default") {
-               &pSReply("chan: $chan");
-               ### TODO: merge 2 or 3 per line.
+           foreach $chan (@chans) {
+               if ($chan eq '_default') {
+                   &pSReply("Default channel settings");
+               } else {
+                   &pSReply("chan: $chan (see _default also)");
+               }
                my @items;
                my $str = "";
                foreach (sort keys %{ $chanconf{$chan} }) {
                    my $newstr = join(', ', @items);
-                   if (length $newstr > 60) {
-                       &pSReply("    $str");
+                   ### TODO: make length use channel line limit?
+                   if (length $newstr > 370) {
+                       &pSReply(" $str");
                        @items = ();
                    }
                    $str = $newstr;
                    push(@items, "$_ => $chanconf{$chan}{$_}");
                }
-               &pSReply("    $str") if (@items);
+               &pSReply(" $str") if (@items);
            }
            return;
        }
@@ -596,7 +628,6 @@ sub userDCC {
        if ($args =~ s/^(\-)?($mask{chan})\s*//) {
            $chan       = $2;
            $delete     = ($1) ? 1 : 0;
-           &DEBUG("chan => $chan.");
        } else {
            &VERB("no chan arg; setting to default.",2);
            $chan       = "_default";
@@ -745,6 +776,7 @@ sub userDCC {
            return;
        }
 
+       my $chflag;
        my $user;
        if ($args[0] =~ /^$mask{nick}$/i) {     # <nick>
            $user       = &getUser($args[0]);
@@ -893,7 +925,7 @@ sub userDCC {
            $user       = &getUser($args[0]);
            $mask       = $args[1];
        } else {                                # <mask>
-           # who or verifyUser. FIXME!!!
+           # FIXME: who or verifyUser. (don't remember why)
            $user       = &getUser($who);
            $mask       = $args[0];
        }
@@ -904,7 +936,7 @@ sub userDCC {
        }
 
        if (!defined $mask) {
-           ### FIXME.
+           ### FIXME:
            &pSReply("Hostmasks for $user: $users{$user}{HOSTS}");
 
            return;
@@ -989,7 +1021,7 @@ sub userDCC {
                &unban($mask, $_);
            }
 
-           if ($c) {
+           if (@c) {
                &pSReply("Removed $mask from chans: @c");
            } else {
                &pSReply("$mask was not found in ban list.");
@@ -1111,7 +1143,7 @@ sub userDCC {
     if ($message =~ /^banlist(\s+(.*))?$/) {
        my $arg = $2;
 
-       if (defined $arg and $arg !~ /^$mask_chan$/) {
+       if (defined $arg and $arg !~ /^$mask{chan}$/) {
            &pSReply("error: chan $chan is invalid.");
            return;
        }
@@ -1132,7 +1164,6 @@ sub userDCC {
 
        &writeUserFile();
        &writeChanFile();
-       &News::writeNews() if (&ChanConfList("news"));
 
        return;
     }
@@ -1165,7 +1196,7 @@ sub userDCC {
 
        if (!$state) {                  # delignore.
            if ( &ignoreDel($mask) ) {
-               &pSReply("ok, deleted X ignores.");
+               &pSReply("ok, deleted ignores for $mask.");
            } else {
                &pSReply("could not find $mask in ignore list.");
            }
@@ -1185,7 +1216,7 @@ sub userDCC {
 
        # time.
        if ($args =~ s/^(\d+)\s*//) {
-           $time = $1*60;      # ??
+           $time = $1; # time is in minutes
        } else {
            $time = 0;
        }
@@ -1198,7 +1229,7 @@ sub userDCC {
        }
 
        if ( &ignoreAdd($mask, $chan, $time, $comment) > 1) {
-           &pSReply("warn: $mask already in ignore list; written over anyway. FIXME");
+           &pSReply("FIXME: $mask already in ignore list; written over anyway.");
        } else {
            &pSReply("added $mask to ignore list.");
        }
@@ -1351,7 +1382,7 @@ sub userDCC {
     }
 
     # quite a cool hack: reply in DCC CHAT.
-    $msgType = "chat";
+    $msgType = "chat" if (exists $dcc{'CHAT'}{$who});
 
     my $done = 0;
     $done++ if &parseCmdHook("main", $message);