Добавлено поле misc->good_morning, глубже lint-уем входящий json

* Добавлено описание поля misc->good_morning в README
* Проверяем входной JSON на наличие всех полей и фиксим дефолтами
* Более аккуратная работа с substr - больше перестраховок
* Правка коментариев
This commit is contained in:
eleksir
2022-04-04 11:18:27 +03:00
parent 1f821453cb
commit 066e961bd2
2 changed files with 40 additions and 16 deletions

5
README
View File

@@ -38,10 +38,13 @@ misc->csign - command sign - значок, которым предваря
такой настройки нету. Изначально настройка задаётся в конфиге чат-модуля (aleesa-telegram,
например).
misc->fwd_cnt - количество пересылок сообщения. Значение по-умолчанию 5. Предполагается, что при пересылке
misc->fwd_cnt - количество пересылок сообщения. Значение по-умолчанию 1. Предполагается, что при пересылке
сообщения, модуль будет инкрементировать это значение и заодно проверять, что оно не превышает
настройку forwards_max в конфиге или 5, если в конфиге такой настройки нету.
misc->good_morning - флажок признака сообщения-фразы дня, которая по идее осылается в ~8 часов по мск. Используется в
модуле phrases.
misc->msg_format - Использовать форматирование в сообщении. На текущий момент этот флажок выставляется в модуле
telegram и благополучно проходит через модуль misc, далее попадает в модуль phrases, и, наконец,
возвращается в модуль telegram, чтобы выходное сообщение было отослано как отформатированное.

View File

@@ -50,13 +50,33 @@ my $parse_message = sub {
$answer->{misc}->{answer} = 1;
}
unless (defined $answer->{misc}->{bot_nick}) {
$answer->{misc}->{bot_nick} = '';
}
unless (defined $answer->{misc}->{csign}) {
$answer->{misc}->{csign} = '!';
}
unless (defined $answer->{misc}->{good_morning}) {
$answer->{misc}->{good_morning} = 0;
}
unless (defined $answer->{misc}->{msg_format}) {
$answer->{misc}->{msg_format} = 0;
}
unless (defined $answer->{misc}->{username}) {
$answer->{misc}->{username} = '';
}
} else {
$answer->{misc}->{answer} = 1;
$answer->{misc}->{bot_nick} = '';
$answer->{misc}->{csign} = '!';
$answer->{misc}->{fwd_cnt} = 1;
$answer->{misc}->{good_morning} = 0;
$answer->{misc}->{msg_format} = 0;
$answer->{misc}->{username} = '';
}
# Если сообщение не попало ни под один шаблон, оно отправляется к craniac-у
@@ -64,9 +84,11 @@ my $parse_message = sub {
$log->debug ('[DEBUG] Incoming message ' . Dumper ($m));
my $csign = $answer->{misc}->{csign};
# Пробуем найти команды. Сообщения, начинающиеся с $answer->{misc}->{csign}
if (substr ($m->{message}, 0, length ($answer->{misc}->{csign})) eq $answer->{misc}->{csign}) {
my $cmd = substr $m->{message}, length ($answer->{misc}->{csign});
if ((length $m->{message} > length $csign) && (substr ($m->{message}, 0, length $csign) eq $csign)) {
my $cmd = substr $m->{message}, length $csign;
my $done = 0;
# Вначале поищем команды модуля Phrases
@@ -108,12 +130,12 @@ my $parse_message = sub {
}
}
# И наконец остальные, более сложные команды, с аргументами
# И, наконец, остальные, более сложные команды, с аргументами
unless ($done) {
my @cmds = ('w ', 'п ', 'weather ', 'погодка ', 'погадка ', 'погода ');
while (my $check = pop @cmds) {
if (length ($cmd) > length ($check) && substr ($m->{message}, length ($answer->{misc}->{csign}), length ($check)) eq $check) {
if ((length $cmd > length $check) && substr ($cmd, 0, length $check) eq $check) {
$send_to = 'webapp';
$done = 1;
last;
@@ -124,14 +146,13 @@ my $parse_message = sub {
@cmds = ('karma ', 'карма ');
while (my $check = pop @cmds) {
if (length ($cmd) > length ($check) && substr ($m->{message}, length ($answer->{misc}->{csign}), length ($check)) eq $check) {
if ((length $cmd > length $check) && substr ($cmd, 0, length $check) eq $check) {
$send_to = 'phrases';
$done = 1;
last;
}
}
}
# Попробуем найти изменение кармы
} elsif (substr ($m->{message}, 0 - length ('++')) eq '++' || substr ($m->{message}, 0 - length ('--')) eq '--') {
my @arr = split /\n/, $m->{message};