From 23471ee185d668723cc5d2c6912fc213ab428e86 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 14 Mar 2021 14:02:47 +0300 Subject: [PATCH] =?UTF-8?q?Implement=20!drink=20and=20!=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D0=BD=D0=B8=D0=BA=20commands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/botlib.pm | 6 +++++ lib/drink.pm | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 lib/drink.pm diff --git a/lib/botlib.pm b/lib/botlib.pm index a624a90..4e1fb94 100644 --- a/lib/botlib.pm +++ b/lib/botlib.pm @@ -14,6 +14,7 @@ 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 drink qw (drink); use fisher qw (fish); use fortune qw (fortune); use friday qw (friday); @@ -164,6 +165,10 @@ sub command { $reply = sprintf "```\n%s\n```\n", trim (fortune ()); $msg->replyMd ($reply); return; + } elsif (substr ($text, 1) eq 'drink' || substr ($text, 1) eq 'праздник') { + $msg->typing (); + $reply = drink (); + sleep (irand (2) + 1); } elsif (substr ($text, 1) eq 'dig' || substr ($text, 1) eq 'копать') { $msg->typing (); $reply = dig $highlight; @@ -184,6 +189,7 @@ ${csign}buni - рандомный стрип hapi buni ${csign}bunny | ${csign}rabbit | ${csign}кролик - кролик ${csign}cat | ${csign}кис - кошечка ${csign}dig | ${csign}копать - заняться археологией +${csign}drink | ${csign}праздник - какой сегодня праздник? ${csign}fish | ${csign}рыба | ${csign}рыбка - порыбачить ${csign}fishing | ${csign}рыбалка - порыбачить ${csign}f | ${csign}ф - рандомная фраза из сборника цитат fortune_mod diff --git a/lib/drink.pm b/lib/drink.pm new file mode 100644 index 0000000..682ad13 --- /dev/null +++ b/lib/drink.pm @@ -0,0 +1,69 @@ +package drink; + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw (:std :utf8); +use English qw ( -no_match_vars ); +use Encode; +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 (drink); + +my @MONTH = qw (yanvar fevral mart aprel may iyun iyul avgust sentyabr oktyabr noyabr dekabr); + +sub drink { + my $r; + my $ret = 'Не знаю праздников - вджобываю весь день на шахтах, как проклятая.'; + my ($dayNum, $monthNum) = (localtime ())[3, 4]; + my $url = sprintf 'https://kakoysegodnyaprazdnik.ru/baza/%s/%s', $MONTH[$monthNum], $dayNum; + + for (1..3) { + my $http = HTTP::Tiny->new (timeout => 3); + $r = $http->get ($url, {'Accept-Charset' => 'utf-8', 'Accept-Language' => 'ru-RU'}); + + if ($r->{success}) { + last; + } + + sleep 2; + } + + if ($r->{success}) { + my $p = HTML::TokeParser->new(\$r->{content}); + my @a; + my @holyday; + + do { + $#a = -1; + @a = $p->get_tag("span"); + + if ($#{$a[0]} > 2 && defined $a[0][1]->{itemprop} && $a[0][1]->{itemprop} eq 'text') { + push @holyday,'* ' . decode ('UTF-8', $p->get_trimmed_text ('/span')); + } + + } while ($#{$a[0]} > 1); + + if ($#holyday > 0) { + # cut off something weird, definely not a "holyday" + $#holyday = $#holyday - 1; + } + + if ($#holyday > 0) { + $ret = join "\n", @holyday; + } + } 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: