diff --git a/bin/fortune_seed.pl b/bin/fortune_seed.pl new file mode 100644 index 0000000..83ebae3 --- /dev/null +++ b/bin/fortune_seed.pl @@ -0,0 +1,30 @@ +#!/usr/bin/perl + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw(:std :utf8); +use English qw( -no_match_vars ); +use vars qw/$VERSION/; +$VERSION = '1.0'; + +my $workdir; + +# before we run, change working dir +BEGIN { + use Cwd qw(chdir abs_path); + my @CWD = split /\//xms, abs_path ($PROGRAM_NAME); + if ($#CWD > 1) { $#CWD = $#CWD - 2; } + $workdir = join '/', @CWD; + chdir $workdir; +} + +use lib ("$workdir/lib", "$workdir/vendor_perl", "$workdir/vendor_perl/lib/perl5"); +use fortune qw(seed fortune); +use Carp; +$SIG{__DIE__} = sub { Carp::confess @_ }; + +seed (); + +exit 0; diff --git a/data/fortune_src/citates b/data/fortune_src/citates new file mode 100644 index 0000000..b019f4c --- /dev/null +++ b/data/fortune_src/citates @@ -0,0 +1,521 @@ +Что сказал Берлиоз своей музыкой? - ничего; но как потрясающе он это +сказал. + -- Джеймс Гиббонз Хьюнекер +% +Музыка будет по-немецки, вы не поймете. + -- Оскар Уайльд +% +Четвертый раз смотрю этот фильм и должна вам сказать, что сегодня актеры +играли как никогда. + -- Фаина Раневская +% +Продолжительность фильма определяется выносливостью мочевого пузыря +обычного зрителя. + -- Альфред Хичкок +% +А что, если наша Земля - ад какой-нибудь другой планеты? + -- Олдос Хаксли +% +Если видишь женщину голой достаточно долго, опять начинаешь обращать +внимание на ее лицо. + -- Генри Миллер +% +Самое главное - выглядеть совершенно естественно; но для этого нужно очень +много косметики. + -- Кельвин Кляйн +% +Любовь - лучшая косметика. Но косметику купить легче. + -- Ив Сен-Лоран +% +Людей без лишнего веса больше всего на кладбище. + -- Биверли Силлз +% +Лучше быть молодым навозным жуков, чем старой райской птицей. + -- Марк Твен +% +К старости недостатки ума становятся все заметнее, как и недостатки +внешности. + -- Франсуа Ларошфуко +% +Лучше быть старой, чем мертвой. + -- Бриджит Бардо +% +Вечеринка с коктейлями: место, где можно встретить людей, которые пьют так +много, что вы не можете вспомнить их имена. + -- Космо Сардо +% +Средство от похмелья: выжать сок из двух бутылок виски... + -- Эдди Кондон +% +Дважды два уже четыре, а будет еще лучше. + -- Хенрик Ягодзинский +% +Я сидел на диете 14 дней и потерял всего две недели. + -- Тоти Филдс +% +В жизни можно полагаться только на себя самого. Да и то не советую! + -- Тристан Бернар +% +Источник нашей мудрости - наш опыт. Источник нашего опыта - наша глупость. + -- Саша Гитри +% +Уходя на тот свет, не забудь выключить этот. + -- Виктор Коваль +% +Я не верю ни единому слову из того, что вы говорите... или я вам. + -- Оскар Уайльд +% +Я думаю, мы должны говорить правду или хотя бы говорить то, что мы думаем. + -- Юрий Лужков +% +Нельзя иметь все. Куда вы это положите? + -- Стивен Райт +% +Сначала забываешь имена, потом забываешь лица, потом забываешь застегивать +ширинку, потом забываешь расстегивать ширинку. + -- Лео Розенберг +% +Время - лучший учитель, но, к сожалению, оно убивает своих учеников. + -- Гектор Берлиоз +% +Прошлое - чужая страна, там все по-другому. + -- Лесли Хартли +% +Помните о бедняках - это не требует никаких расходов. + -- Генри Уиллер Шоу +% +Я люблю своих детей, но некоторые мне не нравятся. + -- Лилиан Картер, мать президента США Д.Картера +% +Дружба - это когда можно ни с того ни с сего приехать к человеку +и поселиться у него. + -- Давид Самойлов +% +Врагов я забрасываю цветами - в гробу! + -- Сальвадор Дали +% +Я не боюсь умереть. Я просто не хочу при этом присутствовать. + -- Вуди Аллен +% +Какой замечательный некролог! С таким бы жить и жить! + -- М.Генин +% +Твои шансы выиграть в лотерею возрастут, если ты купишь билет. + -- Уинстон Грум из "Правил Фореста Гампа" +% +Пока вы ищете, кого бы стоило полюбить, вам нужен кто-то, кто любит вас. + -- Шейла Делейни +% +Если двое любят друг друга, это не может счастливо кончиться. + -- Э.Хемингуэй +% +Я порвала с ним через три года. Это была типичная любовь-ненависть. Мы оба +любили его и ненавидели меня. + -- Кэрол Зискинд +% +В тех кругах, в которых я вращаюсь, переспать с женщиной - недостаточный +повод для того, чтобы быть ей представленным. + -- Вирджиния Маклауд +% +Она говорила на восемнадцати языках и ни на одном из них не умела сказать +"нет". + -- Дороти Паркер +% +Помни: в пяти случаях из шести свет в конце туннеля - это свет +надвигающегося поезда. + -- Пол Диксон +% +Все соседи плохи, но верхние хуже нижних. + -- Константин Мелихан +% +Америка - единственный матриархат, под сенью которого женщины ведут борьбу +за равные права. + -- А. Рот +% +Брак - это лотерея, но в случае проигрыша вы не можете порвать свой билет. + -- Ф. Ноулз +% +Британский солдат устоит против кого угодно, только не против Британского +министерства обороны. + -- Бернард Шоу +% +Век наш таков, что он гордится машинами, умеющими думать, и побаивается +людей, которые пытаются проявить ту же способность. + -- Г.Мамфорд Джонс +% +Военная мудрость есть понятие, заключающее противоречие в самом себе. +Война - слишком серьезное дело, чтобы доверять его военным. + -- Талейран +% +Выход из беды найти не столь просто, как попасть в нее. + -- Эд Хау +% +Граница в политической географии - воображаемая линия между двумя +государствами, отделяющая воображаемые права одного от воображаемых прав +другого. + -- А.Бирс +% +Да не устрашит тебя величие: одни рождаются великими, другие достигают +величия, третьим его навязывают. + -- Уильям Шекспир +% +Две тысячи лет нам поставляли примеры для подражания, и теперь ничто нас +не извиняет, если мы, воюя, воем плохо. + -- Т.Э. Лоуренс +% +Дипломная работа среднего выпускника университета есть не что иное, как +кости, перенесенные из одной могилы в другую. + -- Дж. Фрэнк Доуби +% +Для любой волнующей человека проблемы всегда легко найти решение - +простое, достижимое и ошибочное. + -- Г.Л. Менкен +% +Добрым словом и револьвером вы можете добиться гораздо большего, чем одним +только добрым словом. + -- Аль Капоне +% +Если вы не восходящий, значит, вы ниспадающий. + -- Стивен Поттер +% +Если честолюбивая мечта не заставляет вас страдать, значит, ее у вас нет. + -- К. Норрис +% +Идеалист тот, кто, заметив, что роза пахнет лучше капусты, заключает, что +и суп из нее будет лучше. + -- Г. Менкен +% +Жизнь что луковица - вы чистите ее, снимая слой за слоем, и иногда +плачете. + -- С. Сандберг +% +Когда люди вольны поступать как угодно, они обычно подражают друг другу. + -- Э. Хоффер +% +Коли все думают одинаково, значит, никто особенно и не думает. + -- У.Липпман +% +Компьютеры бесподобны: за несколько минут они могут совершить такую +грандиозную ошибку, какую не в состоянии сделать множество людей за многие +месяцы. + -- М. Мичэм +% +Логика - это искусство ошибаться с уверенностью в своей правоте. + -- Дж. У. Крач +% +Любовь - вещь идеальная, супружество - реальная; смешение реального с +идеальным никогда не проходит безнаказанно. + -- И. Гете +% +Любое ваше решение - это ошибка. + -- Эдуард Далберг +% +Мой способ шутить - это говорить правду. На свете нет ничего +смешнее. + -- Бернард Шоу +% +На моем веку было очень много прогресса, но, боюсь, не в том направлении. + -- О. Нэш +% +Нам мало добиться успеха. Надо еще, чтобы друзья наши потерпели крах. + -- Ларошфуко +% +Невеста - женщина, у которой виды на счастье остались позади. + -- А. Бирс +% +Нужно учредить Нобелевскую премию за остроумие. Без физиков, химиков, +экономистов мы, если прижмет, как-нибудь обойдемся. Без мира обычно тоже +обходимся. Без остроумия - пропадем. + -- Джордж Ф. Уилл +% +О несчастном случае мой подзащитный впервые узнал лишь тогда, когда этот +случай произошел. + -- Из речи адвоката +% +Первый и наихудший из всех подвохов - обмануть самого себя. Потом уже +легко впасть в любой грех. + -- Дж. Бэйли +% +По самой своей природе человек, чем старше он становится, тем больше +противится переменам, особенно переменам к лучшему. + -- Дж. Стейнбек +% +Поиск истины способен изрядно позабавить. + -- Вернон Говард +% +Полицейский находится на своем месте не для того, чтобы создавать +беспорядок; полицейский находится там, чтобы поддерживать беспорядок. + -- Ричард Дж. Дейли, мэр Чикаго +% +Посредственность - добродетель в глазах посредственных людей. + -- Ж. Жобер +% +Посредственный учитель излагает. Хороший учитель объясняет. Выдающийся +учитель показывает. Великий учитель вдохновляет. + -- Уильям Артур Уорд +% +Президенту в его окружении не нужны мужчины и женщины, умеющие только +поддакивать. Если он говорит "нет", мы все говорим "нет". + -- Элизабет Доул, помощница президента Рейгана +% +"Радость моя, мы живем в переходную эпоху", говорил Адам Еве по дороге из +рая. + -- У. Инге +% +"С нами такого случиться не может" - это фраза номер один в списке +знаменитых последних слов. + -- Дэвид Кросби +% +Самая большая ложь - это неверно понятая правда. + -- Уильям Джеймс +% +Скрипка - инструмент для щекотания человеческих ушей при помощи трения +лошадиного хвоста о внутренности кошки. + -- Амброз Бирс +% +Среди преподавателей большинство составляют те, кто не прервет чтение +своих лекций по навигации, даже если корабль уже тонет. Следствие: +путешествие длиною в тысячу миль завершается одним-единственным шагом. + -- Джеймс Г. Борен +% +Творческое мышление, возможно, означает всего-навсего понимание, что нет +никакой особой добродетели в том, чтобы вести дела так, как их всегда вели до +нас. + -- Рудольф Флеш +% +Технический прогресс лишь снабдил нас действенными средствами для движения +назад. + -- О. Хаксли +% +То, что мы называем прогрессом, представляет собой замену одной +неприятности другою. + -- Г. Эллис +% +Учитель прикасается к вечности: никто не может сказать, где кончается его +влияние. + -- Генри Адамс +% +Человеку надлежит жить с самим собой и постоянно заботиться, чтобы это +была хорошая кампания. + -- С.И. Хьюз +% +Эксперт - это человек, знающий все больше и больше о все меньшем и +меньшем. Следствие: колледж не может обеспечить компетентность; он может +обеспечить диплом. + -- Николас Батлер +% +Эксперт - это человек, который больше уже не думает; он знает. + -- К. Хаббард +% +Я не верю в коллективную мудрость невежественных индивидуумов. + -- Т. Карлейль +% +Я не против полиции, я просто боюсь ее. + -- Альфред Хичкок +% +Я никогда не мог взять в толк, почему из-за того только, что я выражаюсь +невразумительно, никто меня не понимает. + -- Милтон Мейер +% +Пожилые люди думают, что с тех пор, как они постарели, мир только теряет, +но ничего не приобретает. + -- Жеремена Сталь +% +Меня интересует мнение не тех людей, которые разбираются в данном вопросе, +а тех, которые сами кое-что сделали в одной из областей знания. + -- Hорберт Винер +% +Случайные открытия совершают только подготовленные умы. + -- Паскаль +% +Бывают услуги настолько большие, что рассчитаться за них можно только +неблагодарностью. + -- Дюма-отец +% +"Тоже неплохо!" - сказал зять, бросив камнем в собаку, а попав в тещу. + -- Плутарх. "Пир семи мудрецов". +% +Не ковыряй в носу перочинным ножиком. Лезвие легко ржавеет. + -- Из книги "Пи" +% +Очень много - иногда вполне достаточно для женщины. + -- Из книги "Ву" +% +В жизни можно рассчитывать только на самих себя. И то не всегда. + -- Тристан Бернар +% +Все было бы очень хорошо, если бы все наши поступки можно было бы совершать +дважды. + -- Гете +% +E = mC + -- Альберт Эйнштейн +% +Человек бывает таким, каким его создал бог, но преимущественно немного хуже. + -- Сервантес +% +Две параллельных линии полюбили друг друга. Трагедия! + -- Из книги "Пи" +% +Я знаток всех "и т. д., и т. п." и я знаю, когда за ними ничего больше +не скрывается. + -- Гомес де ля Серна +% +Одна туча может погрузить в темноту весь парк, одно слово может затемнить +самое большое счастье. + -- Гомес де ля Серна +% +Тот факт, что будильник не прозвенел, изменило уже много человеческих судеб. + -- Агата Кристи +% +Заполнять жизнь - это еще не значит обогащать ее. + -- Из книги "Пи" +% +Самым серьезным достоинством современного искусства является то, что, когда +эти произведения смотрят дети, они не задают таких вопросов, на которые +обычно бывает трудно отвечать. + -- Лорд Галлюкс +% +Замужних женщин значительно больше, чем женатых мужчин. + -- По данным американской статистики +% +Совесть - это тот голос, который говорит тебе, что не надо делать именно то, +что ты только что сделал. + -- Из книги "Пи" +% +И мелкие неприятности могут отравить жизнь, если нет крупных. + -- Р. Гомес де ля Серна +% +Счастлив тот, кто ни о чем не думает. + -- Софокл +% +Я не читаю газет. Все, о чем там стоит знать, всегда кто-нибудь расскажет. + -- Лорд Галлюкс +% +Недостаточно встать рано, надо еще и проснуться. + -- Из книги "Ву" +% +Высохшую реку не благодарят за ее прошлое. + -- Рабиндранат Тагор +% +Давать советы всегда плохо, но хорошего совета тебе никто не простит. + -- Оскар Уайльд +% +Устарели не только ответы, но даже сами вопросы. + -- Хемингуэй +% +Друзья, как арбузы: случается, что из десяти ни одного хорошего не выбрать. + -- Из книги "Пи" +% +Пока слушатели во время лекции поглядывают на часы, все в порядке. Страшно, +когда они начинают удивленно подносить часы к уху. + -- Из книги "Пи" +% +Нет правила, которого нельзя было бы нарушить ради более прекрасного. + -- Л. Бетховен +% +Прекрасна молодость, когда она в движении и знает, куда приложить свои силы. + -- Менандр +% +Простим горячке юных лет +И юный жар, и юный бред. + -- А. С. Пушкин +% +Грустно думать, что напрасно +Была нам молодость дана. + -- А. С. Пушкин +% +Всего больнее знать, что счастье было так близко - и ты сам его отверг. + -- Софокл +% +Настоящий художник настолько владеет искусством, насколько оно владеет им. + -- Г. Флобер +% +Великие люди сами сооружают себе пьедестал; статую воздвигнет будущее. + -- В. Гюго +% +...заслуги отца на сына не распространяются. + -- М. Сервантес +% +Давайте жить так, чтобы даже гробовщику стало жалко, когда мы умрем. + -- Марк Твен +% + - Обладаешь ли ты разумом? + - Обладаю. + - Почему же ты не пользуешься им? + -- Марк Авелий +% +Нет такой глупости, которой нельзя было бы исправить при помощи ума, +и нет такой мудрости, которой нельзя было бы испортить при помощи глупости. + -- В. Гёте +% +Оптимист верит, что мы живем в лучшем из миров. +Пессимист боится, что так оно и есть. +% +Пессимист видит темный туннель. +Оптимист видит свет в конце туннеля. +Реалист видит, что это на них мчится поезд. +И только машинист видит трех мудаков, тупящих на рельсах. +% +Мы познаем человека не по тому, что он знает, а по тому, чему он радуется. + -- Р.Тагор +% +Если вы уверены в победе вашей национальной сборной на Евро 2004, то вы либо +дурак, либо немец. + -- М.Задорнов +% +Нет некрасивых женщин - есть только женщины, не знающие, что они красивы. + -- Вивьен Ли +% +Любая сложная технология неотличима от волшебства. + -- Артур Кларк +% +Я люблю тебя не за то, кто ты, а за то, кто я, когда я с тобой. + -- Габриэль Гарсиа +% +Ни один человек не заслуживает твоих слез, а те, кто заслуживают, +не заставят тебя плакать. + -- Габриэль Гарсиа +% +Только потому что кто-то не любит тебя так, как тебе хочется, не значит, +что он не любит тебя всей душой. + -- Габриэль Гарсиа +% +Настоящий друг – это тот, кто будет держать тебя за руку +и чувствовать твоё сердце. + -- Габриэль Гарсиа +% +Худший способ скучать по человеку – это быть с ним и понимать, +что он никогда не будет твоим. + -- Габриэль Гарсиа +% +Никогда не переставай улыбаться, даже когда тебе грустно: кто-то может влюбиться +в твою улыбку. + -- Габриэль Гарсиа +% +Возможно, в этом мире ты всего лишь человек, но для кого-то ты – весь мир. + -- Габриэль Гарсиа +% +Не трать время на человека, который не стремится провести его с тобой. + -- Габриэль Гарсиа +% +Возможно, Бог хочет, чтобы мы встречали не тех людей до того, как встретим того +единственного человека. Чтобы, когда это случится, мы были благодарны. + -- Габриэль Гарсиа +% +Не плачь, потому что это закончилось. Улыбнись, потому что это было. + -- Габриэль Гарсиа +% +Всегда найдутся люди, которые причинят тебе боль. Нужно продолжать верить людям, +просто быть чуть осторожнее. + -- Габриэль Гарсиа +% +Стань лучше и сам пойми, кто ты, прежде чем встретишь нового человека и будешь +надеяться, что он тебя поймет. + -- Габриэль Гарсиа +% +Не прилагай столько усилий, все самое лучшее случается неожиданно. + -- Габриэль Гарсиа +% +Всё, что случаеется, имеет причину. + -- Габриэль Гарсиа diff --git a/data/sample_config.json b/data/sample_config.json index 1e524dd..7a6feec 100644 --- a/data/sample_config.json +++ b/data/sample_config.json @@ -5,6 +5,10 @@ "dir" : "data/friday", "src" : "data/friday.txt" }, + "fortune" : { + "dir" : "data/fortune", + "srcdir" : "data/fortune_src" + }, "telegrambot" : { "name" : "mybot", "tname" : "@my_bot", diff --git a/lib/botlib.pm b/lib/botlib.pm index 0d4cba0..349d103 100644 --- a/lib/botlib.pm +++ b/lib/botlib.pm @@ -18,6 +18,7 @@ use conf qw(loadConf); use lat qw(latAnswer); use karma qw(karmaSet karmaGet); use friday qw(friday); +use fortune qw(fortune fortune_toggle fortune_status); use vars qw/$VERSION/; @@ -265,7 +266,7 @@ sub command { my $city = substr ($text, 3); $reply = weather ($city); } elsif (substr ($text, 1) eq 'lat' || substr ($text, 1) eq 'лат') { - $reply = latAnswer(); + $reply = latAnswer (); } elsif (substr ($text, 1, 6) eq 'karma ' || substr ($text, 1, 6) eq 'карма ' || substr($text, 1) eq 'karma' || substr($text, $1) eq 'карма') { my $mytext = ''; @@ -279,7 +280,15 @@ sub command { $reply = karmaGet ($chatid, $mytext); } elsif (substr ($text, 1) eq 'friday' || substr ($text, 1) eq 'пятница') { - $reply = friday(); + $reply = friday (); + } elsif (substr ($text, 1) eq 'fortune' || substr ($text, 1) eq 'фортунка' || substr ($text, 1) eq 'f' || substr ($text, 1) eq 'ф') { + $reply = fortune (); + } elsif (substr ($text, 1) eq 'f 1' || substr ($text, 1) eq 'fortune 1' || substr ($text, 1) eq 'фортунка 1' || substr ($text, 1) eq 'ф 1') { + $reply = fortune_toggle ($chatid, 1); + } elsif (substr ($text, 1) eq 'f 0' || substr ($text, 1) eq 'fortune 0' || substr ($text, 1) eq 'фортунка 0' || substr ($text, 1) eq 'ф 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 'ф ?') { + $reply = fortune_status ($chatid); } return $reply; diff --git a/lib/fortune.pm b/lib/fortune.pm new file mode 100644 index 0000000..b0c7c36 --- /dev/null +++ b/lib/fortune.pm @@ -0,0 +1,175 @@ +package fortune; +# Any fortune_mod sources are suitable. Text file with "\n%\n" sentence delimeter. + +use 5.018; +use strict; +use warnings; +use utf8; +use open qw(:std :utf8); +use English qw( -no_match_vars ); +use Carp qw(cluck croak); + +use vars qw/$VERSION/; +use Exporter qw(import); +our @EXPORT_OK = qw(seed fortune fortune_toggle fortune_toggle_list fortune_status); + +$VERSION = '1.0'; + +use SQLite_File; +use MIME::Base64; +use File::Path qw(mkpath); +use conf qw(loadConf); + +my $c = loadConf(); +my $dir = $c->{fortune}->{dir}; +my $srcdir = $c->{fortune}->{srcdir}; + +sub seed () { + unless (-d $dir) { + mkpath ($dir) || croak "Unable to create $dir: $OS_ERROR"; + } + + my $backingfile = sprintf '%s/fortune.sqlite', $dir; + + if (-f $backingfile) { + unlink $backingfile || croak "Unable to remove $backingfile: $OS_ERROR\n"; + } + + tie my @fortune, 'SQLite_File', $backingfile || croak "Unable to tie to $backingfile: $OS_ERROR\n"; + + opendir (my $srcdirhandle, $srcdir) || croak "Unable to open $srcdir: $OS_ERROR"; + + while (my $fortunefile = readdir ($srcdirhandle)) { + my $srcfile = sprintf '%s/%s', $srcdir, $fortunefile; + next unless (-f $srcfile); + next if (m/[\.|\$|\@]/); + open (my $fh, '<', $srcfile) || croak "Unable to open $srcfile, $OS_ERROR\n"; + # set correct phrase delimiter + local $INPUT_RECORD_SEPARATOR = "\n%\n"; + + while (readline $fh) { + my $phrase = substr($_, 0, -3); + push @fortune, $phrase; + } + + close $fh; ## no critic (InputOutput::RequireCheckedSyscalls, InputOutput::RequireCheckedOpen) + } + + closedir $srcdirhandle; + untie @fortune; + return; +} + +# just return answer +sub fortune () { + my $backingfile = sprintf '%s/fortune.sqlite', $dir; + + tie my @array, 'SQLite_File', $backingfile || do { + cluck "Unable to tie to $backingfile: $OS_ERROR\n"; + return ''; + }; + + my $phrase = $array[int (rand ($#array - 1))]; + # decode? + utf8::decode $phrase; + untie @array; + return $phrase; +} + +sub fortune_toggle (@) { + my $chatid = shift; + my $action = shift // undef; + my $phrase = 'Фортунка с утра '; + + unless (-d $dir) { + mkpath ($dir) || do { + cluck "Unable to create $dir: $OS_ERROR"; + return; + }; + } + + my $backingfile = sprintf '%s/chats.sqlite', $dir; + + tie my %toggle, 'SQLite_File', $backingfile || do { + cluck "Unable to tie to $backingfile: $OS_ERROR\n"; + return; + }; + + my $state = $toggle{$chatid}; + + if (defined $action) { + if ($action) { + $toggle{$chatid} = 1; + $phrase .= 'будет показываться.'; + } else { + if (defined $state) { + delete $toggle{$chatid}; + } + + $phrase .= 'не будет показываться.'; + } + } else { + if (defined $state && $state) { + delete $toggle{$chatid}; + $phrase .= 'не будет показываться.'; + } else { + $toggle{$chatid} = 1; + $phrase .= 'будет показываться.'; + } + } + + untie %toggle; + return $phrase; +} + +sub fortune_status ($) { + my $chatid = shift; + my $phrase = 'Фортунка с утра '; + + unless (-d $dir) { + mkpath ($dir) || do { + cluck "Unable to create $dir: $OS_ERROR"; + return; + }; + } + + my $backingfile = sprintf '%s/chats.sqlite', $dir; + + tie my %toggle, 'SQLite_File', $backingfile || do { + cluck "Unable to tie to $backingfile: $OS_ERROR\n"; + return; + }; + + my $state = $toggle{$chatid}; + + if (defined $state && $state) { + $phrase .= 'показываtтся.'; + } else { + $phrase .= 'yt показываtтся.'; + } + + untie %toggle; + return $phrase; +} + +sub fortune_toggle_list () { + unless (-d $dir) { + mkpath ($dir) || croak "Unable to create $dir: $OS_ERROR"; + } + + my $backingfile = sprintf '%s/chats.sqlite', $dir; + + tie my %toggle, 'SQLite_File', $backingfile || do { + cluck "Unable to tie to $backingfile: $OS_ERROR\n"; + my @empty = (); + return @empty; + }; + + my @list = keys %toggle; + untie %toggle; + return @list; +} + +1; + +# vim: ft=perl noet ai ts=4 sw=4 sts=4: diff --git a/lib/telegrambot.pm b/lib/telegrambot.pm index e6cb914..bf33b7c 100644 --- a/lib/telegrambot.pm +++ b/lib/telegrambot.pm @@ -16,6 +16,7 @@ use conf qw(loadConf); use botlib qw(weather logger trim randomCommonPhrase command); use telegramlib qw(visavi); use karma qw(karmaSet); +use fortune qw(fortune fortune_toggle_list); use Exporter qw(import); our @EXPORT_OK = qw(run_telegrambot); @@ -34,10 +35,21 @@ my $can_talk = 0; has token => $c->{telegrambot}->{token}; -# i promise, i'll make use of this sub -sub __cron { ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) +sub __cron { my $self = shift; -# noop + +# fortune mod + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (time); + + if ($hour = 8 && ($min >= 0 && $min <= 14)) { + foreach my $enabledfortunechat (fortune_toggle_list()) { + my $send_args; + $send_args->{text} = sptintf "Сегодняшний день пройдёт под эгидой фразы:\n%s", fortune(); + $send_args->{chat_id} = $enabledfortunechat; + Teapot::Bot::Brain::sendMessage ($self, $send_args); + } + } + return; } @@ -225,6 +237,12 @@ sub __on_msg { $send_args->{text} = << 'MYHELP'; ``` !help | !помощь - список команд +!f | !ф - рандомная фраза из сборника цитат fortune_mod +!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod +!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра +!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра +!f ? | !ф ? - показываем ли с утра фортунку для чата +!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата !friday | пятница - а не пятница ли сегодня? !lat | !лат - сгенерировать фразу из крылатых латинских выражений !ping | !пинг - попинговать бота @@ -352,6 +370,12 @@ MYHELP $send_args->{text} = << 'MYHELP'; ``` !help | !помощь - список команд +!f | !ф - рандомная фраза из сборника цитат fortune_mod +!fortune | !фортунка - рандомная фраза из сборника цитат fortune_mod +!f # | !ф # - где 1 - вкл, 0 - выкл фортунку с утра +!fortune # | !фортунка # - где 1 - вкл, 0 - выкл фортунку с утра +!f ? | !ф ? - показываем ли с утра фортунку для чата +!fortune ? | !фортунка ? - показываем ли с утра фортунку для чата !friday | пятница - а не пятница ли сегодня? !lat | !лат - сгенерировать фразу из крылатых латинских выражений !ping | !пинг - попинговать бота @@ -452,7 +476,7 @@ sub init { my $self = shift; $self->add_listener (\&__on_msg); - # $self->add_repeating_task(900, \&__cron); + $self->add_repeating_task(900, \&__cron); return; }