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.
90 lines
1.5 KiB
Perl
90 lines
1.5 KiB
Perl
# infobot copyright kevin lenzo 1997-1999
|
|
|
|
sub search {
|
|
return '' unless $addressed;
|
|
|
|
my $pattern = shift ;
|
|
$pattern =~ s/^\s*(search|scan)(\s+for)?\s+//i;
|
|
my $type = lc($1);
|
|
|
|
my $bail_thresh = 5;
|
|
|
|
if ($pattern =~ s/^\d+ //) {
|
|
$bail_thresh = $&;
|
|
} else {
|
|
if ($type eq 'scan') {
|
|
$bail_thresh = 1;
|
|
}
|
|
}
|
|
|
|
$pattern =~ s/\?+\s*$//; # final ? marks
|
|
|
|
return '' if ($pattern =~ /^\s*$/);
|
|
|
|
my $minlength = 3;
|
|
|
|
return "that pattern's too short. try something with at least $minlength characters."
|
|
if (length($pattern) < $minlength);
|
|
|
|
&msg($who,"Looking for $pattern:");
|
|
|
|
my (@response);
|
|
|
|
my (@myIsKeys) = getDBMKeys("is");
|
|
|
|
my $t = time();
|
|
my $count = 0;
|
|
|
|
foreach (@myIsKeys) {
|
|
if (/$pattern/) {
|
|
$r = &get("is", $_);
|
|
} else {
|
|
next ;
|
|
}
|
|
my $t1 = time();
|
|
if ($t1-$t < 2) {
|
|
sleep 2;
|
|
}
|
|
&msg($who, "$_ is $r");
|
|
$t = $t1;
|
|
last if ++$count >= $bail_thresh;
|
|
}
|
|
|
|
my $last;
|
|
if ($count < $bail_thresh) {
|
|
my (@myAreKeys) = getDBMKeys("are");
|
|
foreach (@myAreKeys) {
|
|
if (/$pattern/) {
|
|
$r = &get("are", $_);
|
|
} else {
|
|
next ;
|
|
}
|
|
my $t1 = time();
|
|
if ($t1-$t < 2) {
|
|
sleep 2;
|
|
}
|
|
$t = $t1;
|
|
&msg($who, "$_ are $r");
|
|
last if ++$count >= $bail_thresh;
|
|
}
|
|
$last = 1;
|
|
}
|
|
|
|
if (!$count) {
|
|
&msg($who, "nothing found for $pattern");
|
|
} else {
|
|
my $reply = " ...showing $count hits";
|
|
if ($last) {
|
|
$reply .= " (all shown).";
|
|
} else {
|
|
$reply .= " (more may exist).";
|
|
}
|
|
|
|
&msg($who, $reply);
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
1;
|