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 / daily.plm < prev    next >
Text File  |  1998-10-15  |  10KB  |  353 lines

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