Более корректно работаем с substr() и задаём misc->answer явно

This commit is contained in:
eleksir
2022-03-27 20:08:57 +03:00
parent 3bbe325fc0
commit 8ce226f755
2 changed files with 34 additions and 26 deletions

View File

@@ -40,9 +40,11 @@ sub Command {
my $reply; my $reply;
my ($userid, $username, $fullname, $highlight, $visavi) = Highlight ($msg); my ($userid, $username, $fullname, $highlight, $visavi) = Highlight ($msg);
my $rmsg = clone ($redismsg);
$rmsg->{userid} = 0 + $userid; my $rmsg = clone ($redismsg);
$rmsg->{chatid} = 0 + $chatid; $rmsg->{userid} = 0 + $userid;
$rmsg->{chatid} = 0 + $chatid;
$rmsg->{misc}->{answer} = 1;
if ($chatid >= 0) { if ($chatid >= 0) {
$rmsg->{mode} = 'private'; $rmsg->{mode} = 'private';
@@ -50,7 +52,7 @@ sub Command {
$rmsg->{mode} = 'public'; $rmsg->{mode} = 'public';
} }
my $cmd = substr $text, 1; my $cmd = substr $text, length ($csign);
# Проверка #1 на админское разрешение некоторых команд # Проверка #1 на админское разрешение некоторых команд
my @cmds = qw (tits boobs tities boobies сиси сисечки); my @cmds = qw (tits boobs tities boobies сиси сисечки);

View File

@@ -41,12 +41,12 @@ $redismsg->{misc}->{fwd_cnt} = 1;
sub __cron { sub __cron {
my $self = shift; my $self = shift;
my $rmsg = clone ($redismsg); my $rmsg = clone ($redismsg);
$rmsg->{mode} = 'public'; $rmsg->{mode} = 'public';
# Press 'F' to pay respect # Press 'F' to pay respect
$rmsg->{message} = sprintf '%sf', $c->{telegrambot}->{csign}; $rmsg->{message} = sprintf '%sf', $c->{telegrambot}->{csign};
$rmsg->{misc}->{good_morning} = 1; $rmsg->{misc}->{msg_format} = 1;
$rmsg->{misc}->{msg_format} = 1; $rmsg->{misc}->{answer} = 1;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (time); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (time);
@@ -232,16 +232,19 @@ sub __on_msg {
# Ответ по-умолчанию # Ответ по-умолчанию
my $reply = 'Давайте ещё пообщаемся, а то я ещё не научилась от вас плохому.'; my $reply = 'Давайте ещё пообщаемся, а то я ещё не научилась от вас плохому.';
if (substr ($text, 0, 1) eq $csign) { if (substr ($text, 0, length ($csign)) eq $csign) {
# Если текст похож на команду, усылаем его в BotLib.pm # Если текст похож на команду, усылаем его в BotLib.pm
$reply = Command ($self, $msg, $text, $userid); $reply = Command ($self, $msg, $text, $userid);
} else { } else {
my $rmsg = clone ($redismsg); my $rmsg = clone ($redismsg);
$rmsg->{mode} = 'private'; $rmsg->{mode} = 'private';
$rmsg->{message} = $text; $rmsg->{message} = $text;
$rmsg->{userid} = 0 + $userid; $rmsg->{userid} = 0 + $userid;
$rmsg->{chatid} = 0 + $userid; $rmsg->{chatid} = 0 + $userid;
$rmsg->{misc}->{answer} = 1;
my $pubsub = $main::REDIS->pubsub; my $pubsub = $main::REDIS->pubsub;
$pubsub->json ($c->{'redis_router_channel'})->notify ( $pubsub->json ($c->{'redis_router_channel'})->notify (
$c->{'redis_router_channel'} => $rmsg, $c->{'redis_router_channel'} => $rmsg,
); );
@@ -301,7 +304,8 @@ sub __on_msg {
# Если новый участник чата ответил на наше приветствие, проигнорируем его ответ (и попробуем сойти за # Если новый участник чата ответил на наше приветствие, проигнорируем его ответ (и попробуем сойти за
# человека :) # человека :)
if (substr ($msg->reply_to_message->text, -61) eq 'Представьтес, пожалуйста, и расскажите, что вас сюда привело.') { my $greetphrase = 'Представьтес, пожалуйста, и расскажите, что вас сюда привело.';
if (substr ($msg->reply_to_message->text, length ($greetphrase)) eq $greetphrase) {
my $match = 0; my $match = 0;
my @hello = ( my @hello = (
'Дратути, ', 'Дратути, ',
@@ -326,11 +330,12 @@ sub __on_msg {
$phrase =~ s/$pat2//g; $phrase =~ s/$pat2//g;
# Попробуем сгенерить ответ # Попробуем сгенерить ответ
my $rmsg = clone ($redismsg); my $rmsg = clone ($redismsg);
$rmsg->{mode} = 'public'; $rmsg->{mode} = 'public';
$rmsg->{message} = $phrase; $rmsg->{message} = $phrase;
$rmsg->{userid} = 0 + $userid; $rmsg->{userid} = 0 + $userid;
$rmsg->{chatid} = 0 + $chatid; $rmsg->{chatid} = 0 + $chatid;
$rmsg->{misc}->{answer} = 1;
my $pubsub = $main::REDIS->pubsub; my $pubsub = $main::REDIS->pubsub;
@@ -340,7 +345,7 @@ sub __on_msg {
return; return;
# Если текст похож на команду, усылаем его в BotLib.pm # Если текст похож на команду, усылаем его в BotLib.pm
} elsif (substr ($text, 0, 1) eq $csign) { } elsif (substr ($text, 0, length ($csign)) eq $csign) {
$reply = Command ($self, $msg, $text, $chatid); $reply = Command ($self, $msg, $text, $chatid);
# Похоже кто-то написал наше имя в чятике, но ничего не захотел дописывать к нему # Похоже кто-то написал наше имя в чятике, но ничего не захотел дописывать к нему
} elsif ( } elsif (
@@ -356,10 +361,11 @@ sub __on_msg {
my $qname = quotemeta ('@' . $myusername); my $qname = quotemeta ('@' . $myusername);
my $qtname = quotemeta $myfullname; my $qtname = quotemeta $myfullname;
my $rmsg = clone ($redismsg); my $rmsg = clone ($redismsg);
$rmsg->{mode} = 'public'; $rmsg->{mode} = 'public';
$rmsg->{userid} = 0 + $userid; $rmsg->{userid} = 0 + $userid;
$rmsg->{chatid} = 0 + $chatid; $rmsg->{chatid} = 0 + $chatid;
$rmsg->{misc}->{answer} = 1;
# Сообщение обращено к боту # Сообщение обращено к боту
if ((lc ($text) =~ /^${qname}[\,|\:]? (.+)/) or (lc ($text) =~ /^${qtname}[\,|\:]? (.+)/)){ if ((lc ($text) =~ /^${qname}[\,|\:]? (.+)/) or (lc ($text) =~ /^${qtname}[\,|\:]? (.+)/)){