From cc43141d2012cf8a4d8e24ff96e8e38f28a264f0 Mon Sep 17 00:00:00 2001 From: eleksir Date: Fri, 18 Dec 2020 20:29:43 +0300 Subject: [PATCH] =?UTF-8?q?Implement=20!dig=20and=20!=D0=BA=D0=BE=D0=BF?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20commands,=20fix=20typo=20in=20help=20messa?= =?UTF-8?q?ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/archeologist.pm | 101 ++++++++++++++++++++++++++++++++++++++++++++ lib/botlib.pm | 35 +++++++++++++++ lib/telegrambot.pm | 10 +++-- 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 lib/archeologist.pm diff --git a/lib/archeologist.pm b/lib/archeologist.pm new file mode 100644 index 0000000..a8aea57 --- /dev/null +++ b/lib/archeologist.pm @@ -0,0 +1,101 @@ +package archeologist; + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw(:std :utf8); +use English qw( -no_match_vars ); + +use vars qw/$VERSION/; +use Exporter qw(import); +our @EXPORT_OK = qw(dig); +$VERSION = '1.0'; + +sub dig { + my $name = shift; + + my @artifact = ( + 'амулет Мерлина', + 'библиотеку Ивана Грозного', + 'деревянную плошку', + 'диплока', + 'доски Ноева Ковчега', + 'древний презерватив из бараньей кишки', + 'икону', + 'инсталятор Windows 3.11', + 'истлевший гроб', + 'каменный топор', + 'клад со златом-серебром', + 'кривой нож', + 'ледяную глыбу', + 'лунный грунт', + 'мамонта', + 'мамонтенка', + 'метеорит', + 'мумию фараона Тутанхамона', + 'носки прапорщика (поставит в угол)', + 'обломки грузинской керамики', + 'птеродактиля', + 'рубль с Лениным', + 'рыцарские доспехи', + 'синий мох', + 'скелет', + 'скелет собаки по кличке Беня', + 'тиранозавтра', + 'тотем индейцев', + 'трубу с туркменским газом', + ); + + my @location = ( + 'в архивах', + 'в гималаях', + 'в интернете', + 'в кармане', + 'в клумбе', + 'в лунном кратере', + 'во льдах арктики', + 'в морге', + 'в окрестностях погоста', + 'в песочнице', + 'в пустыне Гоби', + 'в пустыне Сахаре', + 'в русле высохшей реки', + 'в собственной памяти', + 'в старом сортире', + 'в углу', + 'в цветочном горшке', + 'на бабушкином огороде', + 'на винчестере', + 'на горе Арарат', + 'на горном плато', + 'на дне моря', + 'на необитаемом острове', + 'на первом слое сумрака', + 'на просторах Украины', + ); + + my $find_probability = int (rand 100); + my $success_probability = int (rand 100); + my $artifact_age = int (rand 15000); + + if ($find_probability < 15) { + return sprintf 'По уши закопавшись %s, %s, нифига вы не выкопали! Может повезет в другом месте?', $location[int (rand ($#location + 1))], $name; + } + + my $phrase = sprintf "Вы начали раскопки %s и усиленно роете лопатами, экскаватором...\n", $location[int (rand ($#location + 1))]; + $phrase .= "Вам кажется что ваш совочек ударился обо что-то твердое. Может, это клад?!\n\n"; + + if ($success_probability < 5) { + $phrase .= sprintf '%s стал лучшим археологом, выкопав %s! возраст артефакта - %s лет!', $name, $artifact[int (rand ($#artifact + 1))], $artifact_age; + } else { + $phrase .= sprintf "Поздравляю, %s! Вы только что выкопали %s, возраст - %s лет!\n", $name, $artifact[int (rand ($#artifact + 1))], $artifact_age; + $phrase .= sprintf 'Извини %s, но на артефакт это не тянет! Однако, попытка хорошая!', $name; + } + + return $phrase; +} + +1; + +# vim: set ft=perl noet ai ts=4 sw=4 sts=4: diff --git a/lib/botlib.pm b/lib/botlib.pm index f3a121d..b8f4234 100644 --- a/lib/botlib.pm +++ b/lib/botlib.pm @@ -18,6 +18,7 @@ use lat qw(latAnswer); use karma qw(karmaSet karmaGet); use friday qw(friday); use fortune qw(fortune fortune_toggle fortune_status); +use archeologist qw (dig); use vars qw/$VERSION/; use Exporter qw(import); @@ -227,9 +228,37 @@ sub randomCommonPhrase { } sub command { + my $self = shift; + my $msg = shift; my $text = shift; my $chatid = shift; my $reply; + my $fullname; + my $highlight; + my $username; + my $userid = $msg->from->id; + $username = $msg->from->username if ($msg->from->can ('username') && defined($msg->from->username)); + + if ($msg->from->can ('first_name') && defined ($msg->from->first_name)) { + $fullname = $msg->from->first_name; + + if ($msg->from->can ('last_name') && defined ($msg->from->last_name)) { + $fullname .= ' ' . $msg->from->last_name; + } + } elsif ($msg->from->can ('last_name') && defined ($msg->from->last_name)) { + $fullname .= $msg->from->last_name; + } + + if (defined ($username)) { + if (defined ($fullname)) { + $highlight = "[$fullname](tg://user?id=$userid)"; + } else { + $highlight = "[$username](tg://user?id=$userid)"; + } + } else { + $highlight = "[$fullname](tg://user?id=$userid)"; + } + if (substr ($text, 1) eq 'ping') { $reply = 'Pong.'; @@ -268,6 +297,12 @@ sub command { $reply = fortune_toggle ($chatid, 0); } elsif (substr ($text, 1) eq 'f ?' || substr ($text, 1) eq 'fortune ?' || substr ($text, 1) eq 'фортунка ?' || substr ($text, 1) eq 'ф ?') { $reply = fortune_status ($chatid); + } elsif (substr ($text, 1) eq 'dig' || substr ($text, 1) eq 'копать') { + my $send_args; + $send_args->{text} = dig ($highlight); + $send_args->{parse_mode} = 'Markdown'; + $send_args->{chat_id} = $msg->chat->id; + Teapot::Bot::Brain::sendMessage ($self, $send_args); } return $reply; diff --git a/lib/telegrambot.pm b/lib/telegrambot.pm index a8510b9..b9b28d4 100644 --- a/lib/telegrambot.pm +++ b/lib/telegrambot.pm @@ -238,13 +238,14 @@ sub __on_msg { $send_args->{text} = << 'MYHELP'; ``` !help | !помощь - список команд +!dig | !копать - заняться археологией !f | !ф - рандомная фраза из сборника цитат fortune_mod !fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod !f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра !fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра !f ? | !ф ? - показываем ли с утра фортунку для чата !fortune ? | !фортунка ? - показываем ли с утра фортунку для чата -!friday | пятница - а не пятница ли сегодня? +!friday | !пятница - а не пятница ли сегодня? !lat | !лат - сгенерировать фразу из крылатых латинских выражений !ping | !пинг - попинговать бота !ver | !version | !версия - что-то про версию ПО @@ -260,7 +261,7 @@ MYHELP Teapot::Bot::Brain::sendMessage ($self, $send_args); return; } else { - $reply = command ($text, $userid); + $reply = command ($self, $msg, $text, $userid); } } else { my $just_message_in_chat = 0; @@ -371,13 +372,14 @@ MYHELP $send_args->{text} = << 'MYHELP'; ``` !help | !помощь - список команд +!dig | !копать - заняться археологией !f | !ф - рандомная фраза из сборника цитат fortune_mod !fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod !f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра !fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра !f ? | !ф ? - показываем ли с утра фортунку для чата !fortune ? | !фортунка ? - показываем ли с утра фортунку для чата -!friday | пятница - а не пятница ли сегодня? +!friday | !пятница - а не пятница ли сегодня? !lat | !лат - сгенерировать фразу из крылатых латинских выражений !ping | !пинг - попинговать бота !ver | !version | !версия - что-то про версию ПО @@ -393,7 +395,7 @@ MYHELP Teapot::Bot::Brain::sendMessage ($self, $send_args); return; } else { - $reply = command ($text, $chatid); + $reply = command ($self, $msg, $text, $chatid); } } elsif ( ($text eq $qname) or