Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.84 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use warnings;
  3.  
  4. my $sname="DMS-Trace-Nick"; # origin was "DMS-Nick-Trace"
  5. my $version="2.1.0"; # origin was "1.6.0"
  6.  
  7. Xchat::register($sname, $version, "DMS");
  8.  
  9. Xchat::print "\n\n\00312.::  DMS-Trace-Nick ::.\003\n";
  10. Xchat::print "\00312:::  Version $version  :::\003\n";
  11. Xchat::print "\00312:::    © DMS '05    :::\003\n\n";
  12. Xchat::print "\00312::: /emptydb /insertchan #channel until all chan covered then /startautoadd    :::\003\n\n";
  13. my $outputType=0; #0=Join Message, 1=Notice, 2=Server Notice
  14. #my $lessOut=0;
  15. my $autoAdd=0; # must be set to 1 to start and/or continue updating db
  16. my $minMEE=50;
  17. my $hostmasks=Xchat::get_info("xchatdir");
  18.     my $firsttime="true";
  19.     my $channels;
  20.  
  21. $hostmasks="$hostmasks/hostmasks.db";
  22.  
  23. my $fh;
  24.  
  25. Xchat::hook_print('Join', 'joinHandler',{help_text => 'handles nickchanges'});
  26. Xchat::hook_server('NICK','nickHandler',{help_text => 'handles joins'});
  27. Xchat::hook_command('NickTrace','nicktraceHandler',{help_text => 'check for aliases for given nick'});
  28. Xchat::hook_command('NickTrace_add','nicktraceAddHandler',{help_text => 'usage: /NickTrace_add NICK IDENT HOST/IP'});
  29. Xchat::hook_command('startautoadd','startautoadd',{help_text => 'usage: /startautoadd'});
  30. Xchat::hook_command('stopautoadd','stopautoadd',{help_text => 'usage: /stopautoadd'});
  31. Xchat::hook_command('emptydb', \&emptydb, { help_text => 'create an empty db if autoadd = 0' });
  32. Xchat::hook_command('insertchan','insertchan', { help_text => 'usage /insertchan #channel' });
  33.  
  34. sub readFile{
  35.         $path=shift(@_);
  36.         #if (open(DB, "<","$path")==undef){Xchat::print("file not found: $path");return "";}
  37.         if (!open(DB, "<","$path")){Xchat::print("file not found: $path");return "";}
  38.         @stats=stat(DB);
  39.         my $data;
  40.         read (DB,$data,$stats[7]);
  41.         close (DB);
  42.         return $data;
  43. }
  44.  
  45. sub startautoadd{
  46.         $autoAdd = 1;
  47.         Xchat::printf("Auto-Add STARTED");
  48. }
  49. sub stopautoadd{
  50.         $autoAdd = 0;
  51.         Xchat::printf("Auto-Add STOPPED");
  52. }
  53. sub emptydb {
  54.         if ($autoAdd==1) {
  55.     Xchat::print("Nicktrace DB not erased do /stopautoadd first");
  56.     } else {
  57.     open ($fh, '>:encoding(UTF-8)', $hostmasks);
  58.     close $fh;
  59.     $firsttime = "true";
  60.     $channels = "";
  61.     Xchat::print("Nicktrace DB erased - cleaned - emptied :-)");
  62.     }
  63. }
  64. sub insertchan {
  65.     my $who_hook;
  66.     my $end_hook;
  67.     my $channel = $_[0][1];
  68.     return EAT_XCHAT unless $channel;
  69.        
  70.         if ($autoAdd==1) {
  71.     Xchat::print("Nicktrace DB not erased do /stopautoadd first");
  72.     } else {
  73.     if ($firsttime eq "true") {
  74.         $channels = $channel;
  75.     } else {
  76.         $channels = $channels . ", " . $channel;
  77.     }
  78.  
  79.     $who_hook = hook_server('352', sub {
  80.         my($chan1,$ident1, $hostmask1, $server1, $nick1 )=(split " ", $_[1][3]);
  81.         $db=readFile($hostmasks);
  82.         open(DB, ">$hostmasks");
  83.         foreach $line(split "\n", $db){
  84.                 my($n,$i, $h)=(split "=", $line);
  85.                 print DB "$n=$i=$h\n" if (($n ne $nick1)||($i ne $ident1)||($h ne $hostmask1));
  86.         }
  87.         print DB "$nick1=$ident1=$hostmask1\n";
  88.         close(DB);
  89.     }); # LIGNE 89 QUI DONNE l'ERREUR:
  90. # Error in command callback Undefined subroutine &Xchat::Script::tracenick::hook_server called at (eval 16) line 89.
  91.    
  92.     $end_hook = hook_server('315', sub {
  93.         if ($firsttime eq "true") {
  94.             Xchat::print("Nicktrace DB populated with users on channel: $channels");
  95.         } else {
  96.             Xchat::print("Nicktrace DB populated with users on channels: $channels");
  97.         }
  98.         $firsttime = "nottrue";
  99.         unhook($who_hook);
  100.         unhook($end_hook);
  101.     });
  102.    
  103.     # now send the /who
  104.     command("who $channel");
  105.  
  106.     return EAT_XCHAT;
  107. }}
  108.  
  109.  
  110. sub nicktraceHandler{
  111.         $nick=$_[0][1];
  112.         if (!$nick){Xchat::print("you have to give nick as argument");return Xchat::EAT_ALL;}
  113.         my $data=Xchat::user_info("$nick");
  114.         if (!$data){
  115.                 Xchat::print("invalid user");
  116.                 return Xchat::EAT_ALL;
  117.         }
  118.         $host=$data->{"host"};
  119.         @parts=split("@",$host);
  120.         $akas=checkAlias($nick,$parts[0],$parts[1]);
  121.         Xchat::printf("$nick$akas");
  122.         return Xchat::EAT_ALL;
  123. }
  124.  
  125.  
  126. sub checkAlias{
  127.         $nick=shift(@_);
  128.         $ident=shift(@_);
  129.         $hostmask=shift(@_);
  130.         $aliases="";
  131.         foreach $line (split "\n", readFile($hostmasks)){
  132.                 my($n, $i, $h)=(split "=", $line);
  133.                 if ($h eq $hostmask){
  134.                         if ($n ne $nick){
  135.                                 $aliases="$aliases aka. $n" if (index($aliases,"aka. $n")==-1);
  136.                         }
  137.                 }
  138.         }
  139.         return $aliases;
  140. }
  141.  
  142. sub addAlias{
  143.         $nick=shift(@_);
  144.         $ident=shift(@_);
  145.         $hostmask=shift(@_);
  146.         $db=readFile($hostmasks);
  147.         open(DB, ">$hostmasks");
  148.         foreach $line(split "\n", $db){
  149.                 my($n,$i, $h)=(split "=", $line);
  150.                 print DB "$n=$i=$h\n" if (($n ne $nick)||($i ne $ident)||($h ne $hostmask));
  151.         }
  152.         print DB "$nick=$ident=$hostmask\n";
  153.         close(DB);
  154. }
  155.  
  156. sub nicktraceAddHandler{addAlias($_[0][1],$_[0][2],$_[0][3]);Xchat::print("Added to hostmask.db");return Xchat::EAT_ALL;}
  157.  
  158. sub joinHandler{
  159.         $mask=$_[0][2];
  160.         $nick=$_[0][0];
  161.         $chan=$_[0][1];
  162.         if (index($nick,"\002\002")==0){return Xchat::EAT_NONE;}
  163.         @parts2=split("@",$mask);
  164.         $ident=$parts2[0];
  165.         $hostmask=$parts2[1];
  166.  
  167. #       Xchat::print("Ray: $nick | $chan | $ident | $hostmask ");
  168.  
  169.         $alias=checkAlias($nick,$ident,$hostmask);
  170.         &addAlias($nick,$ident,$hostmask)if ($autoAdd==1);
  171.         if ($outputType==0){
  172.                 my @ret=();
  173.                 push(@ret,"\002\002$nick$alias");push(@ret,$chan);push(@ret,"$mask");
  174.                 $rVal=Xchat::emit_print('Join',@ret);
  175.                 if ($rVal!=1){ #emit_print fails (why ever)
  176.                         Xchat::print("emit_print failed (returned $rVal)");
  177.                         Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  178.                 }
  179.                 return Xchat::EAT_ALL;
  180.         }
  181.         if ($outputType==1){ #notice
  182.                 my @ret=();
  183.                 push(@ret,"nickTrace");push(@ret,"\002\002$nick$alias");
  184.                 Xchat::set_context("(notices)");
  185.                 $rVal=Xchat::emit_print('Notice',@ret);
  186.                 if ($rVal!=1){ #emit_print fails (why ever)
  187.                         Xchat::print("emit_print failed (returned $rVal)");
  188.                         #Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  189.                 }
  190.         }
  191.         if ($outputType==2){ #server notice
  192.                 my @ret=();
  193.                 push(@ret,"\002\002$nick$alias");push(@ret,"nickTrace");
  194.                 Xchat::set_context("(snotices)");
  195.                 $rVal=Xchat::emit_print('Server Notice',@ret);
  196.                 if ($rVal!=1){ #emit_print fails (why ever)
  197.                         Xchat::print("emit_print failed (returned $rVal)");
  198.                         #Xchat::print("\002$nick$alias\002 ($mask) has joined $chan");
  199.                 }
  200.         }
  201.        
  202.         return Xchat::EAT_NONE;
  203. }
  204.  
  205. sub nickHandler{
  206.         $mask=$_[0][0];
  207.         $nick=substr($_[0][2],1);
  208.         @parts1=split("!",$mask);
  209.         @parts2=split("@",$parts1[1]);
  210.         $ident=$parts2[0];
  211.         $hostmask=$parts2[1];
  212.         if ($autoAdd==1) {
  213.             addAlias($nick,$ident,$hostmask);
  214.     }
  215.         return Xchat::EAT_NONE;
  216. }
  217.  
  218. sub mee{
  219.         my $mask1=uc(shift(@_));my $mask2=uc(shift(@_));my $maxLen; my $minLen;
  220.         if (length($mask1)>length($mask2)){$maxLen=length($mask1);$minLen=length($mask2);}
  221.         else {$maxLen=length($mask2);$minLen=length($mask1);}
  222.         for ($i=1;$i<=$minLen;$i++){return int(($i-1)*100/$maxLen) if (substr($mask1,length($mask1)-$i) ne substr($mask2,length($mask2)-$i));}
  223.         return 100;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement