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