home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 1.x / plum11.lzh / plum11 / main.plm < prev    next >
Text File  |  1997-08-28  |  8KB  |  237 lines

  1. package main;
  2.  
  3. $_ = 'main';
  4.  
  5. sub client_open {
  6.   local($clientno) = @_;
  7.   local($serverno) = $'server[$'userno[$clientno]];
  8.   if ($'avail[$serverno]) {
  9.     if ($'nick[$clientno] ne $'nick[$serverno]) {
  10.       &'c_print($clientno, &'user($clientno), 'NICK', $'nick[$serverno]);
  11.     }
  12.   }
  13.   &'c_print($clientno, $'HOSTNAME, '002', $'nick[$clientno], $msg002[$'userno[$clientno]] || '');
  14.   &'c_print($clientno, $'HOSTNAME, '003', $'nick[$clientno], $msg003[$'userno[$clientno]] || '');
  15.   &'c_print($clientno, $'HOSTNAME, '004', $'nick[$clientno], $msg004[$'userno[$clientno]] || '');
  16.   &joinchannel($clientno);
  17. }
  18.  
  19. sub server_open {
  20.   local($serverno) = @_;
  21.   $msg002[$'userno[$serverno]] = '';
  22.   $msg003[$'userno[$serverno]] = '';
  23.   $msg004[$'userno[$serverno]] = '';
  24.   $'chanlist[$'userno[$serverno]] = $;;
  25.   foreach $clientno (&'array($'clientlist)) {
  26.     next unless $'userno[$clientno] == $'userno[$serverno];
  27.     next unless $'avail[$clientno];
  28.     next unless $'nick[$clientno] ne $'nick[$serverno];
  29.     &'c_print($clientno, &'user($clientno), 'NICK', $'nick[$serverno]);
  30.   }
  31. }
  32.  
  33. sub cs_privmsg {
  34.   local($clientno, $prefix, $cmd, $chan, $msg) = @_;
  35.   foreach $cno (&'array($'clientlist)) {
  36.     next unless $clientno != $cno;
  37.     next unless $'userno[$clientno] == $'userno[$cno];
  38.     next unless $'avail[$cno];
  39.     &'c_print($cno, &'user($cno), $cmd, $chan, $msg);
  40.   }
  41.   return ($prefix, $cmd, $chan, $msg);
  42. }
  43.  
  44. sub cs_quit {
  45.   local($clientno, $prefix, $cmd, $msg) = @_;
  46.   $msg = $'nick[$clientno] unless $msg;
  47.   &'c_print($clientno, '', 'ERROR', "Closing Link: $'nick[$clientno]" . "[$'host[$clientno]] ($msg)");
  48.   &'c_close($clientno);
  49.   return ();
  50. }
  51.  
  52. sub cp_nick {
  53.   local($clientno, $prefix, $cmd, $newnick) = @_;
  54.   if (&'prefix($prefix) eq $'nick[$clientno]) {
  55.     $'nick[$clientno] = $newnick;
  56.   }
  57.   return ($prefix, $cmd, $newnick);
  58. }
  59.  
  60. sub ss_ping {
  61.   local($serverno, $prefix, $cmd, @params) = @_;
  62.   &'s_print($serverno, '', 'PONG', @params);
  63.   return ($prefix, $cmd, @params);
  64. }
  65.  
  66. sub ss_nick {
  67.   local($serverno, $prefix, $cmd, $newnick) = @_;
  68.   local($userno, $nick);
  69.   $userno = $'userno[$serverno];
  70.   $nick = &'prefix($prefix);
  71.   if ($nick eq $'nick[$serverno]) {
  72.     $'nick[$serverno] = $newnick;
  73.     $'nickname[$userno] = $newnick;
  74.   }
  75.   foreach $chan (&'array($'chanlist[$userno])) {
  76.     $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, $nick, $newnick, "+$nick", "+$newnick", "\@$nick", "\@$newnick");
  77.   }
  78.   return ($prefix, $cmd, $newnick);
  79. }
  80.  
  81. sub ss_join {
  82.   local($serverno, $prefix, $cmd, $chan) = @_;
  83.   local($userno, $nick, $name, $mode);
  84.   $userno = $'userno[$serverno];
  85.   $nick = &'prefix($prefix);
  86.   ($name, $mode) = (split(/\cG/, $chan), '');
  87.   if ($nick eq $'nick[$serverno]) {
  88.     $'chanlist[$userno] = &'add($'chanlist[$userno], $name);
  89.     $'nameslist{$userno, $name} = $;
  90.   } else {
  91.     if ($mode =~ /o/i) {
  92.       $'nameslist{$userno, $name} = &'add($'nameslist{$userno, $name}, "\@$nick");
  93.     } elsif ($mode =~ /v/i) {
  94.       $'nameslist{$userno, $name} = &'add($'nameslist{$userno, $name}, "\+$nick");
  95.     } else {
  96.       $'nameslist{$userno, $name} = &'add($'nameslist{$userno, $name}, $nick);
  97.     }
  98.   }
  99.   return ($prefix, $cmd, $chan);
  100. }
  101.  
  102. sub ss_part {
  103.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  104.   local($userno, $nick);
  105.   $userno = $'userno[$serverno];
  106.   $nick = &'prefix($prefix);
  107.   if ($nick eq $'nick[$serverno]) {
  108.     $'chanlist[$userno] = &'remove($'chanlist[$userno], $chan);
  109.     delete $'nameslist{$userno, $chan};
  110.   } else {
  111.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $nick, "+$nick", "\@$nick");
  112.   }
  113.   return ($prefix, $cmd, $chan, $msg);
  114. }
  115.  
  116. sub ss_kick {
  117.   local($serverno, $prefix, $cmd, $chan, $who, $msg) = @_;
  118.   local($userno) = $'userno[$serverno];
  119.   if ($who eq $'nick[$serverno]) {
  120.     $'chanlist[$userno] = &'remove($'chanlist[$userno], $chan);
  121.     delete $'nameslist{$userno, $chan};
  122.   } else {
  123.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $who, "+$who", "\@$who");
  124.   }
  125.   return ($prefix, $cmd, $chan, $who, $msg);
  126. }
  127.  
  128. sub ss_quit {
  129.   local($serverno, $prefix, $cmd, $msg) = @_;
  130.   local($userno, $nick);
  131.   $userno = $'userno[$serverno];
  132.   $nick = &'prefix($prefix);
  133.   foreach $chan (&'array($'chanlist[$userno])) {
  134.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $nick, "+$nick", "\@$nick");
  135.   }
  136.   return ($prefix, $cmd, $msg);
  137. }
  138.  
  139. sub ss_mode {
  140.   local($serverno, $prefix, $cmd, @params) = @_;
  141.   local($chan, $mode, @modes) = @params;
  142.   local($userno, $flag, $name);
  143.   $userno = $'userno[$serverno];
  144.   foreach $char (split(//, $mode)) {
  145.     if ($char eq '+' || $char eq '-') {
  146.       $flag = $char;
  147.     } elsif ($char eq 'b') {
  148.       shift(@modes);
  149.     } elsif ($char eq 'i') {
  150.     } elsif ($char eq 'k') {
  151.       if ($flag eq '+') {
  152.         $'key{$userno, $chan} = shift(@modes);
  153.       } elsif ($flag eq '-') {
  154.         $'key{$userno, $chan} = '';
  155.         shift(@modes);
  156.       }
  157.     } elsif ($char eq 'l') {
  158.       if ($flag eq '+') {
  159.         $'limit{$userno, $chan} = shift(@modes);
  160.       } elsif ($flag eq '-') {
  161.         $'limit{$userno, $chan} = '';
  162.       }
  163.     } elsif ($char eq 'o') {
  164.       $name = shift(@modes);
  165.       if ($flag eq '+') {
  166.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, $name, "\@$name", "+$name", "\@$name");
  167.       } elsif ($flag eq '-') {
  168.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, "\@$name", $name);
  169.       }
  170.     } elsif ($char eq 'v') {
  171.       $name = shift(@modes);
  172.       if ($flag eq '+') {
  173.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, $name, "+$name");
  174.       } elsif ($flag eq '-') {
  175.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, "+$name", $name);
  176.       }
  177.     }
  178.   }
  179.   return ($prefix, $cmd, @params);
  180. }
  181.  
  182. sub ss_topic {
  183.   local($serverno, $prefix, $cmd, $chan, $topic) = @_;
  184.   $'topic{$'userno[$serverno], $chan} = $topic;
  185.   return ($prefix, $cmd, $chan, $topic);
  186. }
  187.  
  188. sub ss_002 {
  189.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  190.   $msg002[$'userno[$serverno]] = $msg;
  191.   return ($prefix, $cmd, $nick, $msg);
  192. }
  193.  
  194. sub ss_003 {
  195.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  196.   $msg003[$'userno[$serverno]] = $msg;
  197.   return ($prefix, $cmd, $nick, $msg);
  198. }
  199.  
  200. sub ss_004 {
  201.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  202.   $msg004[$'userno[$serverno]] = $msg;
  203.   return ($prefix, $cmd, $nick, $msg);
  204. }
  205.  
  206. sub ss_332 {
  207.   local($serverno, $prefix, $cmd, $nick, $chan, $topic) = @_;
  208.   $'topic{$'userno[$serverno], $chan} = $topic;
  209.   return ($prefix, $cmd, $nick, $chan, $topic);
  210. }
  211.  
  212. sub ss_353 {
  213.   local($serverno, $prefix, $cmd, @params) = @_;
  214.   local($userno) = $'userno[$serverno];
  215.   $'nameslist{$userno, $params[2]} = &'add($'nameslist{$userno, $params[2]}, reverse(split(/\s+/, $params[3])));
  216.   return ($prefix, $cmd, @params);
  217. }
  218.  
  219. sub joinchannel {
  220.   local($clientno) = @_;
  221.   local($userno) = $'userno[$serverno];
  222.   foreach $channel (&'array($'chanlist[$userno])) {
  223.     &'c_print($clientno, &'user($clientno), 'JOIN', $channel);
  224.     &'c_print($clientno, &'user($clientno), '332', $'nick[$clientno], $channel, $'topic{$userno, $channel}) if $'topic{$userno, $channel};
  225.     &'c_print($clientno, $HOSTNAME, '353', $'nick[$clientno], '=', $channel, join(' ', &'rarray($'nameslist{$userno, $channel})));
  226.     &'c_print($clientno, $HOSTNAME, '366', $'nick[$clientno], $channel, 'End of /NAMES list.');
  227.   }
  228. }
  229.  
  230. sub partchannel {
  231.   local($clientno) = @_;
  232.   foreach $channel (&'array($'chanlist[$'userno[$clientno]])) {
  233.     &'c_print($clientno, &'user($clientno), 'PART', $channel);
  234.   }
  235. }
  236.  
  237.