diff --git a/lib/TelegramBot.pm b/lib/TelegramBot.pm index 692e21c..88a4520 100644 --- a/lib/TelegramBot.pm +++ b/lib/TelegramBot.pm @@ -190,6 +190,8 @@ sub __on_msg { # Remember user id, to check it later, in next event. SetSlackGreetRememberId ($member->id); + $log->info("New chat member $member_str ($member->id)"); + push @members, sprintf '[%s](tg://user?id=%s)', $member_str, $member->id; } @@ -234,17 +236,21 @@ sub __on_msg { sleep 2; # Can be racy, but hope for best. - unless (SetSlackGreetRememberId($msg->new_chat_member->user->id)) { + unless (GetSlackGreetRememberId($msg->new_chat_member->user->id)) { + $log->info ("$vis_a_vi entered to chat without prior notice event"); + # if earlier we did not get new chat member event, it looks like we have spammer here. Ban it. my $send_args = undef; $send_args->{chat_id} = 0 + $chatid; $send_args->{user_id} = 0 + $msg->new_chat_member->user->id; + # I think formal ban for 10 seconds will be enough for start. $send_args->{until_date} = 10 + time (); my $result = $self->banChatMember ($send_args); if ((ref ($result) eq 'JSON::PP::Boolean') && ($result == JSON::PP::true)) { + $log->info ("$vis_a_vi banned"); return; } else { $log->error ("Unable to ban user: " . Dumper ($result)); @@ -272,7 +278,7 @@ sub __on_msg { my $member = $msg->left_chat_member; my $member_str = ''; - # avoid naming people by spacing symbols, or empty names + # Avoid naming people by spacing symbols, or empty names. if ($member->can ('first_name') && defined ($member->first_name) && $member->first_name !~ /^\s+$/ui) { $member_str .= $member->first_name; @@ -285,7 +291,7 @@ sub __on_msg { # username must be uniq and should contain only english letters and numbers, so... } elsif ($member->can ('username') && defined ($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 + # Fallback to id if user trying to be smartass and use only spacing chars in it's firstname and/or lastname. } else { $member_str .= $member->id; } @@ -315,6 +321,7 @@ sub __on_msg { my $text = $msg->text; $log->debug (sprintf ('[DEBUG] Private chat %s say to bot: %s', $vis_a_vi, $text)); + # Ответ по-умолчанию my $reply = 'Давайте ещё пообщаемся, а то я ещё не научилась от вас плохому.'; @@ -325,6 +332,7 @@ sub __on_msg { my $rmsg = clone ($redismsg); $rmsg->{mode} = 'private'; $rmsg->{message} = "$text"; + # Set it to strings, explicitly $rmsg->{userid} = "$userid"; $rmsg->{chatid} = "$userid";