Implement !dig and !копать commands, fix typo in help message
This commit is contained in:
101
lib/archeologist.pm
Normal file
101
lib/archeologist.pm
Normal file
@@ -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:
|
||||||
@@ -18,6 +18,7 @@ use lat qw(latAnswer);
|
|||||||
use karma qw(karmaSet karmaGet);
|
use karma qw(karmaSet karmaGet);
|
||||||
use friday qw(friday);
|
use friday qw(friday);
|
||||||
use fortune qw(fortune fortune_toggle fortune_status);
|
use fortune qw(fortune fortune_toggle fortune_status);
|
||||||
|
use archeologist qw (dig);
|
||||||
|
|
||||||
use vars qw/$VERSION/;
|
use vars qw/$VERSION/;
|
||||||
use Exporter qw(import);
|
use Exporter qw(import);
|
||||||
@@ -227,9 +228,37 @@ sub randomCommonPhrase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub command {
|
sub command {
|
||||||
|
my $self = shift;
|
||||||
|
my $msg = shift;
|
||||||
my $text = shift;
|
my $text = shift;
|
||||||
my $chatid = shift;
|
my $chatid = shift;
|
||||||
my $reply;
|
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') {
|
if (substr ($text, 1) eq 'ping') {
|
||||||
$reply = 'Pong.';
|
$reply = 'Pong.';
|
||||||
@@ -268,6 +297,12 @@ sub command {
|
|||||||
$reply = fortune_toggle ($chatid, 0);
|
$reply = fortune_toggle ($chatid, 0);
|
||||||
} elsif (substr ($text, 1) eq 'f ?' || substr ($text, 1) eq 'fortune ?' || substr ($text, 1) eq 'фортунка ?' || substr ($text, 1) eq 'ф ?') {
|
} elsif (substr ($text, 1) eq 'f ?' || substr ($text, 1) eq 'fortune ?' || substr ($text, 1) eq 'фортунка ?' || substr ($text, 1) eq 'ф ?') {
|
||||||
$reply = fortune_status ($chatid);
|
$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;
|
return $reply;
|
||||||
|
|||||||
@@ -238,13 +238,14 @@ sub __on_msg {
|
|||||||
$send_args->{text} = << 'MYHELP';
|
$send_args->{text} = << 'MYHELP';
|
||||||
```
|
```
|
||||||
!help | !помощь - список команд
|
!help | !помощь - список команд
|
||||||
|
!dig | !копать - заняться археологией
|
||||||
!f | !ф - рандомная фраза из сборника цитат fortune_mod
|
!f | !ф - рандомная фраза из сборника цитат fortune_mod
|
||||||
!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod
|
!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod
|
||||||
!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра
|
!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра
|
||||||
!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра
|
!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра
|
||||||
!f ? | !ф ? - показываем ли с утра фортунку для чата
|
!f ? | !ф ? - показываем ли с утра фортунку для чата
|
||||||
!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата
|
!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата
|
||||||
!friday | пятница - а не пятница ли сегодня?
|
!friday | !пятница - а не пятница ли сегодня?
|
||||||
!lat | !лат - сгенерировать фразу из крылатых латинских выражений
|
!lat | !лат - сгенерировать фразу из крылатых латинских выражений
|
||||||
!ping | !пинг - попинговать бота
|
!ping | !пинг - попинговать бота
|
||||||
!ver | !version | !версия - что-то про версию ПО
|
!ver | !version | !версия - что-то про версию ПО
|
||||||
@@ -260,7 +261,7 @@ MYHELP
|
|||||||
Teapot::Bot::Brain::sendMessage ($self, $send_args);
|
Teapot::Bot::Brain::sendMessage ($self, $send_args);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
$reply = command ($text, $userid);
|
$reply = command ($self, $msg, $text, $userid);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
my $just_message_in_chat = 0;
|
my $just_message_in_chat = 0;
|
||||||
@@ -371,13 +372,14 @@ MYHELP
|
|||||||
$send_args->{text} = << 'MYHELP';
|
$send_args->{text} = << 'MYHELP';
|
||||||
```
|
```
|
||||||
!help | !помощь - список команд
|
!help | !помощь - список команд
|
||||||
|
!dig | !копать - заняться археологией
|
||||||
!f | !ф - рандомная фраза из сборника цитат fortune_mod
|
!f | !ф - рандомная фраза из сборника цитат fortune_mod
|
||||||
!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod
|
!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod
|
||||||
!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра
|
!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра
|
||||||
!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра
|
!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра
|
||||||
!f ? | !ф ? - показываем ли с утра фортунку для чата
|
!f ? | !ф ? - показываем ли с утра фортунку для чата
|
||||||
!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата
|
!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата
|
||||||
!friday | пятница - а не пятница ли сегодня?
|
!friday | !пятница - а не пятница ли сегодня?
|
||||||
!lat | !лат - сгенерировать фразу из крылатых латинских выражений
|
!lat | !лат - сгенерировать фразу из крылатых латинских выражений
|
||||||
!ping | !пинг - попинговать бота
|
!ping | !пинг - попинговать бота
|
||||||
!ver | !version | !версия - что-то про версию ПО
|
!ver | !version | !версия - что-то про версию ПО
|
||||||
@@ -393,7 +395,7 @@ MYHELP
|
|||||||
Teapot::Bot::Brain::sendMessage ($self, $send_args);
|
Teapot::Bot::Brain::sendMessage ($self, $send_args);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
$reply = command ($text, $chatid);
|
$reply = command ($self, $msg, $text, $chatid);
|
||||||
}
|
}
|
||||||
} elsif (
|
} elsif (
|
||||||
($text eq $qname) or
|
($text eq $qname) or
|
||||||
|
|||||||
Reference in New Issue
Block a user