home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.madoka.org
/
2014.12.ftp.madoka.org.tar
/
ftp.madoka.org
/
pub
/
plum
/
1.x
/
plum12.lzh
/
plum12
/
yuurii.plm
< prev
Wrap
Text File
|
1997-09-25
|
4KB
|
180 lines
package yuurii;
require 'jcode.pl';
$PLUGINRC = '.pluginrc';
$LOGHEADER = '%h:%m';
$timer_count_def = 2000;
$lasttime = time;
$bot_cache_mes = 50;
@cache_mes = ();
$autojoinchanlist = $;;
$chanlist = $;;
$logmode = (&'property($'userno, 'filemode') || (umask ^ 0666)) | 0200;
$_ = 'yuurii';
sub main_loop {
local($userno) = @_;
local($nowtime, $i);
$nowtime = time;
&setuser($userno);
for ($i = $lasttime; $i < $nowtime; $i++) {
foreach $chan (&'array($autojoinchanlist)) {
$time_count{$chan}-- if $time_count{$chan} > 0;
$time_count{$chan}++ if $time_count{$chan} < 0;
}
&plugin($userno, 'bot_timer');
}
$lasttime = $nowtime;
}
sub ss_join {
local($serverno, $prefix, $cmd, $chan) = @_;
local($nick, $name, $mode, $vchan);
$nick = &'prefix($prefix);
($name, $mode) = (split(/\cG/, $chan), '');
$vchan = &'vchan($name);
&setuser($'userno[$serverno]);
if ($nick eq $'nick[$serverno]) {
$time_count{$vchan} = $timer_count_def;
$autojoinchanlist = &'add($autojoinchanlist, $vchan);
$chanlist = &'add($chanlist, $vchan);
} else {
&plugin($'userno[$serverno], $cmd, $chan, $nick, '');
}
return ($prefix, $cmd, $chan);
}
sub ss_kick {
local($serverno, $prefix, $cmd, $chan, $who, $msg) = @_;
local($vchan) = &'vchan($chan);
if ($who eq $'nick[$serverno]) {
$chanlist = &'remove($chanlist, $vchan);
}
&setuser($'userno[$serverno]);
return ($prefix, $cmd, $chan, $who, $msg);
}
sub ss_nick {
local($serverno, $prefix, $cmd, $newnick) = @_;
local($nick) = &'prefix($prefix);
&setuser($'userno[$serverno]);
if ($nick eq $'nick[$serverno]) {
$my_nick = $newnick;
} else {
&plugin($'userno[$serverno], $cmd, 'ALL', $newnick, $nick);
}
return ($prefix, $cmd, $newnick);
}
sub ss_part {
local($serverno, $prefix, $cmd, $chan, $msg) = @_;
local($nick, $vchan);
$nick = &'prefix($prefix);
local($vchan) = &'vchan($chan);
if ($nick eq $'nick[$serverno]) {
$autojoinchanlist = &'remove($autojoinchanlist, $vchan);
$chanlist = &'remove($chanlist, $vchan);
}
&setuser($'userno[$serverno]);
&plugin($'userno[$serverno], $cmd, $chan, $nick, '');
return ($prefix, $cmd, $chan, $msg);
}
sub ss_privmsg {
local($serverno, $prefix, $cmd, $chan, $msg) = @_;
local($nick) = &'prefix($prefix);
&setuser($'userno[$serverno]);
&plugin($'userno[$serverno], $cmd, $chan, $nick, $msg);
return ($prefix, $cmd, $chan, $msg);
}
sub ExistList {
local($list, $item) = @_;
return &'exist($list, $item);
}
sub local_chan {
local($chan) = @_;
if ($chan) {
return (&'rchan($chan), &'vchan($chan));
} else {
return ('', '');
}
}
sub now_time {
local($tmp);
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$mon++;
$year += 1900;
$header = &'property($userno, 'logheader') || $LOGHEADER;
$tmp = sprintf('%02d', $hour);
$header =~ s/\%h/$tmp/g;
$tmp = sprintf('%02d', $min);
$header =~ s/\%m/$tmp/g;
$tmp = sprintf('%02d', $sec);
$header =~ s/\%s/$tmp/g;
}
sub plugin {
local($userno) = shift;
local($command) = shift;
local($pluginrc) = &'property($userno, 'yuurii') || $PLUGINRC;
do $pluginrc;
}
sub redo {
local($file) = @_;
$modify{$file} = 0 unless $modify{$file};
return if $modify{$file} == (stat($file))[9];
$modify{$file} = (stat($file))[9];
do $file;
}
sub sendCchan {
local($msg) = @_;
local($prefix, $cmd, @params);
chop($msg);
($prefix, $cmd, @params) = &'parse($msg);
foreach $clientno (&'array($'clientlist)) {
next unless $'userno[$clientno] == $userno;
next unless $'avail[$clientno];
&'c_print($clientno, $prefix, $cmd, @params);
}
}
sub sendS {
local($msg) = @_;
chop($msg);
&'s_print($'server[$userno], &'parse($msg));
}
sub sendSCL {
local($msg, $chan) = @_;
local($rchan, $vchan) = &local_chan($chan);
&sendCchan(":$'nickname[$userno] PRIVMSG $rchan :$msg\n");
&sendS("PRIVMSG $rchan :$msg\n");
push(@cache_mes, ">$vchan< $msg");
shift(@cache_mes) if scalar(@cache_mes) > $bot_cache_mes;
}
sub cached {
local($msg, $chan) = @_;
local($vchan) = &'vchan($chan);
foreach $cache (@cache_mes) {
return if ($cache eq ">$vchan< $msg");
}
&sendSCL($msg, $chan);
}
sub setuser {
local($userno) = @_;
$my_nick = $'nickname[$userno];
foreach $chan (&'array($chanlist)) {
$nameslist{&'vchan($chan)} = $'nameslist{$userno, $chan};
}
}