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 / log / channel.plm next >
Text File  |  1997-11-23  |  10KB  |  326 lines

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