Добавлено поле misc->good_morning, глубже lint-уем входящий json
* Добавлено описание поля misc->good_morning в README * Проверяем входной JSON на наличие всех полей и фиксим дефолтами * Более аккуратная работа с substr - больше перестраховок * Правка коментариев
This commit is contained in:
9
README
9
README
@@ -32,16 +32,19 @@ misc->answer - 0 если ответ не требуется и 1 если
|
||||
misc->bot_nick - ник бота. Типа как, для разных чятов он может быть разный. (Использовано в модуле craniac.) Если
|
||||
поле отсутствует, проверка на обращение к боту по нику не происходит.
|
||||
|
||||
misc->csign - command sign - значок, которым предваряется команда в чятике.Исторически сложилось так, что для
|
||||
misc->csign - command sign - значок, которым предваряется команда в чятике. Исторически сложилось так, что для
|
||||
разных ботов этот символ был разный, например, eggdrop использовал точку, а sulci - восклицательный
|
||||
знак. По-умолчанию, aleesa-bot вездепроставляет восклицательный знак, если во входящем сообщении
|
||||
такой настройки нету. Изначально настройка задаётся в конфиге чат-модуля (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, чтобы выходное сообщение было отослано как отформатированное.
|
||||
|
||||
33
lib/Misc.pm
33
lib/Misc.pm
@@ -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};
|
||||
|
||||
Reference in New Issue
Block a user