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

  1. package yuurii;
  2.  
  3. require 'jcode.pl';
  4.  
  5. $PLUGINRC = '.pluginrc';
  6. $LOGHEADER = '%h:%m';
  7. $timer_count_def = 2000;
  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, $vchan);
  37.   $nick = &'prefix($prefix);
  38.   $vchan = &'vchan($chan);
  39.   &nameslist;
  40.   if ($nick eq $'nick[$serverno]) {
  41.     $time_count{$vchan} = $timer_count_def;
  42.     $autojoinchanlist = &'add($autojoinchanlist || $;, $vchan);
  43.     $chanlist = &'add($chanlist || $;, $vchan);
  44.   } else {
  45.     &plugin($'userno[$serverno], $cmd, $chan, $nick, '');
  46.   }
  47.   return ($prefix, $cmd, $chan);
  48. }
  49.  
  50. sub ss_kick {
  51.   local($serverno, $prefix, $cmd, $chan, $who, $msg) = @_;
  52.   local($vchan) = &'vchan($chan);
  53.   if ($who eq $'nick[$serverno]) {
  54.     $chanlist = &'remove($chanlist || $;, $vchan);
  55.   }
  56.   &nameslist;
  57.   return ($prefix, $cmd, $chan, $who, $msg);
  58. }
  59.  
  60. sub ss_nick {
  61.   local($serverno, $prefix, $cmd, $newnick) = @_;
  62.   local($nick) = &'prefix($prefix);
  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, $vchan);
  75.   $nick = &'prefix($prefix);
  76.   local($vchan) = &'vchan($chan);
  77.   if ($nick eq $'nick[$serverno]) {
  78.     $autojoinchanlist = &'remove($autojoinchanlist, $vchan);
  79.     $chanlist = &'remove($chanlist, $vchan);
  80.   }
  81.   &nameslist;
  82.   &plugin($'userno[$serverno], $cmd, $chan, $nick, '');
  83.   return ($prefix, $cmd, $chan);
  84. }
  85.  
  86. sub ss_privmsg {
  87.   local($serverno, $prefix, $cmd, $chan, $msg) = @_;
  88.   local($nick) = &'prefix($prefix);
  89.   &nameslist;
  90.   &plugin($'userno[$serverno], $cmd, $chan, $nick, $msg);
  91.   return ($prefix, $cmd, $chan, $msg);
  92. }
  93.  
  94. sub ExistList {
  95.   local($list, $item) = @_;
  96.   return &'exist($list, $item);
  97. }
  98.  
  99. sub local_chan {
  100.   local($chan) = @_;
  101.   if ($chan) {
  102.     return (&'rchan($chan), &'vchan($chan));
  103.   } else {
  104.     return ('', '');
  105.   }
  106. }
  107.  
  108. sub now_time {
  109.   local($tmp);
  110.   ($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
  111.   $mon++;
  112.   $year += 1900;
  113.   $header = &'property($userno, 'logheader') || $LOGHEADER;
  114.   $tmp = sprintf('%02d', $hour);
  115.   $header =~ s/\%h/$tmp/g;
  116.   $tmp = sprintf('%02d', $min);
  117.   $header =~ s/\%m/$tmp/g;
  118.   $tmp = sprintf('%02d', $sec);
  119.   $header =~ s/\%s/$tmp/g;
  120. }
  121.  
  122. sub plugin {
  123.   local($userno) = shift;
  124.   local($command) = shift;
  125.   local($pluginrc) = &'property($userno, 'yuurii') || $PLUGINRC;
  126.   do $pluginrc;
  127. }
  128.  
  129. sub redo {
  130.   local($file) = @_;
  131.   $modify{$file} = 0 unless $modify{$file};
  132.   return if $modify{$file} == (stat($file))[9];
  133.   $modify{$file} = (stat($file))[9];
  134.   do $file;
  135. }
  136.  
  137. sub sendCchan {
  138.   local($msg) = @_;
  139.   local($prefix, $cmd, @params);
  140.   chop($msg);
  141.   ($prefix, $cmd, @params) = &'parse($msg);
  142.   foreach $clientno (&'array($'clientlist)) {
  143.     next unless $'userno[$clientno] == $userno;
  144.     next unless $'avail[$clientno];
  145.     &'c_print($clientno, $prefix, $cmd, @params);
  146.   }
  147. }
  148.  
  149. sub sendS {
  150.   local($msg) = @_;
  151.   chop($msg);
  152.   &'s_print($'server[$userno], &'parse($msg));
  153. }
  154.  
  155. sub sendSCL {
  156.   local($msg, $chan) = @_;
  157.   local($rchan, $vchan) = &local_chan($chan);
  158.   &sendCchan(":$'nickname[$userno] PRIVMSG $rchan :$msg\n");
  159.   &sendS("PRIVMSG $rchan :$msg\n");
  160.   push(@cache_mes, ">$vchan< $msg");
  161.   shift(@cache_mes) if scalar(@cache_mes) > $bot_cache_mes;
  162. }
  163.  
  164. sub cached {
  165.   local($msg, $chan) = @_;
  166.   local($vchan) = &'vchan($chan);
  167.   foreach $cache (@cache_mes) {
  168.     return if ($cache eq ">$vchan< $msg");
  169.   }
  170.   &sendSCL($msg, $chan);
  171. }
  172.  
  173. sub nameslist {
  174.   local($userno) = @_;
  175.   foreach $chan (&'array($chanlist || $;)) {
  176.     $nameslist{&'vchan($chan)} = $'nameslist{$userno, $chan};
  177.   }
  178. }
  179.  
  180.