home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 2.x / plum2_32_1.lzh / module / channel / filter.plm < prev   
Text File  |  1999-02-20  |  7KB  |  263 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: filter.plm,v 2.4 1999/01/24 15:18:29 hasegawa Exp $
  3. # copyright (c)1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package channel_filter;
  6.  
  7. $_ = 'channel_filter';
  8.  
  9. sub module_enable {
  10.   local($userno) = @_;
  11.   foreach $cno (&'array($'clientlist)) {
  12.     next unless $'avail[$cno];
  13.     next unless $'userno[$cno] == $userno;
  14.     $visiblelist[$cno] = $'channellist[$cno];
  15.     $joinlist[$cno] = '';
  16.   }
  17. }
  18.  
  19. sub module_disable {
  20.   local($userno) = @_;
  21.   foreach $cno (&'array($'clientlist)) {
  22.     next unless $'avail[$cno];
  23.     next unless $'userno[$cno] == $userno;
  24.     foreach $chan (&'array($'channellist[$'server[$cno]])) {
  25.       if (!&'exist($visiblelist[$cno], $chan)) {
  26.         $joinlist[$cno] = &'add($joinlist[$cno], $chan);
  27.         &join_channel($cno, $chan);
  28.       }
  29.     }
  30.     $visiblelist[$cno] = '';
  31.     $joinlist[$cno] = '';
  32.   }
  33. }
  34.  
  35. sub client_open {
  36.   local($clientno) = @_;
  37.   $visiblelist[$clientno] = '';
  38.   $joinlist[$clientno] = '';
  39. }
  40.  
  41. sub client_close {
  42.   local($clientno) = @_;
  43.   $visiblelist[$clientno] = '';
  44.   $joinlist[$clientno] = '';
  45. }
  46.  
  47. sub cp_kick {
  48.   local($clientno, $prefix, $cmd, @params) = @_;
  49.   if (!&'exist($visiblelist[$clientno], $params[0])) {
  50.     return ();
  51.   }
  52.   return ($prefix, $cmd, @params);
  53. }
  54.  
  55. sub cs_join {
  56.   local($clientno, $prefix, $cmd, @params) = @_;
  57.   local(@chan, @key, @joinchan, @joinkey, $i);
  58.   if ($params[0]) {
  59.     @chan = split(/\,/, $params[0]);
  60.     @key = split(/\,/, $params[1] || '');
  61.     @joinchan = ();
  62.     @joinkey = ();
  63.     for ($i = 0; $i < @chan; $i++) {
  64.       $rchan = &'real($chan[$i]);
  65.       next unless &'channel($rchan);
  66.       $joinlist[$clientno] = &'add($joinlist[$clientno], $rchan);
  67.       if (&'exist($'channellist[$'server[$clientno]], $rchan)) {
  68.         &join_channel($clientno, $rchan);
  69.       } elsif (!&'exist($visiblelist[$clientno], $rchan)) {
  70.         push(@joinchan, $rchan);
  71.         push(@joinkey, $key[$i] || '');
  72.       }
  73.     }
  74.   }
  75.   if (@joinchan) {
  76.     return ($prefix, $cmd, join(',', @joinchan), join(',', @joinkey));
  77.   }
  78.   return ();
  79. }
  80.  
  81. sub cp_join {
  82.   local($clientno, $prefix, $cmd, @params) = @_;
  83.   if (&'exist($joinlist[$clientno], $params[0])) {
  84.     $visiblelist[$clientno] = &'add($visiblelist[$clientno], $params[0]);
  85.     $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[0]);
  86.     return ($prefix, $cmd, @params);
  87.   }
  88.   return ();
  89. }
  90.  
  91. sub cp_nick {
  92.   local($clientno, $prefix, $cmd, @params) = @_;
  93.   local($nick);
  94.   $nick = &'prefix($prefix);
  95.   if ($nick eq $'nick[$clientno]) {
  96.     return ($prefix, $cmd, @params);
  97.   }
  98.   foreach $chan (&'array($visiblelist[$clientno])) {
  99.     if (&'exist($'nameslist{$clientno, $chan}, $nick, "\+$nick", "\@$nick")) {
  100.       return ($prefix, $cmd, @params);
  101.     }
  102.   }
  103.   return ();
  104. }
  105.  
  106. sub cp_notice {
  107.   local($clientno, $prefix, $cmd, @params) = @_;
  108.   if (&'channel($params[0])) {
  109.     if (!&'exist($visiblelist[$clientno], $params[0])) {
  110.       return ();
  111.     }
  112.   }
  113.   return ($prefix, $cmd, @params);
  114. }
  115.  
  116. sub cp_mode {
  117.   local($clientno, $prefix, $cmd, @params) = @_;
  118.   if (&'channel($params[0])) {
  119.     if (!&'exist($visiblelist[$clientno], $params[0])) {
  120.       return ();
  121.     }
  122.   }
  123.   return ($prefix, $cmd, @params);
  124. }
  125.  
  126. sub cs_part {
  127.   local($clientno, $prefix, $cmd, @params) = @_;
  128.   &'c_print($clientno, &'user($clientno), $cmd, @params);
  129.   return ();
  130. }
  131.  
  132. sub cp_privmsg {
  133.   local($clientno, $prefix, $cmd, @params) = @_;
  134.   if (&'channel($params[0])) {
  135.     if (!&'exist($visiblelist[$clientno], $params[0])) {
  136.       return ();
  137.     }
  138.   }
  139.   return ($prefix, $cmd, @params);
  140. }
  141.  
  142. sub cp_quit {
  143.   local($clientno, $prefix, $cmd, @params) = @_;
  144.   local($nick);
  145.   $nick = &'prefix($prefix);
  146.   foreach $chan (&'array($visiblelist[$clientno])) {
  147.     if (&'exist($'nameslist{$clientno, $chan}, $nick, "\+$nick", "\@$nick")) {
  148.       return ($prefix, $cmd, @params);
  149.     }
  150.   }
  151.   return ();
  152. }
  153.  
  154. sub cp_topic {
  155.   local($clientno, $prefix, $cmd, @params) = @_;
  156.   if (!&'exist($visiblelist[$clientno], $params[0])) {
  157.     return ();
  158.   }
  159.   return ($prefix, $cmd, @params);
  160. }
  161.  
  162. sub cp_332 {
  163.   local($clientno, $prefix, $cmd, @params) = @_;
  164.   if (!&'exist($visiblelist[$clientno], $params[1])) {
  165.     return ();
  166.   }
  167.   return ($prefix, $cmd, @params);
  168. }
  169.  
  170. sub cp_353 {
  171.   local($clientno, $prefix, $cmd, @params) = @_;
  172.   if (!&'exist($visiblelist[$clientno], $params[2])) {
  173.     return ();
  174.   }
  175.   return ($prefix, $cmd, @params);
  176. }
  177.  
  178. sub cp_366 {
  179.   local($clientno, $prefix, $cmd, @params) = @_;
  180.   if (!&'exist($visiblelist[$clientno], $params[1])) {
  181.     return ();
  182.   }
  183.   return ($prefix, $cmd, @params);
  184. }
  185.  
  186. sub cp_405 {
  187.   local($clientno, $prefix, $cmd, @params) = @_;
  188.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  189.   return ($prefix, $cmd, @params);
  190. }
  191.  
  192. sub cp_471 {
  193.   local($clientno, $prefix, $cmd, @params) = @_;
  194.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  195.   return ($prefix, $cmd, @params);
  196. }
  197.  
  198. sub cp_473 {
  199.   local($clientno, $prefix, $cmd, @params) = @_;
  200.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  201.   return ($prefix, $cmd, @params);
  202. }
  203.  
  204. sub cp_474 {
  205.   local($clientno, $prefix, $cmd, @params) = @_;
  206.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  207.   return ($prefix, $cmd, @params);
  208. }
  209.  
  210. sub cp_475 {
  211.   local($clientno, $prefix, $cmd, @params) = @_;
  212.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  213.   return ($prefix, $cmd, @params);
  214. }
  215.  
  216. sub cp_476 {
  217.   local($clientno, $prefix, $cmd, @params) = @_;
  218.   $joinlist[$clientno] = &'remove($joinlist[$clientno], $params[1]);
  219.   return ($prefix, $cmd, @params);
  220. }
  221.  
  222. sub join_channel {
  223.   local($cno, $chan) = @_;
  224.   local($sno);
  225.   $sno = $'server[$cno];
  226.   &'c_print($cno, &'user($cno), 'JOIN', $chan);
  227.   &'c_print($cno, $'servername[$cno], '332', $'nick[$cno], $chan, $'topic{$sno, $chan}) if $'topic{$sno, $chan};
  228.   &'c_print($cno, $'servername[$cno], '353', $'nick[$cno], '=', $chan, join(' ', reverse(&'array($'nameslist{$sno, $chan}))));
  229.   &'c_print($cno, $'servername[$cno], '366', $'nick[$cno], $chan, 'End of /NAMES list.');
  230. }
  231.  
  232. __END__
  233. --><HTML><HEAD>
  234. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  235. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  236. <TITLE>channel/filter.plm</TITLE></HEAD><BODY>
  237.  
  238. $B%*%s%i%$%s%I%-%e%a%s%H(B
  239.  
  240.  
  241. <HR><H3>$BL>A0(B</H3>
  242.  
  243. channel/filter.plm - $B%/%i%$%"%s%H$+$i8+$($k%A%c%s%M%k$r@)8B$9$k(B
  244.  
  245.  
  246. <HR><H3>$B@bL@(B</H3>
  247.  
  248. $B%/%i%$%"%s%H$r@\B3$7$?$H$-$K!"<B:]$K$O$$$/$D$+$N%A%c%s%M%k$K(B
  249. $BF~$C$F$$$F$b!"%/%i%$%"%s%H$+$i$O$=$l$,8+$($J$$$h$&$K$7$^$9!#(B
  250. $B$^$?!"%A%c%s%M%k$rH4$1$h$&$H$7$F$b!"<B:]$K$OH4$1$^$;$s!#(B
  251.  
  252.  
  253. <HR><H3>$B%W%m%Q%F%#(B</H3>
  254.  
  255.  
  256. <HR><H3>$B@_DjNc(B</H3>
  257.  
  258. <PRE>
  259. + channel/filter.plm
  260. </PRE>
  261.  
  262. </BODY></HTML>
  263.