1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-07 16:55:42 -04:00
perlbuut/plugins/oeis.pm
Shlomi Fish a1f08b1315 Add a test for the oeis plugin.
In the process I extracted a function.
2020-10-30 12:09:36 +02:00

59 lines
1.5 KiB
Perl

# OEIS plugin to buubot3 by b_jonas
use warnings;
use strict;
use CGI;
use LWP::Simple;
use WWW::Shorten 'TinyURL';
sub query_oeis {
my ($q)=@_;
warn 1;
if( $q =~ /^\s*(?:(?:help|wtf|\?|\:)\s*)?$/i )
{
return([], ["see http://oeis.org/"]);
}
warn 2;
my $uri = "http://oeis.org/search?q=" . CGI::escape($q)."&fmt=text";
local $_ = get($uri); # change this in the real plugin
warn 2.5;
if (/^Showing .* of (\d+)/mi) {
my $nrfound = $1;
unless( /^%N (\S+) (.*)/m )
{
return([ "Reply from OEIS in unknown format 2"],[]);
}
warn 3;
my($anum, $title) = ($1, $2);
my $elts_re = /^%V/m ? qr/^%[VWX] \S+ (.*)/m : qr/^%[STU] \S+ (.*)/m;
my $elts = join ",", /$elts_re/g;
$elts =~ s/,,+/,/g;
warn 3.5;
if (1 == $nrfound) {
my $outuri = sprintf "http://oeis.org/%s", $anum;
return ([],[sprintf( "%s %.256s: %.512s", $outuri, $title, $elts)]);
} else {
my $outuri1 = "http://oeis.org/searchs?q=" . CGI::escape($q);
warn 3.6;
# my $outuri = makeashorterlink($outuri1) || $outuri1;
return([], [sprintf( "%s %.10s(1/%d) %.256s: %.512s", $outuri1, $anum, $nrfound, $title, $elts)]);
}
} elsif (/^no matches/mi) {
return([], ["No matches found"]);
warn 4
} else {
warn 5;
return([ "Reply from OEIS in unknown format: $_"], []);
}
}
sub {
my($said) = @_;
my $q = $said->{"body"};
my ($err, $out) = query_oeis($q);
print "Error: @$err\n" if @$err;
print "@$out\n";
}
__DATA__
Search for a sequence in the On-Line Encyclopedia of Integer Sequences (http://tinyurl.com/2blo2w) Syntax, oeis 1,1,2,3,5