You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.1 KiB
172 lines
4.1 KiB
#
|
|
# Structure format is:
|
|
# $var[filter_number]{field}
|
|
#
|
|
# Defined fields: (* is required)
|
|
# SEARCH(*): search filter
|
|
# FROM(*): intput to subtitution regex
|
|
# TO(*): resultant to substitution regex
|
|
# DESC: description of filter rule
|
|
#
|
|
|
|
$#KSIRC_FILTER = 0;
|
|
|
|
print "*** Loading filter parser...\n";
|
|
|
|
$ksirc_dump = 0;
|
|
|
|
sub hook_ksircfilter {
|
|
my($i) = 0;
|
|
for(; $i <= $#KSIRC_FILTER; $i++){
|
|
eval{
|
|
if($_[0] =~ m/$KSIRC_FILTER[$i]{'SEARCH'}/){
|
|
$_[0] =~ s/$KSIRC_FILTER[$i]{'FROM'}/$KSIRC_FILTER[$i]{'TO'}/eeg;
|
|
}
|
|
};
|
|
if ( $@ ){
|
|
(my $error = $@ ) =~ s/before HERE.*//;
|
|
my $desc = $KSIRC_FILTER[$i]{'DESC'};
|
|
splice(@KSIRC_FILTER, $i--, 1);
|
|
&tell("*\cbE\cb* Filter $desc disabled due to error: $error");
|
|
}
|
|
}
|
|
}
|
|
|
|
print "*** Filter Parser Loaded\n";
|
|
|
|
addhook("print", "ksircfilter");
|
|
|
|
sub cmd_ksircprintrule {
|
|
my($i) = 0;
|
|
for(; $i <= $#KSIRC_FILTER; $i++){
|
|
print STDOUT "*** Rule $i " . $KSIRC_FILTER[$i]{DESC} . ": if ". $KSIRC_FILTER[$i]{SEARCH} . " then ". $KSIRC_FILTER[$i]{FROM} . " -> " . $KSIRC_FILTER[$i]{TO} . "\n";
|
|
}
|
|
}
|
|
|
|
addcmd("ksircprintrule");
|
|
&docommand("^alias prule ksircprintrule");
|
|
|
|
#
|
|
# Addrule command takes 4 or arguments seperated by " key==value !!! key2==value2 ||| etc"
|
|
# 1. Name of rule
|
|
# 2. Pattern to search for
|
|
# 3. Substitution to take
|
|
# 4. Sub to make
|
|
|
|
sub cmd_ksircappendrule {
|
|
my($rule, %PARSED);
|
|
foreach $rule (split(/ !!! /, $args)){
|
|
my($key,$value) = split(/==/, $rule);
|
|
$PARSED{$key} = $value;
|
|
}
|
|
if($PARSED{'DESC'} && $PARSED{'SEARCH'} && $PARSED{'FROM'} && $PARSED{'TO'}){
|
|
my($i) = $#KSIRC_FILTER + 1;
|
|
my($key, $value);
|
|
while(($key, $value) = each %PARSED){
|
|
$KSIRC_FILTER[$i]{$key} = $value;
|
|
}
|
|
# &tell("*** Added rule: " . $KSIRC_FILTER[$i]{'DESC'} . "\n");
|
|
}
|
|
else{
|
|
print "*E* Parse Error in Rule, format is: name !!! search !!! from !!! to\n";
|
|
}
|
|
}
|
|
|
|
addcmd("ksircappendrule");
|
|
&docommand("^alias arule ksircappendrule");
|
|
|
|
sub cmd_ksircclearrule {
|
|
@KSIRC_FILTER = ();
|
|
# &tell("*** ALL FILTER RULES ERASED - DEFAULTS ADDED\n");
|
|
}
|
|
|
|
&addcmd("ksircclearrule");
|
|
&docommand("^alias crule ksircclearrule");
|
|
&docommand("^crule");
|
|
|
|
sub cmd_ksircdelrule {
|
|
if($args =~ /^\d+$/){
|
|
splice(@KSIRC_FILTER, $args, 1);
|
|
print STDOUT "*** Deleted rule: $args\n";
|
|
}
|
|
else {
|
|
print STDOUT "*E* Syntax is ksircdelrule <rule number>\n";
|
|
}
|
|
}
|
|
|
|
&addcmd("ksircdelrule");
|
|
&docommand("^alias drule ksircdelrule");
|
|
|
|
sub hook_pong_lag {
|
|
if($_[0] =~ /.*:LAG ([0-9.]+)/){
|
|
my($_l) = $1;
|
|
my($_t) = kgettimeofday();
|
|
$_t -= $_l;
|
|
#print "*** Diff: $_t\n";
|
|
print "~!lag~*L* " . $_t . "\n";
|
|
}
|
|
}
|
|
|
|
&addhook("pong", "pong_lag");
|
|
|
|
sub cmd_lag {
|
|
my($_t) = kgettimeofday();
|
|
# &docommand("^ctcp $nick LAG $_t");
|
|
&docommand("^quote PING :LAG $_t");
|
|
my $c;
|
|
foreach $c (@channels){
|
|
if($WHO_IGNORE{uc("$c")} != 1){
|
|
&docommand("^extnames $c");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
eval {
|
|
require 'sys/syscall.ph';
|
|
};
|
|
|
|
if(! defined(&SYS_gettimeofday)){
|
|
if(open(SYSCALL, "/usr/include/sys/syscall.h")){
|
|
my(@line) = grep(/define\s+SYS_gettimeofday/, <SYSCALL>);
|
|
close SYSCALL;
|
|
print "*E* Strange syscall.h, SYS_gettimeofday defined more than once!\n" if $#line > 1;
|
|
my($line) = "@line";
|
|
if($line =~ /SYS_gettimeofday\s+(\d+)/){
|
|
eval "sub SYS_gettimeofday () {$1;}";
|
|
print "*** Set time of day to: $1\n";
|
|
}
|
|
}
|
|
|
|
if(! defined(&SYS_gettimeofday)){
|
|
eval 'sub SYS_gettimeofday () {78;}';
|
|
print "*E* Unable to find SYS_gettimeofday, using LINUX default!\n";
|
|
}
|
|
}
|
|
|
|
|
|
sub kgettimeofday {
|
|
local($failed) = 0;
|
|
local($TIMEVAL_T) = "LL";
|
|
local($start) = pack($TIMEVAL_T, ());
|
|
eval{
|
|
(syscall( &SYS_gettimeofday, $start, 0) != -1) or $failed = 1;
|
|
};
|
|
if(!$failed){
|
|
my(@start) = unpack($TIMEVAL_T, $start);
|
|
$start[1] /= 1000000;
|
|
return $start[0] + $start[1];
|
|
}
|
|
else {
|
|
return time();
|
|
}
|
|
}
|
|
|
|
&addcmd("lag");
|
|
|
|
sub hook_ksirc_notify_connected {
|
|
&print('~!all~`#ssfe#R reconnected');
|
|
}
|
|
|
|
&addhook("376", "ksirc_notify_connected"); # join on the "end of MOTD"
|