You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
3.4 KiB
Perl

4 years ago
# infobot :: Kevin Lenzo (c) 1997
# with thanks to Patrick Cole
use Socket;
# send info to devnull
sub devnull {
return '';
}
# ask frendly bots
sub askFriendlyBots {
my $request = $_[0];
return if ($request =~ /^no\,?\s+/);
foreach $bot (split /\s+/, $param{'friendlyBots'}) {
$request =~ s/^(is|are) //i;
&msg($bot, ":INFOBOT:QUERY <$who> $request");
}
}
# format a public message
sub FormatText {
my($nick, $msg) = @_;
undef @ret;
undef %str;
my $msgLen = length($msg);
my $nickLen = length($nick);
my $tot = 0;
my $cnt = 0;
foreach (split //, $msg) {
if ($cnt == (80 - $nickLen - 3)) {
$tot++;
$cnt=0;
}
$str{$tot} .= $_;
$cnt++;
}
foreach (keys %str) {
push(@ret, $str{$_}."\n");
}
return @ret;
}
sub status {
$statcount++;
my($input) = @_;
if ($param{'VERBOSITY'} > 0) {
if ($param{ansi_control}) {
printf $_green."[%5d] ".$ob, $statcount;
$input =~ s/[\cA-\c_]//ig; # (Derek Moeller)++
my $printable = $input;
if ($printable =~ s/^(<\/\S+>) //) {
# it's me saying something on a channel
my $name = $1;
print "$b_yellow$name $printable$ob\n";
} elsif ($printable =~ s/^(<\S+>) //) {
my $name = $1;
if ($addressed) {
print "$b_red$name $printable$ob\n";
} else {
print "$b_cyan$name$ob $printable\n";
}
} elsif ($printable =~ s/^(-\S+-) //) {
# notice
print "$_green$1 $printable$ob\n";
} elsif ($printable =~ s/^(\[\S+\]) //) {
# message from someone
print "$b_red$1 $printable$ob\n";
} elsif ($printable =~ s/^(>\S+<) //) {
# i'm messaging someone
print "$b_magenta$1 $printable$ob\n";
} elsif ($printable =~ s/^(!\S+!) //) {
# i'm messaging someone
print "$_red$1 $printable$ob\n";
} elsif ($printable =~ s/^(enter:|update:|forget:) //) {
# something that should be SEEN
print "$b_green$1 $printable$ob\n";
} else {
print "$printable\n";
}
} else {
printf ("[%5d] $input\n", $statcount) if ($input !~ /^\s*$/);
}
}
&log_line("[$statcount] ".$input);
}
sub performSay {
my($in) = @_;
if (!defined($prevIn)) { $prevIn = ""; };
if (($skipReply == 0) && ($in !~ 'NOREPLY')) {
$prevIn = $in;
if (0) { # for mac speech manager niceties
$in =~ s/ at (ht|f)/ $1/ig;
$in =~ s/((ht|f)tp:\S+)/here [[cmnt $1 ]]/ig;
}
&say($in);
}
# this could echo everything to somewhere
# &msg('somebody', ".say $in");
return '';
}
sub performReply {
if ($msgType eq 'private') {
&msg($who, $_[0]);
} else {
&say("$_[0]");
}
}
sub log_line {
my($line) = @_;
my($logwrite) = 0;
my $s = time();
if ($param{'logfile'} ne '') {
$line =~ s/\n*$/\n/;
open(TRACK, ">>$param{logfile}");
$loglines++;
$total_loglines++;
print TRACK "$s $line";
close(TRACK); # if (TRACK);
}
}
sub getAllKeys {
@myIsKeys = getDBMKeys("is");
@myAreKeys = getDBMKeys("are");
$factoidCount = $#myIsKeys + $#myAreKeys + 2;
$updateCount = 0;
}
sub purifyNick {
my $safeWho = $_[0];
$safeWho =~ s/\*//g;
$safeWho =~ s/\\/\\\\/g;
$safeWho =~ s/\[/\\\[/g;
$safeWho =~ s/\]/\\\]/g;
$safeWho =~ s/\|/\\\|/g;
$safeWho =~ tr/A-Z/a-z/;
$safeWho = substr($safeWho, 0, 9);
$safeWho =~ s/\s+.*//;
return $safeWho;
}
1;
__DATA__
/dimer\[0\/: trailing \ in regexp at /usr/users/infobot/infobot-current/src/Misc.pl line 164, <FH> chunk 98.