home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 2.x / plum2_28_2.lzh / module / log / channel.plm next >
Text File  |  1998-10-15  |  13KB  |  424 lines

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