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