Fix admin command, use regex for complex command detection

This commit is contained in:
eleksir
2022-04-03 17:33:14 +03:00
parent e140176c99
commit 2209872a7b
2 changed files with 19 additions and 18 deletions

View File

@@ -144,3 +144,6 @@ max_length = 200
# This is problematic # This is problematic
[-Miscellanea::ProhibitUnrestrictedNoCritic] [-Miscellanea::ProhibitUnrestrictedNoCritic]
[-RegularExpressions::ProhibitFixedStringMatches]
# no, just no. I'm too lazy to everytime check string length before substr

View File

@@ -94,8 +94,7 @@ sub Command {
} }
# Поиск "сложных" команд во входящем сообщении # Поиск "сложных" команд во входящем сообщении
if (($cmd =~ /^w\s/u) || ($cmd =~ /^п\s/u) || ($cmd =~ /^weather\s/u) || ($cmd =~ /^погода\s/u) || if ($cmd =~ /^(w|п|weather|погода|погодка|погадка|karma|карма)\s+/) { ## no critic (RegularExpressions::ProhibitComplexRegexes)
($cmd =~ /^погодка\s/u) || ($cmd =~ /^погадка\s/u) || ($cmd =~ /^karma\s/u) || ($cmd =~ /карма\s/u)) {
$bingo = 1; $bingo = 1;
} }
@@ -143,7 +142,7 @@ sub Command {
$c->{'redis_router_channel'} => $rmsg, $c->{'redis_router_channel'} => $rmsg,
); );
# Если команда не найдена, но строка подозрительно напоминает команду help # Если команда не найдена, но строка подозрительно напоминает команду help
} elsif (substr ($text, length ('help')) eq 'help' || substr ($text, length ('помощь')) eq 'помощь') { } elsif ($cmd =~ /^(help|помощь)$/u) {
$reply = << "MYHELP"; $reply = << "MYHELP";
``` ```
${csign}help | ${csign}помощь - список команд ${csign}help | ${csign}помощь - список команд
@@ -184,8 +183,8 @@ ${csign}karma фраза | ${csign}карма фраза - посмотреть
MYHELP MYHELP
$msg->replyMd ($reply); $msg->replyMd ($reply);
return; return;
# Если строка не найдена, но это команда admin # Если команда не найдена, но это команда admin
} elsif (substr ($text, length ($csign)) eq 'admin' || substr ($text, length ($csign)) eq 'админ') { } elsif ($cmd =~ /^(admin|админ)$/u) {
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,22 +219,21 @@ MYADMIN
return; return;
# Если строка не найдена, но это команда admin с параметрами # Если строка не найдена, но это команда admin с параметрами
} elsif ((substr ($text, length ($csign), length ('admin')) eq 'admin' || substr ($text, length ($csign), length ('админ')) eq 'админ') && (length ($text) >= 8)) { } elsif ($cmd =~ /^admin\s+.+$/u || $cmd =~ /^админ\s+.+$/u) {
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 });
# Это должно показываться только админам чата # Это должно показываться только админам чата
if (($member->status eq 'administrator') || ($member->status eq 'creator')) { if (($member->status eq 'administrator') || ($member->status eq 'creator')) {
# Вынем субкоманду, это первый аргумент команды admin # Вынем субкоманду, это первый аргумент команды admin
my $command = trim (substr $text, 7); $cmd =~ /^(admin|админ)\s+(.+)$/u;
$cmd = undef; my $command = trim ($2); ## no critic (RegularExpressions::ProhibitCaptureWithoutTest)
my $args; my ($subcmd, $args) = split /\s+/, $command, 2;
($cmd, $args) = split /\s+/, $command, 2;
# Субкоманды не нашлось, ну и какбэ досвидонья # Субкоманды не нашлось, ну и какбэ досвидонья
if ($cmd eq '') { if ($subcmd eq '') {
return; return;
# Субкоманда censor... # Субкоманда censor...
} elsif ($cmd eq 'censor' || $cmd eq 'ценз') { } elsif ($subcmd eq 'censor' || $subcmd eq 'ценз') {
# Censor с аргументами # Censor с аргументами
if (defined ($args) && ($args ne '')) { if (defined ($args) && ($args ne '')) {
my ($msgType, $toggle) = split /\s/, $args, 2; my ($msgType, $toggle) = split /\s/, $args, 2;
@@ -258,7 +256,7 @@ MYADMIN
$reply = ListForbidden ($chatid); $reply = ListForbidden ($chatid);
} }
# Хотим ли мы показывать фортунку с утра # Хотим ли мы показывать фортунку с утра
} elsif ($cmd eq 'fortune' || $cmd eq 'фортунка') { } elsif ($subcmd eq 'fortune' || $subcmd eq 'фортунка') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = FortuneToggle ($chatid, 1); $reply = FortuneToggle ($chatid, 1);
@@ -269,7 +267,7 @@ MYADMIN
$reply = FortuneStatus ($chatid); $reply = FortuneStatus ($chatid);
} }
# Хотим ли мы удалять "сообщения от каналов" # Хотим ли мы удалять "сообщения от каналов"
} elsif ($cmd eq 'chan_msg') { } elsif ($subcmd eq 'chan_msg') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = ChanMsgToggle ($chatid, 1); $reply = ChanMsgToggle ($chatid, 1);
@@ -280,7 +278,7 @@ MYADMIN
$reply = ChanMsgStatus ($chatid); $reply = ChanMsgStatus ($chatid);
} }
# Приветствуем ли мы новых участников чата # Приветствуем ли мы новых участников чата
} elsif ($cmd eq 'greet' || $cmd eq 'приветствие') { } elsif ($subcmd eq 'greet' || $subcmd eq 'приветствие') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = GreetMsgToggle ($chatid, 1); $reply = GreetMsgToggle ($chatid, 1);
@@ -290,7 +288,7 @@ MYADMIN
} else { } else {
$reply = GreetMsgStatus ($chatid); $reply = GreetMsgStatus ($chatid);
} }
} elsif ($cmd eq 'goodbye' || $cmd eq 'прощание') { } elsif ($subcmd eq 'goodbye' || $subcmd eq 'прощание') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = GoodbyeMsgToggle ($chatid, 1); $reply = GoodbyeMsgToggle ($chatid, 1);
@@ -301,7 +299,7 @@ MYADMIN
$reply = GoodbyeMsgStatus ($chatid); $reply = GoodbyeMsgStatus ($chatid);
} }
# Работает ли плагин oboobs в чатике # Работает ли плагин oboobs в чатике
} elsif ($cmd eq 'oboobs') { } elsif ($subcmd eq 'oboobs') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = PluginToggle ($chatid, 'oboobs', 1); $reply = PluginToggle ($chatid, 'oboobs', 1);
@@ -312,7 +310,7 @@ MYADMIN
$reply = PluginStatus ($chatid, 'oboobs'); $reply = PluginStatus ($chatid, 'oboobs');
} }
# Работает ли плагин obutts в чатике # Работает ли плагин obutts в чатике
} elsif ($cmd eq 'obutts') { } elsif ($subcmd eq 'obutts') {
if (defined $args) { if (defined $args) {
if ($args == 1) { if ($args == 1) {
$reply = PluginToggle ($chatid, 'obutts', 1); $reply = PluginToggle ($chatid, 'obutts', 1);