diff --git a/lib/botlib.pm b/lib/botlib.pm index 7a0996a..35bea46 100644 --- a/lib/botlib.pm +++ b/lib/botlib.pm @@ -9,6 +9,7 @@ use English qw ( -no_match_vars ); use Carp qw (carp); use archeologist qw (dig); use conf qw (loadConf); +use fisher qw (fish); use fortune qw (fortune); use friday qw (friday); use karma qw (karmaGet); @@ -177,21 +178,23 @@ sub command { } elsif (substr ($text, 1) eq 'help' || substr ($text, 1) eq 'помощь') { $reply = <<"EOL"; -${csign}help | ${csign}помощь - это сообщение -${csign}cat | ${csign}кис - кошечка -${csign}dig | ${csign}копать - заняться археологией -${csign}f | ${csign}ф - рандомная фраза из сборника цитат fortune_mod -${csign}fortune | ${csign}фортунка - рандомная фраза из сборника цитат fortune_mod -${csign}friday | ${csign}пятница - а не пятница ли сегодня? -${csign}karma фраза - посмотреть карму фразы -${csign}карма фраза - посмотреть карму фразы -фраза++ | фраза-- - повысить или понизить карму фразы -${csign}lat | ${csign}лат - сгенерировать фразу из крылатого латинского выражения -${csign}ping | ${csign}пинг - попинговать бота -${csign}some_brew - выдать соответствующий напиток, бармен может налить rum, ром, vodka, водку, beer, пиво, tequila, текила, whisky, виски, absinthe, абсент -${csign}ver | ${csign}version - написать что-то про версию ПО -${csign}версия - написать что-то про версию ПО -${csign}w город | ${csign}п город - погода в городе +${csign}help | ${csign}помощь - это сообщение +${csign}cat | ${csign}кис - кошечка +${csign}dig | ${csign}копать - заняться археологией +${csign}fish | ${csign}fisher - порыбачить +${csign}рыба | ${csign}рыбка | ${csign}рыбалка - заняться археологией +${csign}f | ${csign}ф - рандомная фраза из сборника цитат fortune_mod +${csign}fortune | ${csign}фортунка - рандомная фраза из сборника цитат fortune_mod +${csign}friday | ${csign}пятница - а не пятница ли сегодня? +${csign}karma фраза - посмотреть карму фразы +${csign}карма фраза - посмотреть карму фразы +фраза++ | фраза-- - повысить или понизить карму фразы +${csign}lat | ${csign}лат - сгенерировать фразу из крылатого латинского выражения +${csign}ping | ${csign}пинг - попинговать бота +${csign}some_brew - выдать соответствующий напиток, бармен может налить rum, ром, vodka, водку, beer, пиво, tequila, текила, whisky, виски, absinthe, абсент +${csign}ver | ${csign}version - написать что-то про версию ПО +${csign}версия - написать что-то про версию ПО +${csign}w город | ${csign}п город - погода в городе EOL } elsif (substr ($text, 1) eq 'lat' || substr ($text, 1) eq 'лат') { @@ -200,6 +203,8 @@ EOL $reply = kitty (); } elsif (substr ($text, 1) eq 'dig' || substr ($text, 1) eq 'копать') { $reply = dig ($chattername); + } elsif (substr ($text, 1) eq 'fish' || substr ($text, 1) eq 'fisher' || substr ($text, 1) eq 'рыба' || substr ($text, 1) eq 'рыбка' || substr ($text, 1) eq 'рыбалка') { + $reply = fish ($chattername); } elsif ((length ($text) >= 6 && (substr ($text, 1, 6) eq 'karma ' || substr ($text, 1, 6) eq 'карма ')) || substr ($text, 1) eq 'karma' || substr ($text, 1) eq 'карма') { my $mytext = ''; diff --git a/lib/fisher.pm b/lib/fisher.pm new file mode 100644 index 0000000..69d5627 --- /dev/null +++ b/lib/fisher.pm @@ -0,0 +1,133 @@ +package fisher; + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw (:std :utf8); +use English qw ( -no_match_vars ); +use Math::Random::Secure qw (irand); + +use version; our $VERSION = qw (1.0); +use Exporter qw (import); +our @EXPORT_OK = qw (fish); + + +sub fish { + my $name = shift; + + my @artifact = ( + 'семикрылого чешуйчатого пятихуя', + 'разумного конденсатора', + 'сальмонеллу', + 'селёдку', + 'желтоперого тунца', + 'розовую сальмонеллу', + 'голавля', + 'барбуса', + 'окуня', + 'верхоплавку', + 'коричневую форель', + 'полярника', + 'плотву', + 'зубатку', + 'солнечную рыбу', + 'cтарую шину', + 'скользкую корягу', + 'лампу джина', + 'любовное послание в бутылке', + 'старое бревно', + 'резиновый сапог', + 'труп', + 'Лох-Несское чудовище', + 'старую рыбацкую приманку', + 'кусок Титаника', + 'обломок Атлантиды', + 'кита', + 'кальмара', + 'дельфина', + 'ската', + 'подводную лодку', + 'медузу', + 'морскую звезду', + 'электрического угря', + 'большую белую акулу', + 'аквалангиста', + 'монстра', + 'вируса', + 'сырую пачку сигарет', + 'водоросли', + 'якорь от лодки', + 'водяного', + 'русалку', + 'палтуса', + 'труп собаки по кличке Беня', + 'олигофрена Проню', + 'огеймера Фишкина', + ); + + my @location = ( + 'в поток', + 'в озеро', + 'в реку', + 'в северерный ледовитый океан', + 'в индийский океан', + 'в биде', + 'в детский плавательный бассейн', + 'в туалет', + 'в кучу рвоты', + 'в лужу мочи', + 'в раковину', + 'в слив ванной', + 'в лужу грязи', + 'в ведро воды', + 'в бутылку с водкой', + 'в ванную', + 'в бочку с дождевой водой', + 'в аквариум', + 'в сугроб', + 'в водопад', + 'в чашку кофе', + 'в стакан молока', + 'в черную дыру', + 'дно Удомельского реактора', + 'на Марс', + 'в соседнюю галактуку', + 'к соседу на балкон', + 'далеко-далеко', + 'далеко и надолго', + 'на крышу дома', + ); + + my @material = ( + 'бамбуковую', + 'фиберглассовую', + 'карбоновую', + 'композитную', + ); + + my $find_probability = irand 100; + my $success_probability = irand 100; + my $weight = irand 7000; + + my $phrase = sprintf "Вы забрасываете %s удочку %s.\nВы чувствуете поклевку и начинаете быстро тащить что-то.\n", $material[irand ($#material + 1)], $location[irand ($#location + 1)]; + + if ($find_probability <= 20) { + $phrase .= sprintf 'Черт, твоя рыбка сорвалась, %s! Не беда, может потом повезет?', $name; + return $phrase; + } + + $phrase .= sprintf "Поздравляю, %s! Вы только что поймали %s! аж на %d кило!\n\n", $name, $artifact[irand ($#artifact + 1)], $weight; + + if ($success_probability <= 25) { + $phrase .= sprintf 'Ё-мое!!! А это ведь новый рекорд! Продолжай в том же духе, %s!', $name; + } else { + $phrase .= sprintf 'Извини %s, но это не новый рекорд! Однако, хорошая попытка!', $name; + } + + return $phrase; +} + +1; + +# vim: set ft=perl noet ai ts=4 sw=4 sts=4: