Use regex while omittimg response to response on our new member greet

This commit is contained in:
eleksir
2022-04-03 16:40:10 +03:00
parent c4c21127d8
commit 3c8f79a19a

View File

@@ -31,6 +31,14 @@ my $myfullname;
has token => $c->{telegrambot}->{token}; has token => $c->{telegrambot}->{token};
my @introduce_greet = (
'Дратути',
'Дарована',
'Доброе утро, день или вечер',
'Добро пожаловать в наше скромное коммунити',
'Наше вам с кисточкой тут, на канальчике',
);
my $redismsg->{from} = 'telegram'; my $redismsg->{from} = 'telegram';
$redismsg->{plugin} = 'telegram'; $redismsg->{plugin} = 'telegram';
$redismsg->{misc}->{answer} = 1; $redismsg->{misc}->{answer} = 1;
@@ -128,24 +136,17 @@ sub __on_msg {
# Newcommer event, greet our new member and suggest to introduce themself. # Newcommer event, greet our new member and suggest to introduce themself.
if ($msg->can ('new_chat_members') && defined ($msg->new_chat_members)) { if ($msg->can ('new_chat_members') && defined ($msg->new_chat_members)) {
unless (GreetMsgEnabled ($chatid)) { unless (GreetMsgEnabled ($chatid)) {
return; return;
} }
# Новые юзеры пачками появляются, только если их кто-то добавил через клиента
my @members; my @members;
my @introduce = (
'Дратути',
'Дарована',
'Доброе утро, день или вечер',
'Добро пожаловать в наше скромное коммунити',
'Наше вам с кисточкой тут, на канальчике',
);
foreach my $member (@{$msg->new_chat_members}) { foreach my $member (@{$msg->new_chat_members}) {
my $member_str = ''; my $member_str = '';
# avoid naming people by spacing symbols, or empty names # Избегаем именования по пробельному символу
if ($member->can ('first_name') && defined ($member->first_name) && $member->first_name !~ /^\s+$/ui) { if ($member->can ('first_name') && defined ($member->first_name) && $member->first_name !~ /^\s+$/ui) {
$member_str .= $member->first_name; $member_str .= $member->first_name;
@@ -155,10 +156,10 @@ sub __on_msg {
} else { } else {
if ($member->can ('last_name') && defined ($member->last_name) && $member->last_name !~ /^\s+$/ui) { if ($member->can ('last_name') && defined ($member->last_name) && $member->last_name !~ /^\s+$/ui) {
$member_str .= ' ' . $member->last_name; $member_str .= ' ' . $member->last_name;
# username must be uniq and should contain only english letters and numbers, so... # Username - это у нас валидная строка из только английских символов
} elsif ($member->can ('username') && defined ($member->username)) { } elsif ($member->can ('username') && defined ($member->username)) {
$member_str .= '@' . $member->username; $member_str .= '@' . $member->username;
# fallback to id if uose trying to be smartass and use only spacing chars in it's firstname and/or lastname # Если у юзера нету подходящих имени, фамилии или username, будем пользовать его id
} else { } else {
$member_str .= $member->id; $member_str .= $member->id;
} }
@@ -169,9 +170,18 @@ sub __on_msg {
if ($#members > 1) { if ($#members > 1) {
my $lastone = pop @members; my $lastone = pop @members;
$phrase = sprintf '%s, %s и %s. Представьтес, пожалуйста, и расскажите, что вас сюда привело.', $introduce[irand ($#introduce + 1)], join (', ', @members), $lastone; $phrase = sprintf (
'%s, %s и %s. Представьтес, пожалуйста, и расскажите, что вас сюда привело.',
$introduce_greet[irand ($#introduce_greet + 1)],
join (', ', @members),
$lastone,
);
} else { } else {
$phrase = sprintf '%s, %s. Представьтес, пожалуйста, и расскажите, что вас сюда привело.', $introduce[irand ($#introduce + 1)], $members[0]; $phrase = sprintf (
'%s, %s. Представьтес, пожалуйста, и расскажите, что вас сюда привело.',
$introduce_greet[irand ($#introduce_greet + 1)],
$members[0],
);
} }
BotSleep $msg; BotSleep $msg;
@@ -221,7 +231,8 @@ sub __on_msg {
$msg->replyMd ($phrase); $msg->replyMd ($phrase);
return; return;
} }
# is this a 1-on-1 ?
# is this a 1-on-1 ?
if ($msg->chat->type eq 'private') { if ($msg->chat->type eq 'private') {
unless (defined $msg->text) { unless (defined $msg->text) {
return; return;
@@ -259,7 +270,7 @@ sub __on_msg {
$log->debug (sprintf ('[DEBUG] Private chat bot reply to %s: %s', $vis_a_vi, $reply)); $log->debug (sprintf ('[DEBUG] Private chat bot reply to %s: %s', $vis_a_vi, $reply));
$msg->reply ($reply); $msg->reply ($reply);
} }
# group chat # group chat
} elsif (($msg->chat->type eq 'supergroup') or ($msg->chat->type eq 'group')) { } elsif (($msg->chat->type eq 'supergroup') or ($msg->chat->type eq 'group')) {
my $reply; my $reply;
@@ -305,18 +316,10 @@ sub __on_msg {
# Если новый участник чата ответил на наше приветствие, проигнорируем его ответ (и попробуем сойти за # Если новый участник чата ответил на наше приветствие, проигнорируем его ответ (и попробуем сойти за
# человека :) # человека :)
my $greetphrase = 'Представьтес, пожалуйста, и расскажите, что вас сюда привело.'; my $greetphrase = 'Представьтес, пожалуйста, и расскажите, что вас сюда привело.';
if (substr ($msg->reply_to_message->text, length ($greetphrase)) eq $greetphrase) {
my $match = 0;
my @hello = (
'Дратути, ',
'Дарована, ',
'Доброе утро, день или вечер, ',
'Добро пожаловать в наше скромное коммунити, ',
'Наше вам с кисточкой тут, на канальчике, ',
);
foreach my $hi (@hello) { if ($msg->reply_to_message->text =~ /\Q$greetphrase\E$/u) {
if (substr ($msg->reply_to_message->text, 0, length $hi) eq $hi) { foreach my $hi (@introduce_greet) {
if ($msg->reply_to_message->text =~ /^\Q$hi\E\, /u) {
return; return;
} }
} }
@@ -417,7 +420,7 @@ sub __on_msg {
$log->debug (sprintf ('[DEBUG] In public chat %s (%s) bot is not required to reply to %s', $chatname, $chatid, $vis_a_vi)); $log->debug (sprintf ('[DEBUG] In public chat %s (%s) bot is not required to reply to %s', $chatname, $chatid, $vis_a_vi));
} }
# should be channel, so we can't talk # should be channel, so we can't talk
} else { } else {
return; return;
} }