Add !anek !анек !анекдот commands
This commit is contained in:
@@ -14,6 +14,7 @@ use BotLib::Conf qw (LoadConf);
|
|||||||
use BotLib::Admin qw (@ForbiddenMessageTypes GetForbiddenTypes AddForbiddenType
|
use BotLib::Admin qw (@ForbiddenMessageTypes GetForbiddenTypes AddForbiddenType
|
||||||
DelForbiddenType ListForbidden FortuneToggle FortuneStatus
|
DelForbiddenType ListForbidden FortuneToggle FortuneStatus
|
||||||
PluginToggle PluginStatus PluginEnabled);
|
PluginToggle PluginStatus PluginEnabled);
|
||||||
|
use BotLib::Anek qw (Anek);
|
||||||
use BotLib::Archeologist qw (Dig);
|
use BotLib::Archeologist qw (Dig);
|
||||||
use BotLib::Buni qw (Buni);
|
use BotLib::Buni qw (Buni);
|
||||||
use BotLib::Drink qw (Drink);
|
use BotLib::Drink qw (Drink);
|
||||||
@@ -71,6 +72,12 @@ sub Command {
|
|||||||
$reply = 'Шта?';
|
$reply = 'Шта?';
|
||||||
} elsif (substr ($text, 1) eq 'ver' || substr ($text, 1) eq 'version' || substr ($text, 1) eq 'версия') {
|
} elsif (substr ($text, 1) eq 'ver' || substr ($text, 1) eq 'version' || substr ($text, 1) eq 'версия') {
|
||||||
$reply = 'Версия: Нуль.Чего-то_там.Чего-то_там';
|
$reply = 'Версия: Нуль.Чего-то_там.Чего-то_там';
|
||||||
|
} elsif (substr ($text, 1) eq 'anek' || substr ($text, 1) eq 'анек' || substr ($text, 1) eq 'анекдот') {
|
||||||
|
$msg->typing ();
|
||||||
|
$reply = "```\n" . Anek () . "\n```";
|
||||||
|
sleep (irand (2) + 1);
|
||||||
|
$msg->replyMd ($reply);
|
||||||
|
return;
|
||||||
} elsif (length ($text) >= 2 && (substr ($text, 1, 2) eq 'w ' || substr ($text, 1, 2) eq 'п ')) {
|
} elsif (length ($text) >= 2 && (substr ($text, 1, 2) eq 'w ' || substr ($text, 1, 2) eq 'п ')) {
|
||||||
my $city = substr $text, 3;
|
my $city = substr $text, 3;
|
||||||
$reply = Weather $city;
|
$reply = Weather $city;
|
||||||
@@ -208,6 +215,7 @@ sub Command {
|
|||||||
$reply = << "MYHELP";
|
$reply = << "MYHELP";
|
||||||
```
|
```
|
||||||
${csign}help | ${csign}помощь - список команд
|
${csign}help | ${csign}помощь - список команд
|
||||||
|
${csign}anek | ${csign}анек | ${csign}анекдот - рандомный анекдот с anekdot.ru
|
||||||
${csign}buni - рандомный стрип hapi buni
|
${csign}buni - рандомный стрип hapi buni
|
||||||
${csign}bunny | ${csign}rabbit | ${csign}кролик - кролик
|
${csign}bunny | ${csign}rabbit | ${csign}кролик - кролик
|
||||||
${csign}cat | ${csign}кис - кошечка
|
${csign}cat | ${csign}кис - кошечка
|
||||||
|
|||||||
79
lib/BotLib/Anek.pm
Normal file
79
lib/BotLib/Anek.pm
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package BotLib::Anek;
|
||||||
|
|
||||||
|
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 Encode;
|
||||||
|
use HTML::TokeParser;
|
||||||
|
use JSON::XS;
|
||||||
|
use Log::Any qw ($log);
|
||||||
|
use Mojo::UserAgent;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
use version; our $VERSION = qw (1.0);
|
||||||
|
use Exporter qw (import);
|
||||||
|
our @EXPORT_OK = qw (Anek);
|
||||||
|
|
||||||
|
sub Anek {
|
||||||
|
my $r;
|
||||||
|
my $ret = 'Все рассказчики анекдотов отдыхают';
|
||||||
|
for (1..3) {
|
||||||
|
my $ua = Mojo::UserAgent->new->connect_timeout (3);
|
||||||
|
$ua->max_redirects(3);
|
||||||
|
$r = $ua->get ('https://www.anekdot.ru/rss/randomu.html')->result;
|
||||||
|
|
||||||
|
if ($r->is_success) {
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($r->is_success) {
|
||||||
|
my $json;
|
||||||
|
my $response_text = decode ('UTF-8', $r->body);
|
||||||
|
my @text = split /\n/, $response_text;
|
||||||
|
|
||||||
|
while (my $str = pop @text) {
|
||||||
|
if ($str =~ /^var anekdot_texts \= JSON/) {
|
||||||
|
$str = (split /JSON\.parse\(\'/, $str, 2)[1];
|
||||||
|
|
||||||
|
if (defined $str && length ($str) > 10) {
|
||||||
|
$json = (split /\';\)/, $str, 2)[0];
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined $json && length ($json) > 10) {
|
||||||
|
$json =~ s/\\"/"/g;
|
||||||
|
$json =~ s/\\\\"/\\"/g;
|
||||||
|
chop $json;
|
||||||
|
chop $json;
|
||||||
|
chop $json;
|
||||||
|
my $anek = eval { ${JSON::XS->new->relaxed->decode ($json)}[0] };
|
||||||
|
|
||||||
|
if (defined $anek) {
|
||||||
|
my @anek = split (/<br>/, $anek);
|
||||||
|
$ret = join ("\n", @anek);
|
||||||
|
} else {
|
||||||
|
$log->warn (sprintf '[WARN] anekdot.ru server returns incorrect json, full response text message: %s', $response_text);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$log->warn (sprintf '[WARN] anekdot.ru server returns unexpected response text: %s', $r->body);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$log->warn (sprintf '[WARN] anekdot.ru server return status %s with message: %s', $r->code, $r->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
# vim: set ft=perl noet ai ts=4 sw=4 sts=4:
|
||||||
Reference in New Issue
Block a user