Compare commits
4 Commits
8ce226f755
...
3c8f79a19a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c8f79a19a | ||
|
|
c4c21127d8 | ||
|
|
8d4bf1abd9 | ||
|
|
5e5613ff82 |
@@ -1,4 +1,18 @@
|
|||||||
#!/usr/bin/env perlcritic
|
#!/usr/bin/env perlcritic
|
||||||
|
|
||||||
|
# Задействованные модули критика:
|
||||||
|
#
|
||||||
|
# Perl::Critic::More
|
||||||
|
# Perl::Critic::Pulp
|
||||||
|
# Perl::Critic::TooMuchCode
|
||||||
|
# Perl::Critic::Lax
|
||||||
|
# Perl::Critic::CognitiveComplexity
|
||||||
|
# Perl::Critic::Policy::CompileTime
|
||||||
|
# Perl::Critic::Policy::ProhibitImplicitImport
|
||||||
|
# Perl::Critic::Policy::Dynamic::NoIndirect
|
||||||
|
# Perl::Critic::StricterSubs
|
||||||
|
# Perl::Critic::Policy::ProhibitImplicitImport
|
||||||
|
|
||||||
severity = 5
|
severity = 5
|
||||||
verbose = 8
|
verbose = 8
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ sub Command {
|
|||||||
$c->{'redis_router_channel'} => $rmsg,
|
$c->{'redis_router_channel'} => $rmsg,
|
||||||
);
|
);
|
||||||
# Если команда не найдена, но строка подозрительно напоминает команду help
|
# Если команда не найдена, но строка подозрительно напоминает команду help
|
||||||
} elsif (substr ($text, 1) eq 'help' || substr ($text, 1) eq 'помощь') {
|
} elsif (substr ($text, length ('help')) eq 'help' || substr ($text, length ('помощь')) eq 'помощь') {
|
||||||
$reply = << "MYHELP";
|
$reply = << "MYHELP";
|
||||||
```
|
```
|
||||||
${csign}help | ${csign}помощь - список команд
|
${csign}help | ${csign}помощь - список команд
|
||||||
@@ -185,7 +185,7 @@ MYHELP
|
|||||||
$msg->replyMd ($reply);
|
$msg->replyMd ($reply);
|
||||||
return;
|
return;
|
||||||
# Если строка не найдена, но это команда admin
|
# Если строка не найдена, но это команда admin
|
||||||
} elsif (substr ($text, 1) eq 'admin' || substr ($text, 1) eq 'админ') {
|
} elsif (substr ($text, length ($csign)) eq 'admin' || substr ($text, length ($csign)) eq 'админ') {
|
||||||
my $member = $self->getChatMember ({ 'chat_id' => $msg->chat->id, 'user_id' => $msg->from->id });
|
my $member = $self->getChatMember ({ 'chat_id' => $msg->chat->id, 'user_id' => $msg->from->id });
|
||||||
|
|
||||||
# Это должно показываться только админам чата
|
# Это должно показываться только админам чата
|
||||||
@@ -220,7 +220,7 @@ MYADMIN
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
# Если строка не найдена, но это команда admin с параметрами
|
# Если строка не найдена, но это команда admin с параметрами
|
||||||
} elsif ((substr ($text, 1, 5) eq 'admin' || substr ($text, 1, 5) eq 'админ') && (length ($text) >= 8)) {
|
} elsif ((substr ($text, length ($csign), length ('admin')) eq 'admin' || substr ($text, length ($csign), length ('админ')) eq 'админ') && (length ($text) >= 8)) {
|
||||||
my $member = $self->getChatMember ({ 'chat_id' => $msg->chat->id, 'user_id' => $msg->from->id });
|
my $member = $self->getChatMember ({ 'chat_id' => $msg->chat->id, 'user_id' => $msg->from->id });
|
||||||
|
|
||||||
# Это должно показываться только админам чата
|
# Это должно показываться только админам чата
|
||||||
|
|||||||
@@ -23,13 +23,8 @@ sub trim {
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (substr ($str, 0, 1) =~ /^\s$/xms) {
|
$str =~ s/^\s+//;
|
||||||
$str = substr $str, 1;
|
$str =~ s/\s+$//;
|
||||||
}
|
|
||||||
|
|
||||||
while (substr ($str, -1, 1) =~ /^\s$/xms) {
|
|
||||||
chop $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user