Fix karma ranking. Also allow karmaclean to remove a specific karma entry.
authorpdbogen <pdbogen@088b83a4-0077-4247-935c-42ec02c2848b>
Tue, 10 Mar 2009 12:55:39 +0000 (12:55 +0000)
committerpdbogen <pdbogen@088b83a4-0077-4247-935c-42ec02c2848b>
Tue, 10 Mar 2009 12:55:39 +0000 (12:55 +0000)
git-svn-id: https://www.cernu.us/~pdbogen/svn/destult2@86 088b83a4-0077-4247-935c-42ec02c2848b

commands.yaml

index b7548dd..30de8b5 100644 (file)
@@ -1736,9 +1736,13 @@ KARMACLEAN: |-
         return;
       }
     }
-    for my $k( keys %{ $heap->{ "karma" } } ) {
-      if( $k =~ /[[:space:]]/ || $k =~ /^$/ ) {
-        delete $heap->{ "karma" }->{ $k };
+    if( exists( $heap->{ "karma" }->{ $what } ) ) {
+      delete $heap->{ "karma" }->{ $what };
+    } else {
+      for my $k( keys %{ $heap->{ "karma" } } ) {
+        if( $k =~ /[[:space:]]/ || $k =~ /^$/ ) {
+          delete $heap->{ "karma" }->{ $k };
+        }
       }
     }
     $kernel->post( $src, $replypath, "Squeak squeak.", $dest );
@@ -1777,13 +1781,24 @@ KARMA: |-
       }
       
       for my $key (keys %karma) {
+       my $slotted = 0;
         INNER:
         for( my $i = 0; $i < $target; $i++ ) {
-          if( !defined( $response[ $i ]->[1] ) || $response[ $i ]->[0]*$mult < $karma{ $key }*$mult ) {
+          if( !defined( $response[ $i ]->[1] ) ) {
             $response[ $i ] = [ $karma{ $key }, $key ];
+            $slotted = 1;
             last INNER;
           }
         }
+        if( $slotted == 0 ) {
+          INNER:
+          for( my $i = 0; $i < $target; $i++ ) {
+            if( $response[ $i ]->[0]*$mult < $karma{ $key }*$mult ) {
+            $response[ $i ] = [ $karma{ $key }, $key ];
+            last INNER;
+            }
+          }
+        }
       }
       if( $mult == 1 ) {
         @response = sort { $b->[0] <=> $a->[0] } @response;
@@ -1792,6 +1807,7 @@ KARMA: |-
       }
       my $resp = $response[0]->[1]." (".$response[0]->[0].")";
       for( my $i = 1; $i < scalar @response; $i++ ) {
+       next unless defined $response[ $i ]->[1];
         $resp .= ", ".$response[ $i ]->[1]." (".$response[ $i ]->[0].")";
       }
       $kernel->post( $src, $replypath, ($mult eq "-1"?"Bottom":"Top")." $target: $resp", $dest );