home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 1.x / plum10.lzh / plum10 / main.plm < prev    next >
Text File  |  1997-08-13  |  7KB  |  230 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);
  84.   $userno = $'userno[$serverno];
  85.   $nick = &'prefix($prefix);
  86.   if ($nick eq $'nick[$serverno]) {
  87.     $'chanlist[$userno] = &'add($'chanlist[$userno], $chan);
  88.     $'nameslist{$userno, $chan} = $;
  89.   } else {
  90.     $'nameslist{$userno, $chan} = &'add($'nameslist{$userno, $chan}, $nick);
  91.   }
  92.   return ($prefix, $cmd, $chan);
  93. }
  94.  
  95. sub ss_part {
  96.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  97.   local($userno, $nick);
  98.   $userno = $'userno[$serverno];
  99.   $nick = &'prefix($prefix);
  100.   if ($nick eq $'nick[$serverno]) {
  101.     $'chanlist[$userno] = &'remove($'chanlist[$userno], $chan);
  102.     delete $'nameslist{$userno, $chan};
  103.   } else {
  104.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $nick, "+$nick", "\@$nick");
  105.   }
  106.   return ($prefix, $cmd, $chan, $msg);
  107. }
  108.  
  109. sub ss_kick {
  110.   local($serverno, $prefix, $cmd, $chan, $who, $msg) = @_;
  111.   local($userno) = $'userno[$serverno];
  112.   if ($who eq $'nick[$serverno]) {
  113.     $'chanlist[$userno] = &'remove($'chanlist[$userno], $chan);
  114.     delete $'nameslist{$userno, $chan};
  115.   } else {
  116.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $who, "+$who", "\@$who");
  117.   }
  118.   return ($prefix, $cmd, $chan, $who, $msg);
  119. }
  120.  
  121. sub ss_quit {
  122.   local($serverno, $prefix, $cmd, $msg) = @_;
  123.   local($userno, $nick);
  124.   $userno = $'userno[$serverno];
  125.   $nick = &'prefix($prefix);
  126.   foreach $chan (&'array($'chanlist[$userno])) {
  127.     $'nameslist{$userno, $chan} = &'remove($'nameslist{$userno, $chan}, $nick, "+$nick", "\@$nick");
  128.   }
  129.   return ($prefix, $cmd, $msg);
  130. }
  131.  
  132. sub ss_mode {
  133.   local($serverno, $prefix, $cmd, @params) = @_;
  134.   local($chan, $mode, @modes) = @params;
  135.   local($userno, $flag, $name);
  136.   $userno = $'userno[$serverno];
  137.   foreach $char (split(//, $mode)) {
  138.     if ($char eq '+' || $char eq '-') {
  139.       $flag = $char;
  140.     } elsif ($char eq 'b') {
  141.       shift(@modes);
  142.     } elsif ($char eq 'i') {
  143.     } elsif ($char eq 'k') {
  144.       if ($flag eq '+') {
  145.         $'key{$userno, $chan} = shift(@modes);
  146.       } elsif ($flag eq '-') {
  147.         $'key{$userno, $chan} = '';
  148.         shift(@modes);
  149.       }
  150.     } elsif ($char eq 'l') {
  151.       if ($flag eq '+') {
  152.         $'limit{$userno, $chan} = shift(@modes);
  153.       } elsif ($flag eq '-') {
  154.         $'limit{$userno, $chan} = '';
  155.       }
  156.     } elsif ($char eq 'o') {
  157.       $name = shift(@modes);
  158.       if ($flag eq '+') {
  159.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, $name, "\@$name", "+$name", "\@$name");
  160.       } elsif ($flag eq '-') {
  161.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, "\@$name", $name);
  162.       }
  163.     } elsif ($char eq 'v') {
  164.       $name = shift(@modes);
  165.       if ($flag eq '+') {
  166.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, $name, "+$name");
  167.       } elsif ($flag eq '-') {
  168.         $'nameslist{$userno, $chan} = &'change($'nameslist{$userno, $chan}, "+$name", $name);
  169.       }
  170.     }
  171.   }
  172.   return ($prefix, $cmd, @params);
  173. }
  174.  
  175. sub ss_topic {
  176.   local($serverno, $prefix, $cmd, $chan, $topic) = @_;
  177.   $'topic{$'userno[$serverno], $chan} = $topic;
  178.   return ($prefix, $cmd, $chan, $topic);
  179. }
  180.  
  181. sub ss_002 {
  182.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  183.   $msg002[$'userno[$serverno]] = $msg;
  184.   return ($prefix, $cmd, $nick, $msg);
  185. }
  186.  
  187. sub ss_003 {
  188.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  189.   $msg003[$'userno[$serverno]] = $msg;
  190.   return ($prefix, $cmd, $nick, $msg);
  191. }
  192.  
  193. sub ss_004 {
  194.   local($serverno, $prefix, $cmd, $nick, $msg) = @_;
  195.   $msg004[$'userno[$serverno]] = $msg;
  196.   return ($prefix, $cmd, $nick, $msg);
  197. }
  198.  
  199. sub ss_332 {
  200.   local($serverno, $prefix, $cmd, $nick, $chan, $topic) = @_;
  201.   $'topic{$'userno[$serverno], $chan} = $topic;
  202.   return ($prefix, $cmd, $nick, $chan, $topic);
  203. }
  204.  
  205. sub ss_353 {
  206.   local($serverno, $prefix, $cmd, @params) = @_;
  207.   local($userno) = $'userno[$serverno];
  208.   $'nameslist{$userno, $params[2]} = &'add($'nameslist{$userno, $params[2]}, reverse(split(/\s+/, $params[3])));
  209.   return ($prefix, $cmd, @params);
  210. }
  211.  
  212. sub joinchannel {
  213.   local($clientno) = @_;
  214.   local($userno) = $'userno[$serverno];
  215.   foreach $channel (&'array($'chanlist[$userno])) {
  216.     &'c_print($clientno, &'user($clientno), 'JOIN', $channel);
  217.     &'c_print($clientno, &'user($clientno), '332', $'nick[$clientno], $channel, $'topic{$userno, $channel}) if $'topic{$userno, $channel};
  218.     &'c_print($clientno, $HOSTNAME, '353', $'nick[$clientno], '=', $channel, join(' ', &'rarray($'nameslist{$userno, $channel})));
  219.     &'c_print($clientno, $HOSTNAME, '366', $'nick[$clientno], $channel, 'End of /NAMES list.');
  220.   }
  221. }
  222.  
  223. sub partchannel {
  224.   local($clientno) = @_;
  225.   foreach $channel (&'array($'chanlist[$'userno[$clientno]])) {
  226.     &'c_print($clientno, &'user($clientno), 'PART', $channel);
  227.   }
  228. }
  229.  
  230.