mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-25 13:29:29 +01:00
Completely rewrite urban dictionary module
This commit is contained in:
parent
69f2f5477a
commit
6a7fffcb03
109
modules/urban
109
modules/urban
@ -1,6 +1,105 @@
|
||||
#!/bin/sh
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#!/usr/bin/env perl
|
||||
|
||||
~/pbot/modules/lookupbot.pl urban $*
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use WebService::UrbanDictionary;
|
||||
use Getopt::Long qw(GetOptionsFromString);
|
||||
|
||||
Getopt::Long::Configure ("bundling");
|
||||
|
||||
my $getopt_error;
|
||||
local $SIG{__WARN__} = sub {
|
||||
$getopt_error = shift;
|
||||
chomp $getopt_error;
|
||||
};
|
||||
|
||||
my $usage = "Usage: udict [-m <show definition matching this regex>] [-n <entry number>] [-s <up/down (sort by thumbs up/down)>] <phrase>\n";
|
||||
|
||||
my ($entry, $sort, $match, $show_all);
|
||||
my $arguments = join(' ', @ARGV);
|
||||
|
||||
my ($ret, $args) = GetOptionsFromString($arguments,
|
||||
'a' => \$show_all,
|
||||
'm=s' => \$match,
|
||||
'n=i' => \$entry,
|
||||
's=s' => \$sort);
|
||||
|
||||
print "$getopt_error -- $usage" and exit if defined $getopt_error;
|
||||
print "Missing phrase -- $usage" and exit if @$args == 0;
|
||||
|
||||
$args = join(' ', @$args);
|
||||
|
||||
my $ud = WebService::UrbanDictionary->new;
|
||||
my $results = $ud->request($args);
|
||||
|
||||
sub sort_entries {
|
||||
if (defined $sort) {
|
||||
if (lc $sort eq 'down' or lc $sort eq 'd') {
|
||||
return $a->{'thumbs_up'} <=> $b->{'thumbs_up'};
|
||||
} else {
|
||||
return $b->{'thumbs_up'} <=> $a->{'thumbs_up'};
|
||||
}
|
||||
} else {
|
||||
return $b->{'thumbs_up'} <=> $a->{'thumbs_up'};
|
||||
}
|
||||
}
|
||||
|
||||
my @entries = sort sort_entries @{ $results->definitions };
|
||||
my $num_entries = @entries;
|
||||
|
||||
if ($num_entries == 0) {
|
||||
print "$args: no definition found.\n";
|
||||
exit;
|
||||
} else {
|
||||
=cut
|
||||
if ($num_entries > 1 and not defined $entry) {
|
||||
print "$num_entries entries:\n";
|
||||
}
|
||||
=cut
|
||||
}
|
||||
|
||||
if (defined $entry) {
|
||||
if ($entry < 1 or $entry > $num_entries) {
|
||||
print "No such entry. There are $num_entries for $args.\n";
|
||||
exit;
|
||||
}
|
||||
$entry--;
|
||||
}
|
||||
|
||||
sub show_definition {
|
||||
my $entry = shift;
|
||||
|
||||
print "($entry->{'thumbs_up'}/$entry->{'thumbs_down'}) $entry->{'definition'}\n";
|
||||
print "$entry->{'example'}\n" if $entry->{'example'};
|
||||
}
|
||||
|
||||
if (defined $show_all or defined $match) {
|
||||
my $shown;
|
||||
eval {
|
||||
for my $each (@entries) {
|
||||
if (defined $match) {
|
||||
my $def = $each->{'definition'} . "\n" . $each->{'example'};
|
||||
next if $def !~ m/$match/im;
|
||||
}
|
||||
show_definition($each);
|
||||
print "\n";
|
||||
$shown++;
|
||||
}
|
||||
};
|
||||
|
||||
if ($@) {
|
||||
my $err = $@;
|
||||
|
||||
$err =~ s/; marked by <-- HERE.*/: $match/;
|
||||
|
||||
print "Oops, $err\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (not $shown) {
|
||||
print "$args: no definition matching '$match' found.\n";
|
||||
}
|
||||
} else {
|
||||
show_definition($entries[$entry]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user