Добавлено поле misc->good_morning, глубже lint-уем входящий json
* Добавлено описание поля misc->good_morning в README * Проверяем входной JSON на наличие всех полей и фиксим дефолтами * Более аккуратная работа с substr - больше перестраховок * Правка коментариев
This commit is contained in:
17
README
17
README
@@ -26,27 +26,30 @@ mode - public или private
|
||||
|
||||
misc - объект с дополнительными полями:
|
||||
|
||||
misc->answer - 0 если ответ не требуется и 1 если ответ требуется (использован в модуле craniac), значение
|
||||
misc->answer - 0 если ответ не требуется и 1 если ответ требуется (использован в модуле craniac), значение
|
||||
по-умолчанию 1, если поля нет.
|
||||
|
||||
misc->bot_nick - ник бота. Типа как, для разных чятов он может быть разный. (Использовано в модуле craniac.) Если
|
||||
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->msg_format - Использовать форматирование в сообщении. На текущий момент этот флажок выставляется в модуле
|
||||
misc->good_morning - флажок признака сообщения-фразы дня, которая по идее осылается в ~8 часов по мск. Используется в
|
||||
модуле phrases.
|
||||
|
||||
misc->msg_format - Использовать форматирование в сообщении. На текущий момент этот флажок выставляется в модуле
|
||||
telegram и благополучно проходит через модуль misc, далее попадает в модуль phrases, и, наконец,
|
||||
возвращается в модуль telegram, чтобы выходное сообщение было отослано как отформатированное.
|
||||
|
||||
misc->username - имя пользователя, по которому к нему надо обратиться в ответе (используется в модуле games). Для
|
||||
misc->username - имя пользователя, по которому к нему надо обратиться в ответе (используется в модуле games). Для
|
||||
telegram это фактически ссылка на пользователя, как правило с его firstname и lastname (или
|
||||
@username, если firstname и lastname у него нету), чтобы его можно было захайлатить.
|
||||
|
||||
|
||||
39
lib/Misc.pm
39
lib/Misc.pm
@@ -7,7 +7,7 @@ use warnings;
|
||||
use utf8;
|
||||
use open qw (:std :utf8);
|
||||
|
||||
use Clone qw (clone);
|
||||
use Clone qw (clone);
|
||||
# Модули для работы приложения
|
||||
use Log::Any qw ($log);
|
||||
# Чтобы "уж точно" использовать hiredis-биндинги, загрузим этот модуль перед Mojo::Redis
|
||||
@@ -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
|
||||
@@ -83,8 +105,8 @@ my $parse_message = sub {
|
||||
# Потом - команды модуля WebApp
|
||||
unless ($done) {
|
||||
my @webapp_cmd = qw (buni anek анек анекдот cat кис drink праздник fox лис frog лягушка horse лошадь лошадка
|
||||
monkeyuser rabbit bunny кролик snail улитка owl сова сыч xkcd tits boobs tities boobies
|
||||
сиси сисечки butt booty ass попа попка);
|
||||
monkeyuser rabbit bunny кролик snail улитка owl сова сыч xkcd tits boobs tities boobies
|
||||
сиси сисечки butt booty ass попа попка);
|
||||
|
||||
while (my $check = pop @webapp_cmd) {
|
||||
if ($cmd eq $check) {
|
||||
@@ -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