From dbefe68350a4bb966af32c9f4d8a498cab103ad9 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sat, 23 Apr 2022 13:56:49 +0300 Subject: [PATCH] Last commit --- .perlcriticrc | 2 ++ README | 10 ++++++++-- TODO | 28 ---------------------------- cpanfile | 9 +++++---- lib/Misc.pm | 24 ++++++++++++------------ 5 files changed, 27 insertions(+), 46 deletions(-) delete mode 100644 TODO diff --git a/.perlcriticrc b/.perlcriticrc index 3103b92..f0a96d6 100644 --- a/.perlcriticrc +++ b/.perlcriticrc @@ -111,3 +111,5 @@ lib_sections = NAME | VERSION | DESCRIPTION | AUTHOR | LICENSE AND COPYRIGHT [-Lax::RequireConstantOnLeftSideOfEquality::ExceptEq] [-Miscellanea::ProhibitUnrestrictedNoCritic] + +[-Lax::ProhibitEmptyQuotes::ExceptAsFallback] diff --git a/README b/README index ded19b9..6964f12 100644 --- a/README +++ b/README @@ -5,12 +5,18 @@ aleesa-misc Работает по протоколу Redis pubsub. +Disclaimer +----------------------------------------------------------------------------------------------------------------------- +Вся дальнейшая разработка логики этого модуля будет вестись в рамках проекта aleesa-misc-go. Этот репозиторий остаётся +исключительно для образовательных целей. + + Механика работы ----------------------------------------------------------------------------------------------------------------------- Роутер подписан на канал misc. -Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола. Входящие -сообщения они получают только через этот канал. +Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола. +Входящие сообщения они получают только через этот канал. Модули, реализующие иную функциональность также подписаны каждый на свой канал. Кроме того, для реализации дополнительных синхронных возможностей, они могут слушать например http запросы на отдельных - ip:портах. Но это уже diff --git a/TODO b/TODO deleted file mode 100644 index 5e289cb..0000000 --- a/TODO +++ /dev/null @@ -1,28 +0,0 @@ -Реализовать парсер для команды !admin : -* Вероятно, попротокольно, так как эта команда есть только в telegram, но формально должна появиться в jabber и irc. -* Понадобится отдельный способ запросить "протокольный" плагин на тему админ ли чел, который хочет использовать - команду !admin. -* Для телеги у нас есть возможность автоматически определять админов. -* Для IRC - есть возможность определить op-ов. (+ к тому нужно следить за сменой статуса - парсить соответствующие - ивенты). -* Для jabber - пока непонятно. - -Брать каналы из конфига. Те самые redis-каналы, в которые надо отсылать сообщения. Продумать вопрос с оптимальным форматом конфига. - Пока что он видится в фомате хэша - { - channels : { - telegram : telegram, - craniac : craniac, - irc : irc, - webapp : webapp, - ... - } - } -но не на всех этих каналах надо слушать, в какие-то достаточно только писать. - -Реализовать возможность релоада конфига. Но для начала понять, нужно ли оно нам? - -Решить вопрос с Cron-ом. Будет ли это отдельный демонок либо эти функции будут в роутере (чего наверно не хотелось бы). -В Cron у нас войдёт как минимум утренняя фортунка и скорее всего rss, когда появится. - -Проверить момент, когда при старте сервиса redis ещё не запущен. diff --git a/cpanfile b/cpanfile index e687c07..4ecb792 100644 --- a/cpanfile +++ b/cpanfile @@ -5,7 +5,8 @@ requires 'Cwd', '==3.75'; requires 'Cwd::utf8', '==0.011'; requires 'Data::Dumper', '==2.183'; requires 'Encode', '==3.16'; -requires 'English', '==1.11'; +# Part of perl +requires 'English', '0'; requires 'EV', '==4.33'; requires 'Exporter', '==5.74'; requires 'File::Basename', '==2.85'; @@ -19,11 +20,11 @@ requires 'Log::Any', '==1.710'; requires 'Log::Any::Adapter', '==1.710'; requires 'Log::Any::For::Std', '==0.05'; requires 'Math::Random::Secure', '==0.080001'; -requires 'Mojolicious', '==9.22'; +requires 'Mojolicious', '==9.24'; requires 'Mojo::Redis', '==3.27'; requires 'Mojo::IOLoop::Signal', '==0.003'; -requires 'open', '==1.12'; +# Part of perl +requires 'open', '0'; requires 'POSIX', '0'; -requires 'Protocol::Redis::XS', '0'; requires 'utf8', '0'; requires 'version', '==0.9929'; \ No newline at end of file diff --git a/lib/Misc.pm b/lib/Misc.pm index 44cab9c..bde525d 100644 --- a/lib/Misc.pm +++ b/lib/Misc.pm @@ -7,15 +7,13 @@ use warnings; use utf8; use open qw (:std :utf8); -use Clone qw (clone); # Модули для работы приложения +use Clone qw (clone); +use Data::Dumper qw (Dumper); use Log::Any qw ($log); -# Чтобы "уж точно" использовать hiredis-биндинги, загрузим этот модуль перед Mojo::Redis -use Protocol::Redis::XS (); use Mojo::Redis (); use Mojo::IOLoop (); use Mojo::IOLoop::Signal (); -use Data::Dumper qw (Dumper); use Conf qw (LoadConf); @@ -24,7 +22,11 @@ use Exporter qw (import); our @EXPORT_OK = qw (RunMisc); my $c = LoadConf (); -my $fwd_cnt = $c->{'forward_max'} // 5; +my $fwd_cnt = 5; + +if (defined $c->{'forward_max'}) { + $fwd_cnt = $c->{'forward_max'}; +} # Основной парсер my $parse_message = sub { @@ -55,7 +57,7 @@ my $parse_message = sub { } unless (defined $answer->{misc}->{csign}) { - $answer->{misc}->{csign} = '!'; + $answer->{misc}->{csign} = $c->{csign}; } unless (defined $answer->{misc}->{good_morning}) { @@ -72,7 +74,7 @@ my $parse_message = sub { } else { $answer->{misc}->{answer} = 1; $answer->{misc}->{bot_nick} = ''; - $answer->{misc}->{csign} = '!'; + $answer->{misc}->{csign} = $c->{csign}; $answer->{misc}->{fwd_cnt} = 1; $answer->{misc}->{good_morning} = 0; $answer->{misc}->{msg_format} = 0; @@ -186,7 +188,7 @@ my $__signal_handler = sub { }; -# main loop, он же event loop +# Main loop, он же event loop sub RunMisc { $log->info ("[INFO] Connecting to $c->{server}, $c->{port}"); @@ -227,10 +229,8 @@ sub RunMisc { ); } - Mojo::IOLoop::Signal->on ( - TERM => $__signal_handler, - INT => $__signal_handler, - ); + Mojo::IOLoop::Signal->on (TERM => $__signal_handler); + Mojo::IOLoop::Signal->on (INT => $__signal_handler); do { Mojo::IOLoop->start } until Mojo::IOLoop->is_running; return;