home *** CD-ROM | disk | FTP | other *** search
/ ftp.urbanrage.com / 2015-02-07.ftp.urbanrage.com.tar / ftp.urbanrage.com / pub / perl / test_plug.pl < prev    next >
Text File  |  2006-10-18  |  5KB  |  198 lines

  1. # xchat script perl
  2. use IO::All;
  3.  
  4. %colors = (
  5.     '2' => "3",
  6.     '3' => "2",
  7.     '4' => "6",
  8.     '5' => "7",
  9.     '6' => "4"
  10.     );
  11. %color_names = (
  12.     '2' => "Green",
  13.     '3' => "Blue",
  14.     '4' => "Purple",
  15.     '5' => "Orange",
  16.     '6' => "Red"
  17.     );
  18.  
  19.  
  20. IRC::register("test script", "1.0", "", "");
  21. IRC::add_message_handler("PRIVMSG", "tryit");
  22. IRC::add_command_handler("", "from_me");
  23. IRC::add_command_handler("word_click", "clicked");
  24.  
  25. sub printme {
  26.     $len = @_;
  27.     IRC::print_with_channel("printme $len [$_[0]]\n","#dump");
  28.     return IRC::EAT_NONE;
  29. }
  30.  
  31. sub clicked {
  32.     my $channel = IRC::get_info(2);
  33.     my $me = IRC::get_info(1);
  34.     my $word = shift;
  35.     
  36.     $word =~ tr/[]//d;
  37.     IRC::print_with_channel("clicked: <$word>\n","#dump");
  38.  
  39.     &do_query($me, $channel, 0, $word);
  40.     return 1;
  41. }
  42.  
  43. sub from_me {
  44.     my $channel = IRC::get_info(2);
  45.     my $me = IRC::get_info(1);
  46.     my @items = ($_[0] =~ /q\[(.+?)\]/g);
  47.     #IRC::print_with_channel("from_me called $_[1], 0 = $_[0]\n","#dump");
  48.     if (@items > 0) {
  49.         &do_query($me, $channel, 2, @items);
  50.         return 1;
  51.     }
  52.     @items = ($_[0] =~ /p\[(.+?)\]/g);
  53.     #IRC::print_with_channel("from_me @items\n","#dump");
  54.     if (@items > 0) {
  55.         &do_query($me, $channel, 1, @items);
  56.         return 1;
  57.     }
  58.     return 0;
  59. }
  60.  
  61. sub tryit {
  62.     my $me = IRC::get_info(1);
  63.     ($source, $dest, $msg) = ($_[0] =~ /:(.*?)\!.* PRIVMSG (.*?) :(.*)/);
  64.     ($who) = ($msg =~ /^($me).*/);
  65.     my @items = ($msg =~ /q\[(.+?)\]/g);
  66.     if (@items > 0) {
  67.         do_query($source, $dest, 2, @items);
  68.     } else {
  69.         my @items = ($msg =~ /s\[(.+?)\]/g);
  70.         if (@items > 0) {
  71.             do_query($source, $dest, 3, @items);
  72.         }
  73.     }
  74.     return IRC::EAT_NONE;
  75. }
  76.  
  77. sub do_query {
  78.     my $source = shift;
  79.     my $dest = shift;
  80.     my $both = shift;
  81.     my $content;
  82.     my @lines;
  83.     my $line;
  84.     my $key;
  85.     my $skey;
  86.     my $ukey;
  87.     my $query;
  88.     my $thing;
  89.     my $sthing;
  90.     my @data;
  91.     my $check_source;
  92.     my $value = "";
  93.     my $color;
  94.     my $name;
  95.     my $count;
  96.     my %choices;
  97.     my $me = IRC::get_info(1);
  98.  
  99.     foreach $thing (@_) {
  100.         $key = lc($thing);
  101.         if ((exists($items{$key})) && ($both < 3)) {
  102.             if ($both < 2) {
  103.                 IRC::command("/gui MSGBOX \"$box_items{$key}\"");
  104.             }
  105.             if ($both > 0) {
  106.                 IRC::command_with_channel("$items{$key}", $dest);
  107.             }
  108.             next;
  109.         }
  110.         ($sthing = $key) =~ tr/\ //d;
  111.         $thing =~ s/(.*?)[ _]/$1\%20/g;
  112.         $query = "http://www.thottbot.com/?s=$thing";
  113.         $content < io($query);
  114. #        IRC::print_with_channel("$content\n", "#dump");
  115.         @lines = split(/\n/, $content);
  116.         $count = 0;
  117.         foreach $line (@lines) {
  118.             next if ($line !~ /class=ttb/);
  119.             ($color = $line) =~ s/.*quality(.?).+/$1/;
  120. #            $line =~ s/.*?\<table.*?\>(.*?)\<\/table\>.*/$1/;
  121.             $line =~ s/.*?"<table(.*?)<\/table>".*/$1/;
  122.             @data = ($line =~ /\>([^\<]+?)(?=\<)/g);
  123.             $key = lc($data[0]);
  124.             $name = shift (@data);
  125.             $check_source = 0;
  126.             $value = $colors{$color}.$name." - "; 
  127.             $box = $name."\n".$color_names{$color}."\n";
  128.             foreach $item (@data) {
  129.                 $item =~ s/(.*?)\ /$1/g; 
  130.                 $item =~ s/(.*?)\</$1</g;
  131.                 $item =~ s/(.*?)\>/$1>/g;
  132.                 last if ($check_source && ($item !~ /Source/));
  133.                 next if ($item =~ /^Live/);
  134.                 if (($item eq "Use") || ($item eq "Equip") || ($item eq "Chance on hit")) {
  135.                     $value .= $item." ";
  136.                     $box .= $item." ";
  137.                 } else {
  138.                     $value .= $item." | ";
  139.                     $box .= $item."\n";
  140.                 }
  141.                 last if ($item =~ /Source/);
  142.                 if ($item =~ /^Item/) {
  143.                     $check_source = 1;
  144.                 }
  145.             }
  146.  
  147.             $choices{$key} = $key;
  148.             if (!exists($items{$key})) {
  149.                 $items{$key} = $value;
  150.             }
  151.             if (!exists($box_items{$key})) {
  152.                 $box_items{$key} = $box;
  153.             }
  154.             $count++;
  155.         }
  156.         if ($count == 1) {
  157.             if ($both < 2) {
  158.                 IRC::command("/gui MSGBOX \"$box\"");
  159.             }
  160.             if ($both > 0) {
  161.                 IRC::command_with_channel("$value", $dest);
  162.             }
  163.         } elsif (($count > 1) && ($count < 25)) {
  164.             # make sure we didn't get an exact match but with white space differences
  165.             foreach $key (keys(%choices)) {
  166.                 ($skey = $key) =~ tr/\ //d;
  167.                 if ($skey eq $sthing) {
  168.                     $ukey = $key;
  169.                     last;
  170.                 }
  171.             }
  172.             if ($skey eq $sthing) {
  173.                 IRC::command_with_channel("$items{$ukey}", $dest);
  174.             } elsif ($count < 5) {
  175.                 foreach $key (keys(%choices)) {
  176.                     IRC::command_with_channel("$items{$key}", $dest);
  177.                 }
  178.             } 
  179.             if ($me ne $source) {
  180.                 IRC::command("/msg $source Any of these?");
  181.                 foreach $key (keys(%choices)) {
  182.                     IRC::command("/msg $source [$choices{$key}]");
  183.                 }
  184.             } else {
  185.                 IRC::command("/msg $source Any of those?");
  186.                 IRC::print_with_channel("\n", $source);
  187.                 foreach $key (keys(%choices)) {
  188.                     IRC::print_with_channel("[$choices{$key}]", $source);
  189.                 }
  190.             }
  191.         } elsif ($count == 0) {
  192.             IRC::command("/msg $source no matching items found");
  193.         } else {
  194.             IRC::command("/msg $source too many items to print, found $count items");
  195.         }
  196.     }
  197. }
  198.