home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 1.x / plum10b8.lzh / plum10b8 / yuurii.plm < prev   
Text File  |  1997-06-25  |  5KB  |  181 lines

  1. package yuurii;
  2.  
  3. require 'jcode.pl';
  4.  
  5. $PLUGINRC = '.pluginrc';
  6. $LOGHEADER = '%h:%m';
  7. $timer_count_def = 1200;
  8. $lasttime = time;
  9. $bot_cache_mes = 50;
  10. @cache_mes = ();
  11. $autojoinchanlist = $;;
  12. $chanlist = $;;
  13. $my_nick = &'property($'userno, 'nick') || getlogin || (getpwuid($<))[0];
  14. $my_user = (split(/\s+/, &'property($'userno[$serverno], 'user'), 2))[0] || getlogin || (getpwuid($<))[0];
  15. $logmode = (&'property($'userno, 'filemode') || (umask ^ 0666)) | 0200;
  16.  
  17. $_ = 'yuurii';
  18.  
  19. sub main_loop {
  20.   local($userno) = @_;
  21.   local($nowtime, $i);
  22.   $nowtime = time;
  23.   &nameslist;
  24.   for ($i = $lasttime; $i < $nowtime; $i++) {
  25.     foreach $chan (&'array($autojoinchanlist)) {
  26.       $time_count{$chan}-- if $time_count{$chan} > 0;
  27.       $time_count{$chan}++ if $time_count{$chan} < 0;
  28.     }
  29.     &plugin($userno, 'bot_timer');
  30.   }
  31.   $lasttime = $nowtime;
  32. }
  33.  
  34. sub ss_join {
  35.   local($serverno, $prefix, $cmd, $chan) = @_;
  36.   local($nick, $user, $host) = &'prefix($prefix);
  37.   local($vchan) = &'vchan($chan);
  38.   &nameslist;
  39.   if ($nick eq $'nick[$serverno]) {
  40.     $time_count{$vchan} = $timer_count_def;
  41.     $autojoinchanlist = &'add($autojoinchanlist || $;, $vchan);
  42.     $chanlist = &'add($chanlist || $;, $vchan);
  43.   } else {
  44.     &plugin($'userno[$serverno], $cmd, $chan, $nick, '');
  45.   }
  46.   return ($prefix, $cmd, $chan);
  47. }
  48.  
  49. sub ss_kick {
  50.   local($serverno, $prefix, $cmd, $chan, $who, $msg) = @_;
  51.   local($vchan) = &'vchan($chan);
  52.   if ($who eq $'nick[$serverno]) {
  53.     $chanlist = &'remove($chanlist || $;, $vchan);
  54.   }
  55.   &nameslist;
  56.   return ($prefix, $cmd, $chan, $who, $msg);
  57. }
  58.  
  59. sub ss_nick {
  60.   local($serverno, $prefix, $cmd, $newnick) = @_;
  61.   local($nick, $user, $host) = &'prefix($prefix);
  62.   local($vchan);
  63.   &nameslist;
  64.   if ($nick eq $'nick[$serverno]) {
  65.     $my_nick = $newnick;
  66.   } else {
  67.     &plugin($'userno[$serverno], $cmd, 'ALL', $newnick, $nick);
  68.   }
  69.   return ($prefix, $cmd, $newnick);
  70. }
  71.  
  72. sub ss_part {
  73.   local($serverno, $prefix, $cmd, $chan) = @_;
  74.   local($nick, $user, $host) = &'prefix($prefix);
  75.   local($vchan) = &'vchan($chan);
  76.   if ($nick eq $'nick[$serverno]) {
  77.     $autojoinchanlist = &'remove($autojoinchanlist, $vchan);
  78.     $chanlist = &'remove($chanlist, $vchan);
  79.   }
  80.   &nameslist;
  81.   &plugin($'userno[$serverno], $cmd, $chan, $nick, '');
  82.   return ($prefix, $cmd, $chan);
  83. }
  84.  
  85. sub ss_privmsg {
  86.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  87.   local($nick, $user, $host) = &'prefix($prefix);
  88.   &nameslist;
  89.   &plugin($'userno[$serverno], $cmd, $chan, $nick, $msg);
  90.   return ($prefix, $cmd, $chan, $msg);
  91. }
  92.  
  93. sub ExistList {
  94.   local($list, $item) = @_;
  95.   return &'exist($list, $item);
  96. }
  97.  
  98. sub local_chan {
  99.   local($chan) = @_;
  100.   if ($chan) {
  101.     return (&'rchan($chan), &'vchan($chan));
  102.   } else {
  103.     return ('', '');
  104.   }
  105. }
  106.  
  107. sub now_time {
  108.   local($tmp);
  109.   ($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
  110.   $mon++;
  111.   $year += 1900;
  112.   $header = &'property($userno, 'logheader') || $LOGHEADER;
  113.   $tmp = sprintf('%02d', $hour);
  114.   $header =~ s/\%h/$tmp/g;
  115.   $tmp = sprintf('%02d', $min);
  116.   $header =~ s/\%m/$tmp/g;
  117.   $tmp = sprintf('%02d', $sec);
  118.   $header =~ s/\%s/$tmp/g;
  119. }
  120.  
  121. sub plugin {
  122.   local($userno) = shift;
  123.   local($command) = shift;
  124.   local($pluginrc) = &'property($userno, 'yuurii') || $PLUGINRC;
  125.   do $pluginrc;
  126. }
  127.  
  128. sub redo {
  129.   local($file) = @_;
  130.   $modify{$file} = 0 unless $modify{$file};
  131.   return if $modify{$file} == (stat($file))[9];
  132.   $modify{$file} = (stat($file))[9];
  133.   do $file;
  134. }
  135.  
  136. sub sendCchan {
  137.   local($msg) = @_;
  138.   chop($msg);
  139.   local($prefix, $cmd, @params) = &'parse($msg);
  140.   foreach $clientno (&'array($'clientlist)) {
  141.     next unless $'userno[$clientno] == $userno;
  142.     next unless $'avail[$clientno];
  143.     &'c_print($clientno, $prefix, $cmd, @params);
  144.   }
  145. }
  146.  
  147. sub sendS {
  148.   local($msg) = @_;
  149.   chop($msg);
  150.   local($prefix, $cmd, @params) = &'parse($msg);
  151.   &'s_print($'server[$userno], $prefix, $cmd, @params);
  152. }
  153.  
  154. sub sendSCL {
  155.   local($msg, $chan) = @_;
  156.   local($rchan, $vchan) = &local_chan($chan);
  157.   &sendCchan(":$'nickname[$userno] PRIVMSG $rchan :$msg\n");
  158.   &sendS("PRIVMSG $rchan :$msg\n");
  159.   push(@cache_mes, ">$vchan< $msg");
  160.   shift(@cache_mes) if scalar(@cache_mes) > $bot_cache_mes;
  161. }
  162.  
  163. sub cached {
  164.   local($msg, $chan) = @_;
  165.   local($vchan) = &'vchan($chan);
  166.   foreach $cache (@cache_mes) {
  167.     return if ($cache eq ">$vchan< $msg");
  168.   }
  169.   &sendSCL($msg, $chan);
  170. }
  171.  
  172. sub nameslist {
  173.   local($userno) = @_;
  174.   local($vchan);
  175.   foreach $chan (&'array($chanlist || $;)) {
  176.     $vchan = &'vchan($chan);
  177.     $nameslist{$vchan} = $'nameslist{$userno, $chan};
  178.   }
  179. }
  180.  
  181.