jacob614

nicktrace hexchat script (not mine)

Oct 13th, 2014
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.94 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use warnings;
  3.  
  4. my $sname="DMS-Nick-Trace";
  5. my $version="1.5.0";
  6.  
  7. Xchat::register($sname, $version, "DMS");
  8.  
  9. my $outputType=-1; #0=Join Message, 1=Notice, 2=Server Notice
  10. my $lessOut=0;
  11. my $autoAdd=1;
  12. my $hostmasks=Xchat::get_info("xchatdir");
  13.  
  14. $hostmasks="$hostmasks/addons/hostmasks.db";
  15.  
  16. Xchat::hook_print('Join', 'joinHandler',{help_text => 'handles nickchanges'});
  17. Xchat::hook_server('NICK','nickHandler',{help_text => 'handles joins'});
  18. Xchat::hook_command('NickTrace','nicktraceHandler',{help_text => 'check for aliases for given nick'});
  19. Xchat::hook_command('NickTrace_add','nicktraceAddHandler',{help_text => 'usage: /NickTrace_add NICK IDENT HOST/IP'});
  20.  
  21. sub readFile{
  22.     $path=shift(@_);
  23.     #if (open(DB, "<","$path")==undef){Xchat::print("file not found: $path");return "";}
  24.     if (!open(DB, "<","$path")){Xchat::print("file not found: $path");return "";}
  25.     @stats=stat(DB);
  26.     my $data;
  27.     read (DB,$data,$stats[7]);
  28.     close (DB);
  29.     return $data;
  30. }
  31.  
  32. sub nicktraceHandler{
  33.     $nick=$_[0][1];
  34.     if (!$nick){Xchat::print("you have to give nick as argument");return Xchat::EAT_ALL;}
  35.     my $data=Xchat::user_info("$nick");
  36.     if (!$data){
  37.         Xchat::print("invalid user");
  38.         return Xchat::EAT_ALL;
  39.     }
  40.     $host=$data->{"host"};
  41.     @parts=split("@",$host);
  42.     $akas=checkAlias($nick,$parts[0],$parts[1]);
  43.     Xchat::printf("$nick$akas");
  44.     return Xchat::EAT_ALL;
  45. }
  46.  
  47.  
  48. sub checkAlias{
  49.     $nick=shift(@_);
  50.     $ident=shift(@_);
  51.     $hostmask=shift(@_);
  52.     $aliases="";
  53.     foreach $line (split "\n", readFile($hostmasks)){
  54.         my($n, $i, $h)=(split "=", $line);
  55.         if (($i eq $ident)||($h eq $hostmask)){
  56.             if ($n ne $nick){
  57.                 if (($i eq $ident)&&($h eq $hostmask)){$aliases="$aliases aka. $n" if (index($aliases,"aka. $n")==-1);}
  58.                 else {if ($lessOut==1){$aliases="$aliases (aka. $n)" if (index($aliases,"aka. $nick")==-1);}}
  59.             }
  60.         }
  61.     }
  62.     return $aliases;
  63. }
  64.  
  65. sub addAlias{
  66.     $nick=shift(@_);
  67.     $ident=shift(@_);
  68.     $hostmask=shift(@_);
  69.     $db=readFile($hostmasks);
  70.     open(DB, ">$hostmasks");
  71.     foreach $line(split "\n", $db){
  72.         my($n,$i, $h)=(split "=", $line);
  73.         print DB "$n=$i=$h\n" if (($n ne $nick)||($i ne $ident)||($h ne $hostmask));
  74.     }
  75.     print DB "$nick=$ident=$hostmask\n";
  76.     close(DB);
  77. }
  78.  
  79. sub nicktraceAddHandler{addAlias($_[0][1],$_[0][2],$_[0][3]);Xchat::print("Added to hostmask.db");return Xchat::EAT_ALL;}
  80.  
  81. sub joinHandler{
  82.     $mask=$_[0][2];
  83.     $nick=$_[0][0];
  84.     $chan=$_[0][1];
  85.     if (index($nick,"\002\002")==0){return Xchat::EAT_NONE;}
  86.     @parts2=split("@",$mask);
  87.     $ident=$parts2[0];
  88.     $hostmask=$parts2[1];
  89.     $alias=checkAlias($nick,$ident,$hostmask);
  90.     &addAlias($nick,$ident,$hostmask)if ($autoAdd==1);
  91.     if ($outputType==0){
  92.         my @ret=();
  93.         push(@ret,"\002\002$nick$alias");push(@ret,$chan);push(@ret,"$mask");
  94.         $rVal=Xchat::emit_print('Join',@ret);
  95.         if ($rVal!=1){ #emit_print fails (why ever)
  96.             Xchat::print("emit_print failed (returned $rVal)");
  97.             Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  98.         }
  99.         return Xchat::EAT_ALL;
  100.     }
  101.     if ($outputType==1){ #notice
  102.         my @ret=();
  103.         push(@ret,"nickTrace");push(@ret,"\002\002$nick$alias");
  104.         Xchat::set_context("(notices)");
  105.         $rVal=Xchat::emit_print('Notice',@ret);
  106.         if ($rVal!=1){ #emit_print fails (why ever)
  107.             Xchat::print("emit_print failed (returned $rVal)");
  108.             #Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  109.         }
  110.     }
  111.     if ($outputType==2){ #server notice
  112.         my @ret=();
  113.         push(@ret,"\002\002$nick$alias");push(@ret,"nickTrace");
  114.         Xchat::set_context("(snotices)");
  115.         $rVal=Xchat::emit_print('Server Notice',@ret);
  116.         if ($rVal!=1){ #emit_print fails (why ever)
  117.             Xchat::print("emit_print failed (returned $rVal)");
  118.             #Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  119.         }
  120.     }
  121.    
  122.     return Xchat::EAT_NONE;
  123. }
  124.  
  125. sub nickHandler{
  126.     $mask=$_[0][0];
  127.     $nick=substr($_[0][2],1);
  128.     @parts1=split("!",$mask);
  129.     @parts2=split("@",$parts1[1]);
  130.     $ident=$parts2[0];
  131.     $hostmask=$parts2[1];
  132.     addAlias($nick,$ident,$hostmask);
  133.     return Xchat::EAT_NONE;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment