diff --git a/cpanfile b/cpanfile index 54d45a7..279950b 100644 --- a/cpanfile +++ b/cpanfile @@ -9,6 +9,7 @@ requires 'Digest::SHA'; requires 'File::Basename'; requires 'File::Path'; requires 'Hailo'; +requires 'HTML::TokeParser'; requires 'HTTP::Tiny'; requires 'IO::Socket::SSL'; requires 'JSON'; diff --git a/lib/botlib.pm b/lib/botlib.pm index c1fd6a8..9a0f6e4 100644 --- a/lib/botlib.pm +++ b/lib/botlib.pm @@ -13,6 +13,7 @@ use Math::Random::Secure qw (irand); use conf qw (loadConf); use admin qw (@forbiddenMessageTypes getForbiddenTypes addForbiddenType delForbiddenType listForbidden fortune_toggle fortune_status plugin_toggle plugin_status pluginEnabled); use archeologist qw (dig); +use buni qw (buni); use fisher qw (fish); use fortune qw (fortune); use friday qw (friday); @@ -69,6 +70,12 @@ sub command { } elsif (length ($text) >= 2 && (substr ($text, 1, 2) eq 'w ' || substr ($text, 1, 2) eq 'п ')) { my $city = substr $text, 3; $reply = weather $city; + } elsif (substr ($text, 1) eq 'buni') { + $msg->typing (); + $reply = buni (); + sleep (irand (2) + 1); + $msg->replyMd ($reply); + return; } elsif (substr ($text, 1) eq 'cat' || substr ($text, 1) eq 'кис') { $msg->typing (); $reply = kitty (); @@ -167,6 +174,7 @@ sub command { $reply = << "MYHELP"; ``` ${csign}help | ${csign}помощь - список команд +${csign}buni - рандомный стрип hapi buni ${csign}bunny | ${csign}rabbit | ${csign}кролик - кролик ${csign}cat | ${csign}кис - кошечка ${csign}dig | ${csign}копать - заняться археологией diff --git a/lib/buni.pm b/lib/buni.pm new file mode 100644 index 0000000..d254355 --- /dev/null +++ b/lib/buni.pm @@ -0,0 +1,58 @@ +package buni; + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw (:std :utf8); +use English qw ( -no_match_vars ); +use Carp qw (cluck); +use HTTP::Tiny; +use HTML::TokeParser; + +use version; our $VERSION = qw (1.0); +use Exporter qw (import); +our @EXPORT_OK = qw (buni); + +sub buni { + my $r; + my $ret = 'Нету Buni'; + + for (1..3) { + my $http = HTTP::Tiny->new (timeout => 3); + $r = $http->get ('http://www.bunicomic.com/?random&nocache=1'); + + if ($r->{success}) { + last; + } + + sleep 2; + } + + if ($r->{success}) { + my $p = HTML::TokeParser->new(\$r->{content}); + my @a; + + # additional {} required in order "last" to work properly :) + { + do { + $#a = -1; + @a = $p->get_tag("meta"); + + if (defined $a[0][1]->{property} && $a[0][1]->{property} eq 'og:image') { + $ret = sprintf '[buni](%s)', $a[0][1]->{content}; + last; + } + + } while ($#{$a[0]} > 1); + } + } else { + cluck sprintf 'Server return status %s with message: %s', $r->{status}, $r->{reason}; + } + + return $ret; +} + +1; + +# vim: set ft=perl noet ai ts=4 sw=4 sts=4: