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 / mode / oper / set.plm < prev   
Text File  |  1999-02-20  |  7KB  |  249 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: set.plm,v 2.26 1999/01/28 12:19:26 hasegawa Exp $
  3. # copyright (c)1997-1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package channel_mode_oper_set;
  6.  
  7. $DELAY = 20;
  8.  
  9. $_ = 'channel_mode_oper_set';
  10.  
  11. sub main_loop {
  12.   local($userno) = @_;
  13.   local($delay, $no, $chan, @names, $nick);
  14.   $delay = &'property($userno, 'delay');
  15.   $delay = $DELAY unless defined($delay);
  16.   foreach $key (keys(%operlist)) {
  17.     ($no, $chan) = split(/$;/, $key, 2);
  18.     next unless $'userno[$no] == $userno;
  19.     next unless &'exist($'nameslist{$no, $chan}, "\@$'nick[$no]");
  20.     next unless $operlist{$key};
  21.     $wait[$userno]++;
  22.     @names = &'array($operlist{$key});
  23.     next unless $wait[$userno] >= $delay;
  24.     $nick = shift(@names);
  25.     next if &'exist($'nameslist{$no, $chan}, "\@$nick");
  26.     &'s_print($no, '', 'MODE', $chan, '+o', $nick);
  27.     $operlist{$key} = &'list(@names);
  28.     $wait[$userno] = 0;
  29.   }
  30. }
  31.  
  32. sub module_disable {
  33.   local($userno) = @_;
  34.   local($no, $chan);
  35.   foreach $key (keys(%operlist)) {
  36.     ($no, $chan) = split(/$;/, $key, 2);
  37.     next unless $'userno[$no] == $userno;
  38.     delete $operlist{$key};
  39.   }
  40. }
  41.  
  42. sub server_close {
  43.   local($serverno) = @_;
  44.   local(@keys, $no, $chan);
  45.   @keys = keys(%operlist);
  46.   foreach $key (@keys) {
  47.     ($no, $chan) = split(/$;/, $key, 2);
  48.     next unless $no == $serverno;
  49.     delete $operlist{$key};
  50.   }
  51. }
  52.  
  53. sub ss_join {
  54.   local($serverno, $prefix, $cmd, @params) = @_;
  55.   local($userno, $nick, $regex, $name, $mode, $delay);
  56.   $userno = $'userno[$serverno];
  57.   $nick = &'prefix($prefix);
  58.   ($name, $mode) = (split(/\cG/, $params[0]), '');
  59.   if ($nick ne $'nick[$serverno] && index($mode, 'o') == -1) {
  60.     if (&check_mask($userno, $prefix, $params[0])) {
  61.       $delay = &'property($userno, 'delay');
  62.       $delay = $DELAY unless defined($delay);
  63.       if ($delay) {
  64.         $operlist{$serverno, $name} = &'add($operlist{$serverno, $name}, $nick);
  65.       } else {
  66.         &'s_print($serverno, '', 'MODE', $name, '+o', $nick);
  67.       }
  68.     }
  69.   }
  70.   return ($prefix, $cmd, @params);
  71. }
  72.  
  73. sub ss_mode {
  74.   local($serverno, $prefix, $cmd, @params) = @_;
  75.   local($chan, $mode, @modes) = @params;
  76.   local($userno, $flag, $name);
  77.   $userno = $'userno[$serverno];
  78.   foreach $char (split(//, $mode)) {
  79.     if ($char eq '+' || $char eq '-') {
  80.       $flag = $char;
  81.     } elsif ($char eq 'b') {
  82.       shift(@modes);
  83.     } elsif ($char eq 'e') {
  84.       shift(@modes);
  85.     } elsif ($char eq 'I') {
  86.       shift(@modes);
  87.     } elsif ($char eq 'k') {
  88.       shift(@modes);
  89.     } elsif ($char eq 'l') {
  90.       shift(@modes) if $flag eq '+';
  91.     } elsif ($char eq 'O') {
  92.       shift(@modes);
  93.     } elsif ($char eq 'o') {
  94.       $name = shift(@modes);
  95.       if ($flag eq '+') {
  96.         $operlist{$serverno, $chan} = &'remove($operlist{$serverno, $chan}, $name);
  97.       }
  98.     } elsif ($char eq 'v') {
  99.       shift(@modes);
  100.     }
  101.   }
  102.   return ($prefix, $cmd, @params);
  103. }
  104.  
  105. sub ss_nick {
  106.   local($serverno, $prefix, $cmd, @params) = @_;
  107.   local($userno, $nick, $no, $chan);
  108.   $userno = $'userno[$serverno];
  109.   $nick = &'prefix($prefix);
  110.   if ($nick ne $'nick[$serverno]) {
  111.     foreach $key (keys(%operlist)) {
  112.       ($no, $chan) = split(/$;/, $key, 2);
  113.       next unless $no == $serverno;
  114.       $operlist{$no, $chan} = &'change($operlist{$no, $chan}, $nick, $params[0]);
  115.     }
  116.   }
  117.   return ($prefix, $cmd, @params);
  118. }
  119.  
  120. sub ss_part {
  121.   local($serverno, $prefix, $cmd, @params) = @_;
  122.   local($nick, $userno);
  123.   $userno = $'userno[$serverno];
  124.   $nick = &'prefix($prefix);
  125.   if ($nick eq $'nick[$serverno]) {
  126.     delete $operlist{$serverno, $params[0]};
  127.   } else {
  128.     $operlist{$serverno, $params[0]} = &'remove($operlist{$serverno, $params[0]}, $nick);
  129.   }
  130.   return ($prefix, $cmd, @params);
  131. }
  132.  
  133. sub ss_quit {
  134.   local($serverno, $prefix, $cmd, @params) = @_;
  135.   local($userno, $nick, $no, $chan);
  136.   $userno = $'userno[$serverno];
  137.   $nick = &'prefix($prefix);
  138.   foreach $key (keys(%operlist)) {
  139.     ($no, $chan) = split(/$;/, $key, 2);
  140.     next unless $no == $serverno;
  141.     $operlist{$no, $chan} = &'remove($operlist{$no, $chan}, $nick);
  142.   }
  143.   return ($prefix, $cmd, @params);
  144. }
  145.  
  146. sub ss_kick {
  147.   local($serverno, $prefix, $cmd, @params) = @_;
  148.   local($userno);
  149.   $userno = $'userno[$serverno];
  150.   if ($params[1] eq $'nick[$serverno]) {
  151.     delete $operlist{$serverno, $params[0]};
  152.   } else {
  153.     $operlist{$serverno, $params[0]} = &'remove($operlist{$serverno, $params[0]}, $params[1]);
  154.   }
  155.   return ($prefix, $cmd, @params);
  156. }
  157.  
  158. sub check_mask {
  159.   local($userno, $prefix, $chan) = @_;
  160.   local($user, $chlist, $list);
  161.   foreach $mask (&'property($userno, 'mask')) {
  162.     ($user, $chlist) = split(/\s+/, $mask);
  163.     $list = '';
  164.     foreach $vchan (split(/\,/, $chlist || '')) {
  165.       $list = &'add($list, &'real($vchan));
  166.     }
  167.     if (&'channel($chan)) {
  168.       next unless (!$list || &'exist($list, $chan));
  169.     } else {
  170.       next unless (!$list || &'exist($list, '*'));
  171.     }
  172.     if ($user =~ /^\-/) {
  173.       $regex = &'regex(substr($user, 1));
  174.       return 0 if $prefix =~ /$regex/i;
  175.     }
  176.     if ($user =~ /^\+/) {
  177.       $regex = &'regex(substr($user, 1));
  178.     } else {
  179.       $regex = &'regex($user);
  180.     }
  181.     return 1 if $prefix =~ /$regex/i;
  182.   }
  183.   return 0;
  184. }
  185.  
  186. __END__
  187. --><HTML><HEAD>
  188. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  189. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  190. <TITLE>channel/mode/oper/set.plm</TITLE></HEAD><BODY>
  191.  
  192. $B%*%s%i%$%s%I%-%e%a%s%H(B
  193.  
  194.  
  195. <HR><H3>$BL>A0(B</H3>
  196.  
  197. channel/mode/oper/set.plm - $BFCDj$N?M$r%A%c%s%M%k%*%Z%l!<%?$K$9$k(B
  198.  
  199.  
  200. <HR><H3>$B@bL@(B</H3>
  201.  
  202. $B%A%c%s%M%k$KF~$C$F$-$??M$,;XDj$5$l$??M$J$i!"(B
  203. $B$=$N?M$r%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  204. $B<B:]$K$O%A%c%s%M%k$KF~$C$F$-$?$H$-$K$9$0$K%A%c%s%M%k%*%Z%l!<%?(B
  205. $B$K$9$k$o$1$G$O$J$/!"0lDj;~4VBT$C$F$+$i%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  206.  
  207.  
  208. <HR><H3>$B%W%m%Q%F%#(B</H3>
  209.  
  210. <DL>
  211. <DT>  channel.mode.oper.set.delay $BBT$A;~4V(B
  212. </DT>
  213. <DD>    $B%A%c%s%M%k%*%Z%l!<%?$K$9$k$^$G$NBT$A;~4V$G$9!#(B
  214.         $BC/$+$,%A%c%s%M%k$KF~$C$F$/$k$H!"(B
  215.         $B$3$3$G;XDj$5$l$?$N?t$@$1FbIt$G%+%&%s%H$7!"(B
  216.         $B$=$N8e$G$=$N?M$r%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  217.         $B%G%U%)%k%H$G$O(B20$B$H$J$C$F$$$^$9!#(B
  218. </DD>
  219. <DT>  channel.mode.oper.set.mask* $B%f!<%6%^%9%/(B [($B%A%c%s%M%kL>(B)]
  220. </DT>
  221. <DD>    $B%A%c%s%M%k$KF~$C$F$-$??M$,$3$3$G;XDj$7$?$b$N$K%^%C%A$7$?$i!"(B
  222.         $B$=$N?M$r%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  223. </DD>
  224. </DL>
  225.  
  226.  
  227. <HR><H3>$B@_DjNc(B</H3>
  228.  
  229. <PRE>
  230. + channel/mode/oper/set.plm
  231. channel.mode.oper.set.mask: +pupu_j!*@*
  232. channel.mode.oper.set.mask: +pupu_d!*@*
  233. </PRE>
  234.  
  235. $B%A%c%s%M%k$KF~$C$F$-$??M$,!V(Bpupu_j!*@*$B!W$+!V(Bpupu_d!*@*$B!W$K(B
  236. $B%^%C%A$7$?>l9g!"$=$N?M$r%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  237.  
  238. <PRE>
  239. + channel/mode/oper/set.plm
  240. channel.mode.oper.set.delay: 0
  241. channel.mode.oper.set.mask: -*!*@*.com
  242. channel.mode.oper.set.mask: +*!*@* %$B$^$I$+(B,#$B$W$i$`(B
  243. </PRE>
  244.  
  245. $B!V(B%$B$^$I$+!W$+!V(B#$B$W$i$`!W$KF~$C$F$-$??M$,!V(B*!*@*.com$B!W$K%^%C%A$7$J$1$l$P!"(B
  246. $B$=$N?M$r$9$0$K%A%c%s%M%k%*%Z%l!<%?$K$7$^$9!#(B
  247.  
  248. </BODY></HTML>
  249.