home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 2.x / plum2_15_2.lzh / module / auto / yuurii.plm < prev   
Text File  |  1998-01-14  |  13KB  |  435 lines

  1. # <!-- -*- perl -*-
  2. # $Id: yuurii.plm,v 2.12 1998/01/15 02:53:51 hasegawa Exp $
  3. # copyright (c)1997 pupu_j <hasegawa@agusa.nuie.nagoya-u.ac.jp>
  4.  
  5. package auto_yuurii;
  6.  
  7. $PLUGINRC = '.pluginrc';
  8. $CACHE = 50;
  9. $DOWN = 48;
  10. $DOWNMES = 'auto down';
  11. $TIMER = 2000;
  12. $USETIMER = 0;
  13. $HEADER = '%H:%M';
  14. $DEBUG = 'logdebug';
  15. $MODE = umask() ^ 0666;
  16. $CLIENTINFO = 'HELP';
  17.  
  18. $_ = 'auto_yuurii';
  19.  
  20. sub main_loop {
  21.   local($userno) = @_;
  22.   local($nowtime, $i, $vchan, $hour, $day);
  23.   $nowtime[$userno] = time();
  24.   $lasttime[$userno] = $nowtime[$userno] unless $lasttime[$userno];
  25.   $usetimer = &'property($userno, 'usetimer') || $USETIMER;
  26.   for ($i = $lasttime[$userno]; $i < $nowtime[$userno]; $i++) {
  27.     foreach $chan (&'array($'channellist[$userno])) {
  28.       $channeltimer{$userno, $chan}-- if $channeltimer{$userno, $chan} > 0;
  29.       $channeltimer{$userno, $chan}++ if $channeltimer{$userno, $chan} < 0;
  30.     }
  31.     next unless $usetimer;
  32.     next unless $i % $usetimer == 0;
  33.     &plugin($userno, '', 'bot_timer', '', '', '');
  34.   }
  35.   $lasttime[$userno] = $nowtime[$userno];
  36.   ($hour, $day) = (localtime(time()))[2, 3];
  37.   $lastday[$userno] = $hour unless defined($lastday[$userno]);
  38.   $lasthour[$userno] = $day unless defined($lasthour[$userno]);
  39.   &daily if ($lastday[$userno]  != $day && defined(&daily));
  40.   &hourly if ($lasthour[$userno] != $hour && defined(&hourly));
  41.   $lastday[$userno] = $day;
  42.   $lasthour[$userno] = $hour;
  43. }
  44.  
  45. sub ss_invite {
  46.   local($serverno, $prefix, $cmd, $me, $chan) = @_;
  47.   local($nick);
  48.   $nick = &'prefix($prefix);
  49.   &plugin($'userno[$serverno], $prefix, $cmd, $chan, $nick, '');
  50.   return ($prefix, $cmd, $me, $chan);
  51. }
  52.  
  53. sub ss_join {
  54.   local($serverno, $prefix, $cmd, $chan) = @_;
  55.   local($userno, $nick, $name, $mode, $timer);
  56.   $userno = $'userno[$serverno];
  57.   $nick = &'prefix($prefix);
  58.   ($name, $mode) = split(/\cG/, $chan);
  59.   if ($nick eq $'nick[$serverno]) {
  60.     $timer = &'property($userno, 'timer') || $TIMER;
  61.     $channeltimer{$userno, $name} = $timer;
  62.   } else {
  63.     &plugin($userno, $prefix, $cmd, $name, $nick, '');
  64.   }
  65.   return ($prefix, $cmd, $chan);
  66. }
  67.  
  68. sub ss_nick {
  69.   local($serverno, $prefix, $cmd, $newnick) = @_;
  70.   local($nick);
  71.   $nick = &'prefix($prefix);
  72.   &plugin($'userno[$serverno], $prefix, $cmd, 'ALL', $newnick, $nick) if $newnick ne $'nick[$serverno];
  73.   return ($prefix, $cmd, $newnick);
  74. }
  75.  
  76. sub ss_part {
  77.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  78.   local($nick);
  79.   $nick = &'prefix($prefix);
  80.   &plugin($'userno[$serverno], $prefix, $cmd, $chan, $nick, $msg) if $nick ne $'nick[$serverno];
  81.   return ($prefix, $cmd, $chan, $msg);
  82. }
  83.  
  84. sub ss_privmsg {
  85.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  86.   local($userno, $nick, $vchan, $tmp, $rest, $ctcp);
  87.   $userno = $'userno[$serverno];
  88.   $nick = &'prefix($prefix);
  89.   $vchan = &'alias($chan);
  90.   $tmp = '';
  91.   $rest = $msg;
  92.   while ($rest =~ /^(.*)\cA([^\cA]*)\cA(.*)$/) {
  93.     $tmp .= $1;
  94.     $ctcp = $2;
  95.     $rest = $3;
  96.     &ctcp($userno, $prefix, $vchan, $ctcp);
  97.   }
  98.   $tmp .= $rest || '';
  99.   &plugin($userno, $prefix, $cmd, $chan, $nick, $msg);
  100.   return ($prefix, $cmd, $chan, $msg);
  101. }
  102.  
  103. sub cpss_help {
  104.   local($serverno, $prefix, $cmd, @params) = @_;
  105.   local($nick);
  106.   $nick = &'prefix($prefix);
  107.   if (@help) {
  108.     foreach $help (@help) {
  109.       &'s_print($serverno, '', 'NOTICE', $nick, "\cA" . join(' ', $cmd, $help) . "\cA");
  110.     }
  111.   } else {
  112.     &'s_print($serverno, '', 'NOTICE', $nick, "\cA" . join(' ', $cmd, 'no help') . "\cA");
  113.   }
  114.   return ($prefix, $cmd, @params);
  115. }
  116.  
  117. sub plugin {
  118.   local($userno, $prefix, $command, @arg) = @_;
  119.   local($mtime, @plugin, $my_nick, $from, $where, $chanlist, $autojoinchanlist, %nameslist, %time_count, $down, $down_mes, $logmode, $use_timer);
  120.   &begin_yuurii();
  121.   $mtime = (stat($pluginrc))[9];
  122.   if (defined($mtime) && ($modify{$pluginrc} || 0) != $mtime) {
  123.     $modify{$pluginrc} = $mtime;
  124.     undef &pluginsub if defined(&pluginsub);
  125.     if (open(PLUGIN, $pluginrc)) {
  126.       @plugin = <PLUGIN>;
  127.       close(PLUGIN);
  128.     }
  129.     eval "sub pluginsub { @plugin }";
  130.   }
  131.   &pluginsub(@arg) if defined(&pluginsub);
  132.   &end_yuurii();
  133. }
  134.  
  135. sub ctcp {
  136.   local($userno, $prefix, $chan, $msg) = @_;
  137.   local($cmd, $mes, $sub, $my_nick, $from, $where, $chanlist, $autojoinchanlist, %nameslist, %time_count, $down, $down_mes, $logmode, $use_timer);
  138.   &begin_yuurii();
  139.   ($cmd, $mes) = split(/\s/, $msg, 2);
  140.   $sub = "ctcp_\L$cmd\E";
  141.   &$sub($mes) if defined(&$sub);
  142.   &end_yuurii();
  143. }
  144.  
  145. sub begin_yuurii {
  146.   local($vchan);
  147.   $my_nick = $'nickname[$userno];
  148.   if (index($prefix, '!') != -1) {
  149.     $from = (&'prefix($prefix))[0] || '';
  150.     $where = join('@', (&'prefix($prefix), '', ''));
  151.   } else {
  152.     $from = $prefix;
  153.     $where = '';
  154.   }
  155.   $chanlist = $;;
  156.   $autojoinchanlist = $;;
  157.   foreach $chan (&'array($'channellist[$userno])) {
  158.     $vchan = &'alias($chan);
  159.     $chanlist = &'add($chanlist, $vchan);
  160.     $autojoinchanlist = &'add($autojoinchanlist, $vchan);
  161.     $nameslist{$vchan} = $'nameslist{$userno, $chan};
  162.     $time_count{$vchan} = $channeltimer{$userno, $chan};
  163.   }
  164.   $down = &'property($userno, 'down') || $DOWN;
  165.   $down_mes = &'property($userno, 'downmes') || $DOWNMES;
  166.   $timer_count_def = &'property($userno, 'timer') || $TIMER;
  167.   $pluginrc = &'property($userno, 'pluginrc') || $PLUGINRC;
  168.   $use_timer = &'property($userno, 'usetimer') ? 'on' : 'off';
  169.   $logmode = &'property($userno, 'mode');
  170.   if (defined($logmode)) {
  171.     $logmode = oct($logmode) | 0600;
  172.   } else {
  173.     $logmode = $MODE | 0600;
  174.   }
  175. }
  176.  
  177. sub end_yuurii {
  178.   foreach $chan (&'array($'channellist[$userno])) {
  179.     $vchan = &'alias($chan);
  180.     $channeltimer{$userno, $chan} = $time_count{$vchan};
  181.   }
  182. }
  183.  
  184. sub local_chan {
  185.   local($chan) = @_;
  186.   if ($chan) {
  187.     return (&'real($chan), &'alias($chan));
  188.   } else {
  189.     return ('', '');
  190.   }
  191. }
  192.  
  193. sub now_time {
  194.   ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
  195.   $mon++;
  196.   $year += 1900;
  197.   $header = &'property($userno, 'header');
  198.   $header = $HEADER unless defined($header);
  199.   $header = &'date($header) . ' ';
  200. }
  201.  
  202. sub redo {
  203.   local($file) = @_;
  204.   local(@names, $sub, $sublist);
  205.   return if (($modify{$file} || 0) == (stat($file))[9]);
  206.   $modify{$file} = (stat($file))[9];
  207.   if (defined($sublist{$file})) {
  208.     foreach $name (&'array($sublist{$file})) {
  209.       undef &$name;
  210.     }
  211.   }
  212.   if ($] < 5) {
  213.     @names = keys(%_auto_yuurii);
  214.   } else {
  215.     eval '@names = keys(%auto_yuurii::)';
  216.   }
  217.   foreach $name (@names) {
  218.     $sub = "auto_yuurii\'$name";
  219.     next unless defined(&$sub);
  220.     $sublist = &'add($sublist, $sub);
  221.   }
  222.   do $file;
  223.   if ($] < 5) {
  224.     @names = keys(%_auto_yuurii);
  225.   } else {
  226.     eval '@names = keys(%auto_yuurii::)';
  227.   }
  228.   foreach $name (@names) {
  229.     $sub = "auto_yuurii\'$name";
  230.     next unless defined(&$sub);
  231.     next if &'exist($sublist, $sub);
  232.     $sublist{$file} = &'add($sublist{$file}, $sub);
  233.   }
  234. }
  235.  
  236. sub sendCchan {
  237.   local($msg) = @_;
  238.   local($prefix, $cmd, @params);
  239.   $msg =~ s/[\r\n]+//g;
  240.   ($prefix, $cmd, @params) = &'parse($msg);
  241.   foreach $cno (&'array($'clientlist)) {
  242.     next unless $'avail[$cno];
  243.     next unless $'userno[$cno] == $userno;
  244.     &'c_print($cno, $prefix, $cmd, @params);
  245.   }
  246. }
  247.  
  248. sub sendS {
  249.   local($msg) = @_;
  250.   $msg =~ s/[\r\n]+//g;
  251.   &'s_print($'server[$userno], &'parse($msg));
  252. }
  253.  
  254. sub sendSCL {
  255.   local($msg, $chan) = @_;
  256.   local($rchan, $vchan, $cache, @message);
  257.   ($rchan, $vchan) = &local_chan($chan);
  258.   &sendCchan(":$'nickname[$userno] PRIVMSG $rchan :$msg\n");
  259.   &sendS("PRIVMSG $rchan :$msg\n");
  260.   @message = &'array($messagelist[$userno]);
  261.   push(@message, ">$vchan< $msg");
  262.   $cache = &'property($userno, 'cache') || $CACHE;
  263.   while (scalar(@message) > $cache) {
  264.     shift(@message);
  265.   }
  266.   $messagelist[$userno] = &'list(@message);
  267. }
  268.  
  269. sub cached {
  270.   local($msg, $chan) = @_;
  271.   local($vchan);
  272.   $vchan = &'alias($chan);
  273.   return if &'exist($messagelist[$userno], ">$vchan< $msg");
  274.   &sendSCL($msg, $chan);
  275. }
  276.  
  277. sub ExistList {
  278.   local($list, $item) = @_;
  279.   return &'exist($list, $item);
  280. }
  281.  
  282. sub Debug {
  283.   local($msg, $chan) = @_;
  284.   local($header, $debug);
  285.   $debug = &'property($userno, 'debug');
  286.   $debug = $DEBUG unless defined($debug);
  287.   $debug = &'date($debug);
  288.   $header = &'property($userno, 'header');
  289.   $header = $HEADER unless defined($header);
  290.   $header = &'date($header);
  291.   if (open(DEBUG, ">>$debug")) {
  292.     select((select(DEBUG), $| = 1)[0]);
  293.     print DEBUG $header, $msg, "\n";
  294.     close(DEBUG);
  295.   }
  296. }
  297.  
  298. sub down {
  299.   local($msg) = @_;
  300.   print STDERR $msg;
  301.   exit;
  302. }
  303.  
  304. sub jcode'euc2jis {
  305.   local(*var) = @_;
  306.   $var = &'euc_jis($var);
  307. }
  308.  
  309. sub jcode'euc2sjis {
  310.   local(*var) = @_;
  311.   $var = &'euc_sjis($var);
  312. }
  313.  
  314. sub jcode'jis2euc {
  315.   local(*var) = @_;
  316.   $var = &'jis_euc($var);
  317. }
  318.  
  319. sub jcode'jis2sjis {
  320.   local(*var) = @_;
  321.   $var = &'jis_sjis($var);
  322. }
  323.  
  324. sub jcode'sjis2euc {
  325.   local(*var) = @_;
  326.   $var = &'sjis_euc($var);
  327. }
  328.  
  329. sub jcode'sjis2jis {
  330.   local(*var) = @_;
  331.   $var = &'sjis_jis($var);
  332. }
  333.  
  334. __END__
  335. --><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  336. <HTML><HEAD><TITLE> auto/yuurii.plm </TITLE></HEAD><BODY>
  337.  
  338. $B%*%s%i%$%s%I%-%e%a%s%H(B
  339.  
  340.  
  341. <HR><H3> $BL>A0(B </H3>
  342.  
  343. auto/yuurii.plm - pirc bot $B$f!<$j$#$N%W%i%0%$%s$rAH$_9~$`(B
  344.  
  345.  
  346. <HR><H3> $B@bL@(B </H3>
  347.  
  348. pirc bot $B$f!<$j$#$N%(%_%e%l!<%7%g%s$r9T$$!"(B
  349. $B$f!<$j$#MQ$N%W%i%0%$%s$r<B9T$G$-$k$h$&$K$7$^$9!#(B
  350. $B$f!<$j$#MQ$N!V(B.pluginrc$B!W$d%W%i%0%$%s$,A4$F$=$N$^$^MxMQ$G$-$^$9!#(B
  351. jcode.pl$B$KAjEv$9$k%k!<%A%s$r4^$s$G$$$k$N$G!"(Bjcode.pl$B$OI,MW$"$j$^$;$s!#(B
  352. $B>\$7$/$O(Bpirc bot $B$f!<$j$#$N%I%-%e%a%s%H$r;2>H$7$F2<$5$$!#(B
  353.  
  354.  
  355. <HR><H3> $B%W%m%Q%F%#(B </H3>
  356.  
  357. <DL>
  358. <DT> auto.yuurii.cache $B%-%c%C%7%e%5%$%:(B
  359. <DD>    $BF1$8%a%C%;!<%8$r2?EY$bH/8@$7$J$$$h$&$K!"(B
  360.         $B$3$3$G;XDj$7$?Bg$-$5$N%-%c%C%7%e$r:n$j$^$9!#(B
  361.         $BH/8@$7$h$&$H$7$F$$$k%a%C%;!<%8$,%-%c%C%7%e$NCf$K$"$C$?>l9g$O(B
  362.         $B$=$N%a%C%;!<%8$rH/8@$7$^$;$s!#(B
  363.         $B$f!<$j$#$N(BCACHE$B$N@_Dj$HF1$8$G$9!#(B
  364. <DT> auto.yuurii.pluginrc $B%U%!%$%kL>(B
  365. <DD>    $B%W%i%0%$%s$N@_Dj%U%!%$%k$r;XDj$7$^$9!#(B
  366.         $B$f!<$j$#$N(BPLUGINRC$B$N@_Dj$HF1$8$G$9!#(B
  367.         $B$f!<$j$#$G;HMQ$7$F$$$?!V(B.pluginrc$B!W$,$=$N$^$^MxMQ$G$-$^$9!#(B
  368. <DT> auto.yuurii.down $B%j%V!<%H4V3V(B
  369. <DD>    $B%a%b%j$NBgNL>CHq$rKI$0$?$a$K!"(B
  370.         $B$3$3$G;XDj$5$l$?;~4V$,7P2a$9$k$H:F5/F0$r9T$$$^$9!#(B
  371.         $B$f!<$j$#$N(BDOWN$B$N@_Dj$HF1$8$G$9!#(B
  372.         $B$?$@$78=:_$O:F5/F0$N5!G=$O$J$$$N$G!"(B
  373.         $B$3$N%W%m%Q%F%#$O;HMQ$7$F$$$^$;$s!#(B
  374. <DT> auto.yuurii.downmes $B%a%C%;!<%8(B
  375. <DD>    $B:F5/F0$r9T$&$H$-$K!"$3$3$G;XDj$7$?%a%C%;!<%8$G(BIRC$B$r=*N;$7$^$9!#(B
  376.         $B$f!<$j$#$N(BDOWNMES$B$N@_Dj$HF1$8$G$9!#(B
  377.         $B$?$@$78=:_$O:F5/F0$N5!G=$O$J$$$N$G!"(B
  378.         $B$3$N%W%m%Q%F%#$O;HMQ$7$F$$$^$;$s!#(B
  379. <DT> auto.yuurii.timer $B%+%&%s%H(B
  380. <DD>    1$BIC4V$K(B1$B2s%+%&%s%H$9$k%A%c%s%M%k%?%$%^$N=i4|CM$G$9!#(B
  381.         $B$f!<$j$#$N(BTIMER$B$N@_Dj$HF1$8$G$9!#(B
  382.         $B%?%$%^$NCM$,(B0$B$h$jBg$-$1$l$P!"(B1$BIC$K(B1$B$:$D8:>/$7!"(B
  383.         0$B$h$j>/$5$1$l$P!"(B1$BIC$K(B1$B$:$DA}2C$7$^$9!#(B
  384. <DT> auto.yuurii.usetimer $B%?%$%^4V3V(B
  385. <DD>    $B;XDj$7$?IC?t$K(B1$B2s$N3d9g$G%W%i%0%$%s$r<B9T$7$^$9!#(B
  386.         $B$f!<$j$#$N(BUSETIMER$B$N@_Dj$H$[$\F1$8$G$9$,!"(B
  387.         yes$B$d(Bno$B$NBe$o$j$K(B1$B$d(B0$B$r;XDj$7$F$/$@$5$$!#(B
  388. <DT> auto.yuurii.mode $B%U%!%$%k%b!<%I(B
  389. <DD>    $B%W%i%0%$%s$NCf$G:n@.$9$k%U%!%$%k$N%U%!%$%k%b!<%I$r;XDj$7$^$9!#(B
  390.         $B$f!<$j$#$G$N%G%U%)%k%H$O(B600$B$G$9!#(B
  391. <DT> auto.yuurii.header $B$X%C%@(B
  392. <DD>    $B%G%P%C%0$N=PNO$K$D$1$k;~9o$N%U%)!<%^%C%H$r;XDj$7$^$9!#(B
  393.         $BJ8;zNsCf$K(B%$B$G;O$^$kJ8;zNs$,4^$^$l$F$$$k$H!"(B
  394.         $BBP1~$9$k$b$N$K$*$-$+$o$j$^$9!#(B
  395.         $B$f!<$j$#$G$N%G%U%)%k%H$O(B%H:%M:%S$B$G$9!#(B
  396. <DT> auto.yuurii.debug $B%U%!%$%kL>(B
  397. <DD>    $B%W%i%0%$%s$NCf$G%G%P%C%0%k!<%A%s$r<B9T$7$?$H$-$K!"(B
  398.         $B$3$3$G;XDj$7$?%U%!%$%k$K=PNO$7$^$9!#(B
  399.         $BJ8;zNsCf$K(B%$B$G;O$^$kJ8;zNs$,4^$^$l$F$$$k$H!"(B
  400.         $BBP1~$9$k$b$N$K$*$-$+$o$j$^$9!#(B
  401.         $B$f!<$j$#$G$N%G%U%)%k%H$O(Blog%m%d$B$G$9!#(B
  402. </DL>
  403.  
  404.  
  405. <HR><H3> $B@_DjNc(B </H3>
  406.  
  407. <PRE>
  408. + auto/yuurii.plm
  409. auto.yuurii.cache: 50
  410. auto.yuurii.pluginrc: .pluginrc
  411. auto.yuurii.down: 48
  412. auto.yuurii.downmes: auto down
  413. auto.yuurii.timer: 2000
  414. auto.yuurii.usetimer: 0
  415. auto.yuurii.mode: 600
  416. auto.yuurii.header: %H:%M:%S
  417. auto.yuurii.debug: log%m%d
  418. </PRE>
  419.  
  420. $B$f!<$j$#$N%G%U%)%k%H$HF1$8@_Dj$G$9!#(B
  421. $B$?$@$7:F5/F0$O$7$J$$$N$G!V(Bauto.yuurii.down$B!W$H(B
  422. $B!V(Bauto.yuurii.downmes$B!W$N@_Dj$OL58z$G$9!#(B
  423.  
  424. <PRE>
  425. + auto/yuurii.plm
  426. auto.yuurii.cache: 0
  427. auto.yuurii.pluginrc: yuurii.conf
  428. auto.yuurii.usetimer: 1
  429. </PRE>
  430.  
  431. $B%-%c%C%7%e$r;H$o$J$$$h$&$K$7$F!"(B1$BIC4V$K(B1$B2s%W%i%0%$%s$r<B9T$7$^$9!#(B
  432. $B$^$?!"!V(B.pluginrc$B!W$NBe$o$j$K!V(Byuurii.conf$B!W$r;H$$$^$9!#(B
  433.  
  434. </BODY></HTML>
  435.