Last commit

This commit is contained in:
eleksir
2022-04-23 13:56:49 +03:00
parent 066e961bd2
commit dbefe68350
5 changed files with 27 additions and 46 deletions

View File

@@ -111,3 +111,5 @@ lib_sections = NAME | VERSION | DESCRIPTION | AUTHOR | LICENSE AND COPYRIGHT
[-Lax::RequireConstantOnLeftSideOfEquality::ExceptEq]
[-Miscellanea::ProhibitUnrestrictedNoCritic]
[-Lax::ProhibitEmptyQuotes::ExceptAsFallback]

10
README
View File

@@ -5,12 +5,18 @@ aleesa-misc
Работает по протоколу Redis pubsub.
Disclaimer
-----------------------------------------------------------------------------------------------------------------------
Вся дальнейшая разработка логики этого модуля будет вестись в рамках проекта aleesa-misc-go. Этот репозиторий остаётся
исключительно для образовательных целей.
Механика работы
-----------------------------------------------------------------------------------------------------------------------
Роутер подписан на канал misc.
Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола. Входящие
сообщения они получают только через этот канал.
Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола.
Входящие сообщения они получают только через этот канал.
Модули, реализующие иную функциональность также подписаны каждый на свой канал. Кроме того, для реализации
дополнительных синхронных возможностей, они могут слушать например http запросы на отдельных - ip:портах. Но это уже

28
TODO
View File

@@ -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 ещё не запущен.

View File

@@ -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';

View File

@@ -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;