home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / plum2_33_1.lzh / module / log / channel.plm next >
Text File  |  1999-03-24  |  13KB  |  435 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: channel.plm,v 2.35 1999/02/04 13:51:27 hasegawa Exp $
  3. # copyright (c)1997-1999 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package log_channel;
  6.  
  7. $DIRECTORY = '.';
  8. $HEADER = '%H:%M';
  9. $COMMAND = &'list('privmsg', 'join', 'part', 'kick' ,'invite', 'mode', 'nick', 'quit', 'topic');
  10.  
  11. $_ = 'log_channel';
  12.  
  13. sub module_enable {
  14.   local($userno) = @_;
  15.   foreach $sno (&'array($'serverlist)) {
  16.     next unless $'avail[$sno];
  17.     next unless $userno == $'userno[$sno];
  18.     foreach $chan (&'array($'channellist[$sno])) {
  19.       $nameslist{$sno, $chan} = '';
  20.       foreach $nick (&'array($'nameslist{$sno, $chan})) {
  21.         $nick =~ tr/\@\+//d;
  22.         $nameslist{$sno, $chan} = &'add($nameslist{$sno, $chan}, $nick);
  23.       }
  24.     }
  25.   }
  26. }
  27.  
  28. sub module_disable {
  29.   local($userno) = @_;
  30.   foreach $sno (&'array($'serverlist)) {
  31.     next unless $'avail[$sno];
  32.     next unless $userno == $'userno[$sno];
  33.     foreach $chan (&'array($'channellist[$sno])) {
  34.       delete $nameslist{$sno, $chan};
  35.     }
  36.   }
  37. }
  38.  
  39. sub ss_privmsg {
  40.   local($serverno, $prefix, $cmd, @params) = @_;
  41.   local($nick, $vchan);
  42.   if ($params[1] && &savecommand($'userno[$serverno], $cmd)) {
  43.     $nick = &'prefix($prefix);
  44.     if (&'channel($params[0])) {
  45.       $vchan = &'alias($params[0]);
  46.       if (&'exist($nameslist{$serverno, $params[0]}, $nick)) {
  47.         &writelog($serverno, $params[0], "<$vchan:$nick> $params[1]");
  48.       } else {
  49.         &writelog($serverno, $params[0], "($vchan:$nick) $params[1]");
  50.       }
  51.     } else {
  52.       &writelog($serverno, '', "=$nick= $params[1]");
  53.     }
  54.   }
  55.   return ($prefix, $cmd, @params);
  56. }
  57.  
  58. sub ss_notice {
  59.   local($serverno, $prefix, $cmd, @params) = @_;
  60.   local($nick, $vchan);
  61.   if ($params[1] && &savecommand($'userno[$serverno], $cmd)) {
  62.     $nick = &'prefix($prefix);
  63.     if (&'channel($params[0])) {
  64.       $vchan = &'alias($params[0]);
  65.       if (&'exist($nameslist{$serverno, $params[0]}, $nick)) {
  66.         &writelog($serverno, $params[0], "<$vchan:$nick> $params[1]");
  67.       } else {
  68.         &writelog($serverno, $params[0], "($vchan:$nick) $params[1]");
  69.       }
  70.     } else {
  71.       &writelog($serverno, '', "=$nick= $params[1]");
  72.     }
  73.   }
  74.   return ($prefix, $cmd, @params);
  75. }
  76.  
  77. sub ss_join {
  78.   local($serverno, $prefix, $cmd, @params) = @_;
  79.   local($nick, $name, $mode, $vchan);
  80.   $nick = &'prefix($prefix);
  81.   ($name, $mode) = (split(/\cG/, $params[0]), '');
  82.   if ($nick eq $'nick[$serverno]) {
  83.     $nameslist{$serverno, $name} = '';
  84.   } else {
  85.     $nameslist{$serverno, $name} = &'add($nameslist{$serverno, $name}, $nick);
  86.   }
  87.   if (&savecommand($'userno[$serverno], $cmd)) {
  88.     $vchan = &'alias($name);
  89.     if (index($mode, 'o') != -1) {
  90.       &writelog($serverno, $name, "+ \@$nick ($prefix) to $vchan");
  91.     } elsif (index($mode, 'v') != -1) {
  92.       &writelog($serverno, $name, "+ +$nick ($prefix) to $vchan");
  93.     } else {
  94.       &writelog($serverno, $name, "+ $nick ($prefix) to $vchan");
  95.     }
  96.   }
  97.   return ($prefix, $cmd, @params);
  98. }
  99.  
  100. sub ss_part {
  101.   local($serverno, $prefix, $cmd, @params) = @_;
  102.   local($nick, $vchan);
  103.   $nick = &'prefix($prefix);
  104.   if (&savecommand($'userno[$serverno], $cmd)) {
  105.     $vchan = &'alias($params[0]);
  106.     &writelog($serverno, $params[0], "- $nick from $vchan ($params[1])");
  107.   }
  108.   if ($nick eq $'nick[$serverno]) {
  109.     delete $nameslist{$serverno, $params[0]};
  110.   } else {
  111.     $nameslist{$serverno, $params[0]} = &'remove($nameslist{$serverno, $params[0]}, $nick);
  112.   }
  113.   return ($prefix, $cmd, @params);
  114. }
  115.  
  116. sub ss_kick {
  117.   local($serverno, $prefix, $cmd, @params) = @_;
  118.   local($nick, $vchan);
  119.   $nick = &'prefix($prefix);
  120.   if (&savecommand($'userno[$serverno], $cmd)) {
  121.     $vchan = &'alias($params[0]);
  122.     &writelog($serverno, $params[0], "- $params[1] by $nick from $vchan ($params[2])");
  123.   }
  124.   if ($nick eq $'nick[$serverno]) {
  125.     delete $nameslist{$serverno, $params[0]};
  126.   } else {
  127.     $nameslist{$serverno, $params[0]} = &'remove($nameslist{$serverno, $params[0]}, $params[1]);
  128.   }
  129.   return ($prefix, $cmd, @params);
  130. }
  131.  
  132. sub ss_invite {
  133.   local($serverno, $prefix, $cmd, @params) = @_;
  134.   local($nick, $vchan);
  135.   if (&savecommand($'userno[$serverno], $cmd)) {
  136.     $nick = &'prefix($prefix);
  137.     $vchan = &'alias($params[1]);
  138.     &writelog($serverno, $params[1], "Invited by $nick: $vchan");
  139.   }
  140.   return ($prefix, $cmd, @params);
  141. }
  142.  
  143. sub ss_mode {
  144.   local($serverno, $prefix, $cmd, @params) = @_;
  145.   local($nick, $vchan, @mode);
  146.   @mode = @params;
  147.   shift(@mode);
  148.   if (&savecommand($'userno[$serverno], $cmd)) {
  149.     $nick = &'prefix($prefix);
  150.     if (&'channel($params[0])) {
  151.       $vchan = &'alias($params[0]);
  152.       &writelog($serverno, $params[0], "Mode by $nick: $vchan " . join(' ', @mode));
  153.     } else {
  154.       &writelog($serverno, '', "Mode by $nick: $params[0] " . join(' ', @mode));
  155.     }
  156.   }
  157.   return ($prefix, $cmd, @params);
  158. }
  159.  
  160. sub ss_nick {
  161.   local($serverno, $prefix, $cmd, @params) = @_;
  162.   local($nick);
  163.   $nick = &'prefix($prefix);
  164.   if (&savecommand($'userno[$serverno], $cmd)) {
  165.     if ($params[0] eq $'nick[$serverno]) {
  166.       &writelog($serverno, $nick, "My nick is changed ($nick -\> $params[0])");
  167.     } else {
  168.       &writelog($serverno, $nick, "$nick -\> $params[0]");
  169.     }
  170.   }
  171.   foreach $chan (&'array($'channellist[$serverno])) {
  172.     $nameslist{$serverno, $chan} = &'change($nameslist{$serverno, $chan}, $nick, $params[0]);
  173.   }
  174.   return ($prefix, $cmd, @params);
  175. }
  176.  
  177. sub ss_quit {
  178.   local($serverno, $prefix, $cmd, @params) = @_;
  179.   local($nick);
  180.   $nick = &'prefix($prefix);
  181.   if (&savecommand($'userno[$serverno], $cmd)) {
  182.     &writelog($serverno, $nick, "! $nick ($params[0])");
  183.   }
  184.   foreach $chan (&'array($'channellist[$serverno])) {
  185.     $nameslist{$serverno, $chan} = &'remove($nameslist{$serverno, $chan}, $nick);
  186.   }
  187.   return ($prefix, $cmd, @params);
  188. }
  189.  
  190. sub ss_topic {
  191.   local($serverno, $prefix, $cmd, @params) = @_;
  192.   local($nick, $vchan);
  193.   if (&savecommand($'userno[$serverno], $cmd)) {
  194.     $nick = &'prefix($prefix);
  195.     $vchan = &'alias($params[0]);
  196.     &writelog($serverno, $params[0], "Topic of channel $vchan by $nick: $params[1]");
  197.   }
  198.   return ($prefix, $cmd, @params);
  199. }
  200.  
  201. sub ss_353 {
  202.   local($serverno, $prefix, $cmd, @params) = @_;
  203.   if (&'exist($'channellist[$serverno], $params[2])) {
  204.     foreach $name (split(/\s+/, $params[3])) {
  205.       $name =~ tr/\+\@//d;
  206.       $nameslist{$serverno, $params[2]} = &'add($nameslist{$serverno, $params[2]}, $name);
  207.     }
  208.   }
  209.   return ($prefix, $cmd, @params);
  210. }
  211.  
  212. sub sp_privmsg {
  213.   local($serverno, $prefix, $cmd, @params) = @_;
  214.   local($chan, $vchan);
  215.   if ($params[1] && &savecommand($'userno[$serverno], $cmd)) {
  216.     foreach $chan (split(/\,/, $params[0])) {
  217.       if (&'channel($chan)) {
  218.         $vchan = &'alias($chan);
  219.         &writelog($serverno, $chan, ">$vchan:$'nick[$serverno]< $params[1]");
  220.       } else {
  221.         &writelog($serverno, '', ">$chan< $params[1]");
  222.       }
  223.     }
  224.   }
  225.   return ($prefix, $cmd, @params);
  226. }
  227.  
  228. sub sp_notice {
  229.   local($serverno, $prefix, $cmd, @params) = @_;
  230.   local($chan, $vchan);
  231.   if ($params[1] && &savecommand($'userno[$serverno], $cmd)) {
  232.     foreach $chan (split(/\,/, $params[0])) {
  233.       if (&'channel($chan)) {
  234.         $vchan = &'alias($chan);
  235.         &writelog($serverno, $chan, ">$vchan:$'nick[$serverno]< $params[1]");
  236.       } else {
  237.         &writelog($serverno, '', ">$chan< $params[1]");
  238.       }
  239.     }
  240.   }
  241.   return ($prefix, $cmd, @params);
  242. }
  243.  
  244. sub savecommand {
  245.   local($userno, $cmd) = @_;
  246.   local($save);
  247.   $save = &'property($userno, 'command');
  248.   if (defined($save)) {
  249.     $save = '';
  250.     foreach $mask (&'property($userno, 'command')) {
  251.       $save = &'add($save, split(/\,/, $mask));
  252.     }
  253.   } else {
  254.     $save = $COMMAND;
  255.   }
  256.   return &'exist($save, $cmd);
  257. }
  258.  
  259. sub writelog {
  260.   local($serverno, $chan, $msg) = @_;
  261.   local($userno, $chanlist, $rchan, $file, $name, $list);
  262.   $userno = $'userno[$serverno];
  263.   if ($chan eq '') {
  264.     foreach $file (&'property($userno, 'file')) {
  265.       ($name, $list) = split(/\s+/, $file);
  266.       if (!$list || &'exist(&'list(split(/\,/, $list)), '*')) {
  267.         &channellog($serverno, $name, $msg);
  268.         last;
  269.       }
  270.     }
  271.   } elsif (&'channel($chan)) {
  272.     foreach $file (&'property($userno, 'file')) {
  273.       ($name, $list) = split(/\s+/, $file);
  274.       $chanlist = '';
  275.       foreach $item (split(/\,/, $list || '')) {
  276.         $chanlist = &'add($chanlist, &'real($item));
  277.       }
  278.       if (&'exist($chanlist, $chan) || $chanlist eq '') {
  279.         &channellog($serverno, $name, $msg);
  280.         last;
  281.       }
  282.     }
  283.   } else {
  284.     foreach $file (&'property($userno, 'file')) {
  285.       ($name, $list) = split(/\s+/, $file);
  286.       foreach $item (split(/\,/, $list || '')) {
  287.         $rchan = &'real($item);
  288.         if (&'exist($nameslist{$serverno, $rchan}, $chan)) {
  289.           &channellog($serverno, $name, $msg);
  290.           last;
  291.         }
  292.       }
  293.     }
  294.   }
  295. }
  296.  
  297. sub channellog {
  298.   local($fileno, $file, $msg) = @_;
  299.   local($userno, $dir, $idx, $name, $code, $header, $mode);
  300.   $userno = $'userno[$fileno];
  301.   ($name, $code) = &filename($file);
  302.   if ($name !~ /^[\\\/]/) {
  303.     $dir = &'expand(&'property($userno, 'directory') || $DIRECTORY);
  304.     $name = "$dir/$name";
  305.   }
  306.   $name = &'date($name);
  307.   $header = &'property($userno, 'header');
  308.   $header = $HEADER unless defined($header);
  309.   $header = &'date($header);
  310.   $msg = &jis_code($msg, $code) if $code;
  311.   if (!-e $name) {
  312.     if (open(FILE, ">$name")) {
  313.       close(FILE);
  314.       $mode = &'property($userno, 'mode');
  315.       if (defined($mode)) {
  316.         chmod(oct($mode), $name);
  317.       }
  318.     }
  319.   }
  320.   if (open(FILE, ">>$name")) {
  321.     print FILE $header, ' ', $msg, "\n";
  322.     close(FILE);
  323.   }
  324. }
  325.  
  326. sub filename {
  327.   local($file) = @_;
  328.   local($idx, $name, $code);
  329.   return ('', '') unless $file;
  330.   if (($idx = rindex($file, ';')) != -1) {
  331.     $name = substr($file, 0, $idx);
  332.     $code = substr($file, $idx + 1);
  333.   } else {
  334.     $name = $file;
  335.     $code = '';
  336.   }
  337.   return (&'expand($name), $code);
  338. }
  339.  
  340. sub jis_code {
  341.   local($line, $list) = @_;
  342.   local($code);
  343.   $code = (split(/\,/, "\L$list\E"))[0];
  344.   if ($code eq 'euc') {
  345.     $line = &'jis_euc($line);
  346.   } elsif ($code eq 'jis') {
  347.     $line = &'jis_jis($line);
  348.   } elsif ($code eq 'sjis') {
  349.     $line = &'jis_sjis($line);
  350.   }
  351.   return $line;
  352. }
  353.  
  354. __END__
  355. --><HTML><HEAD>
  356. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  357. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  358. <TITLE>log/channel.plm</TITLE></HEAD><BODY>
  359.  
  360. $B%*%s%i%$%s%I%-%e%a%s%H(B
  361.  
  362.  
  363. <HR><H3>$BL>A0(B</H3>
  364.  
  365. log/channel.plm - $B%a%C%;!<%8$r%A%c%s%M%k$4$H$N%m%0$H$7$FJ]B8$9$k(B
  366.  
  367.  
  368. <HR><H3>$B@bL@(B</H3>
  369.  
  370. $B%A%c%s%M%k$4$H$K%U%!%$%k$r;XDj$7$F%m%0$rJ]B8$7$^$9!#(B
  371.  
  372.  
  373. <HR><H3>$B%W%m%Q%F%#(B</H3>
  374.  
  375. <DL>
  376. <DT>  log.channel.directory $B%G%#%l%/%H%j(B
  377. </DT>
  378. <DD>    $B%m%0$r:n@.$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
  379.         $B%G%#%l%/%H%j$O(Bplum$B$r<B9T$7$?%G%#%l%/%H%j$+$i$NAjBP%Q%9$K$J$j$^$9!#(B
  380.         UNIX$B$J$i!V(B~/$B!W$d!V(B~user$B!W$H$$$&;XDj$b$G$-$^$9!#(B
  381. </DD>
  382. <DT>  log.channel.file* $B%U%!%$%kL>(B[;({jis|euc|sjis})] [($B%A%c%s%M%k(B)]
  383. </DT>
  384. <DD>    $B%m%0$N%U%!%$%kL>$HJ]B8$9$k%A%c%s%M%k$r;XDj$7$^$9!#(B
  385.         %$B$G$O$8$^$kJ8;z$,$"$k$HBP1~$9$kF|IU$KJQ49$5$l$^$9!#(B
  386.         $B$^$?%A%c%s%M%kL>$NJQ$o$j$K(B*$B$r;XDj$9$k$3$H$G<+J,08$N(B
  387.         $B%a%C%;!<%8$r%m%0$KJ]B8$9$k$3$H$,$G$-$^$9!#(B
  388.         $BF1$8%A%c%s%M%k$,J#?t$N%U%!%$%k$K;XDj$5$l$F$$$?$H$-$O!"(B
  389.         $B:G=i$K=q$$$?%U%!%$%k$K$@$1J]B8$7!"%A%c%s%M%kL>$r>JN,$9$k$H!"(B
  390.         $B;D$j$N$9$Y$F$N%m%0$,$=$N%U%!%$%k$KJ]B8$5$l$^$9!#(B
  391. </DD>
  392. <DT>  log.channel.header $B$X%C%@(B
  393. </DT>
  394. <DD>    $B%m%0$K=PNO$9$k;~9o$N%U%)!<%^%C%H$r;XDj$7$^$9!#(B
  395.         %$B$G$O$8$^$kJ8;z$,$"$k$HBP1~$9$k;~4V$KJQ49$5$l$^$9!#(B
  396. </DD>
  397. <DT>  log.channel.mode $B%U%!%$%k%b!<%I(B
  398. </DT>
  399. <DD>    $B%m%0$N%U%!%$%k%b!<%I$r$3$3$G;XDj$7$?CM$K$7$^$9!#(B
  400. </DD>
  401. <DT>  log.channel.command ({invite|join|kick|mode|nick|notice|part|privmsg|quit|topic})
  402. </DT>
  403. <DD>    $BJ]B8$9$k%a%C%;!<%8$N<oN`$r;XDj$7$^$9!#(B
  404.         $B%G%U%)%k%H$G$O!V(Bnotice$B!W0J30$N$9$Y$F$G$9!#(B
  405. </DD>
  406. </DL>
  407.  
  408.  
  409. <HR><H3>$B@_DjNc(B</H3>
  410.  
  411. <PRE>
  412. + log/channel.plm
  413. log.channel.directory: log
  414. log.channel.file: log%-8O%m%d;sjis #$B$^$I$+(B,#$B$^$I$+(B:*.jp
  415. </PRE>
  416.  
  417. $B!V(B#$B$^$I$+!W$H!V(B#$B$^$I$+(B:*.jp$B!W$N%m%0$r!V(Blog/log%m%d$B!W$KJ]B8$7$^$9!#(B
  418. $B$=$l0J30$N%A%c%s%M%k$N%m%0$OJ]B8$7$^$;$s!#(B
  419. $B$3$N$H$-$N4A;z%3!<%I$O(Bsjis$B$G$9!#(B
  420. $B$^$?!"%m%0$N%U%!%$%kL>$OKhF|(B8$B;~$K$=$NF|$NF|IU$N$b$N$KJQ$o$j$^$9!#(B
  421.  
  422. <PRE>
  423. + log/channel.plm
  424. log.channel.file: madoka/%m%d #$B$^$I$+(B,*
  425. log.channel.file: log%m%d
  426. log.channel.command: privmsg,notice,topic
  427. </PRE>
  428.  
  429. $B!V(B#$B$^$I$+!W$N%m%0$H<+J,08$N%a%C%;!<%8$r!V(Bmadoka/log%m%d$B!W$KJ]B8$7!"(B
  430. $B$=$l0J30$N%m%0$r!V(Blog%m%d$B!W$KJ]B8$7$^$9!#(B
  431. $B!V(B%m$B!W$H!V(B%d$B!W$O$=$l$>$l8=:_$N7n$HF|$KJQ49$5$l$^$9!#(B
  432. $B$^$?!"!V(Bprivmsg$B!W!"!V(Bnotice$B!W!"!V(Btopic$B!W0J30$N%m%0$OJ]B8$7$^$;$s!#(B
  433.  
  434. </BODY></HTML>
  435.