Fix ban logic, add logs to tracking+ban events

This commit is contained in:
eleksir
2025-05-19 13:20:37 +03:00
parent c24644b10e
commit 9ab633be29

View File

@@ -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";