Actually add admin mute command
This commit is contained in:
@@ -218,6 +218,7 @@ ${csign}admin obutts - показываем ли попки по про
|
|||||||
${csign}admin chan_msg - оставляем ли сообщения присланные от имени (других) каналов
|
${csign}admin chan_msg - оставляем ли сообщения присланные от имени (других) каналов
|
||||||
${csign}admin chan_msg # - где 1 - оставляем, 0 - удаляем
|
${csign}admin chan_msg # - где 1 - оставляем, 0 - удаляем
|
||||||
${csign}admin ban userid sec - выдаём ban указанному user-у на указанное количество секунд (от 30 сек до 1 года), доступно только создателю чата
|
${csign}admin ban userid sec - выдаём ban указанному user-у на указанное количество секунд (от 30 сек до 1 года), доступно только создателю чата
|
||||||
|
${csign}admin mute userid sec - выдаём mute указанному user-у на указанное количество секунд (от 30 сек до 1 года), доступно только создателю чата
|
||||||
```
|
```
|
||||||
Типы сообщений:
|
Типы сообщений:
|
||||||
audio voice photo video animation sticker dice game poll document
|
audio voice photo video animation sticker dice game poll document
|
||||||
@@ -236,8 +237,8 @@ MYADMIN
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Банить через бота можно только создателю чятика
|
# Банить через бота можно только создателю чятика
|
||||||
if (($member->status eq 'creator') && $cmd =~ /^(admin|админ)\s+ban\s+(\d+)\s+(\d+)$/gu) {
|
if (($member->status eq 'creator') && $cmd =~ /^(admin|админ)\s+(ban|mute)\s+(\d+)\s+(\d+)$/gu) {
|
||||||
my (undef, undef, $user_id_to_ban, $time) = split /\s+/, $cmd;
|
my (undef, $action, $user_id_to_prosecute, $time) = split /\s+/, $cmd;
|
||||||
|
|
||||||
# Бот должен быть админом, чтобы банить юзеров
|
# Бот должен быть админом, чтобы банить юзеров
|
||||||
my $me = $self->getMe ();
|
my $me = $self->getMe ();
|
||||||
@@ -248,8 +249,12 @@ MYADMIN
|
|||||||
|
|
||||||
my $myId = $me->id;
|
my $myId = $me->id;
|
||||||
|
|
||||||
if ($myId == $user_id_to_ban) {
|
if ($myId == $user_id_to_prosecute) {
|
||||||
$reply = 'Я не буду себя мьютить.';
|
if ($action eq 'mute') {
|
||||||
|
$reply = 'Я не буду себя мьютить.';
|
||||||
|
} else {
|
||||||
|
$reply = 'Я не буду себя банить.';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$me = $self->getChatMember ({'chat_id' => $chatid, 'user_id' => $me->id});
|
$me = $self->getChatMember ({'chat_id' => $chatid, 'user_id' => $me->id});
|
||||||
|
|
||||||
@@ -259,7 +264,7 @@ MYADMIN
|
|||||||
|
|
||||||
if ($me->status eq 'administrator') {
|
if ($me->status eq 'administrator') {
|
||||||
# Проверим, что такой юзер есть в чятике
|
# Проверим, что такой юзер есть в чятике
|
||||||
my $chatMember = $self->getChatMember ({'chat_id' => $chatid, 'user_id' => $user_id_to_ban});
|
my $chatMember = $self->getChatMember ({'chat_id' => $chatid, 'user_id' => $user_id_to_prosecute});
|
||||||
|
|
||||||
if ($chatMember->{error}) {
|
if ($chatMember->{error}) {
|
||||||
return;
|
return;
|
||||||
@@ -269,25 +274,53 @@ MYADMIN
|
|||||||
my $memberStatus = $chatMember->status;
|
my $memberStatus = $chatMember->status;
|
||||||
|
|
||||||
if ($memberStatus eq 'creator') {
|
if ($memberStatus eq 'creator') {
|
||||||
$reply = 'Ты поехал себя банить?';
|
if ($action eq 'mute') {
|
||||||
|
$reply = 'Ты поехал себя мьютить?';
|
||||||
|
} else {
|
||||||
|
$reply = 'Ты поехал себя банить?';
|
||||||
|
}
|
||||||
} elsif ($memberStatus eq 'administrator') {
|
} elsif ($memberStatus eq 'administrator') {
|
||||||
$reply = 'Админов банить не буду.';
|
if ($action eq 'mute') {
|
||||||
|
$reply = 'Админов мьютить не буду.';
|
||||||
|
} else {
|
||||||
|
$reply = 'Админов банить не буду.';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($time < 30) {
|
if ($time < 30) {
|
||||||
$reply = 'Ты слишком добр.';
|
$reply = 'Ты слишком добр.';
|
||||||
} elsif ($time > (60 * 60 * 24 * 366)) {
|
} elsif ($time > (60 * 60 * 24 * 366)) {
|
||||||
$reply = 'Бан более чем на 366 дней - перманентный, ты слишком жесток, я так не играю.';
|
if ($action eq 'mute') {
|
||||||
|
$reply = 'Мьют более чем на 366 дней - перманентный, ты слишком жесток, я так не играю.';
|
||||||
|
} else {
|
||||||
|
$reply = 'Бан более чем на 366 дней - перманентный, ты слишком жесток, я так не играю.';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
my $result = $self->banChatMember (
|
my $result;
|
||||||
{
|
|
||||||
'chat_id' => 0 + $chatid,
|
if ($action eq 'mute') {
|
||||||
'user_id' => 0 + $user_id_to_ban,
|
$result = $self->muteChatMember (
|
||||||
'until_date' => $time + time (),
|
{
|
||||||
},
|
'chat_id' => 0 + $chatid,
|
||||||
);
|
'user_id' => 0 + $user_id_to_prosecute,
|
||||||
|
'until_date' => $time + time (),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$result = $self->banChatMember (
|
||||||
|
{
|
||||||
|
'chat_id' => 0 + $chatid,
|
||||||
|
'user_id' => 0 + $user_id_to_prosecute,
|
||||||
|
'until_date' => $time + time (),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if ($result->{error}) {
|
if ($result->{error}) {
|
||||||
$reply = 'Что-то пошло не так, не получается забанить.';
|
if ($action eq 'mute') {
|
||||||
|
$reply = 'Что-то пошло не так, не получается замьютить.';
|
||||||
|
} else {
|
||||||
|
$reply = 'Что-то пошло не так, не получается забанить.';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$reply = 'Готово.';
|
$reply = 'Готово.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use utf8;
|
|||||||
use English qw ( -no_match_vars );
|
use English qw ( -no_match_vars );
|
||||||
|
|
||||||
use Mojo::IOLoop ();
|
use Mojo::IOLoop ();
|
||||||
|
use Mojo::JSON qw (true false);
|
||||||
use Mojo::UserAgent ();
|
use Mojo::UserAgent ();
|
||||||
use Carp qw/croak cluck confess/; # use croak where we return error up to app that supply something wrong
|
use Carp qw/croak cluck confess/; # use croak where we return error up to app that supply something wrong
|
||||||
# use cluck where we want to say that something bad but non-critical happen in
|
# use cluck where we want to say that something bad but non-critical happen in
|
||||||
@@ -169,6 +170,7 @@ sub banChatMember {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub unbanChatMember {
|
sub unbanChatMember {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $args = shift || {};
|
my $args = shift || {};
|
||||||
@@ -197,6 +199,43 @@ sub unbanChatMember {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub muteChatMember {
|
||||||
|
my $self = shift;
|
||||||
|
my $args = shift || {};
|
||||||
|
|
||||||
|
my $token = $self->token || croak 'No token supplied to muteChatMember?';
|
||||||
|
my $send_args = {};
|
||||||
|
|
||||||
|
unless ($args->{chat_id}) {
|
||||||
|
cluck 'No chat_id supplied to muteChatMember()';
|
||||||
|
return {'error' => 1};
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ($args->{user_id}) {
|
||||||
|
cluck 'No user_id supplied to muteChatMember()';
|
||||||
|
return {'error' => 1};
|
||||||
|
}
|
||||||
|
|
||||||
|
$send_args->{chat_id} = $args->{chat_id};
|
||||||
|
$send_args->{user_id} = $args->{user_id};
|
||||||
|
$send_args->{until_date} = $args->{until_date} if exists $args->{until_date};
|
||||||
|
# Revoke all known for API v6.2 permissions
|
||||||
|
$send_args->{permissions}->{can_send_messages} = false;
|
||||||
|
$send_args->{permissions}->{can_send_media_messages} = false;
|
||||||
|
$send_args->{permissions}->{can_send_polls} = false;
|
||||||
|
$send_args->{permissions}->{can_send_other_messages} = false;
|
||||||
|
$send_args->{permissions}->{can_add_web_page_previews} = false;
|
||||||
|
$send_args->{permissions}->{can_change_info} = false;
|
||||||
|
$send_args->{permissions}->{can_invite_users} = false;
|
||||||
|
$send_args->{permissions}->{can_pin_messages} = false;
|
||||||
|
|
||||||
|
my $url = "https://api.telegram.org/bot${token}/restrictChatMember";
|
||||||
|
my $api_response = $self->_post_request($url, $send_args);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub getChat {
|
sub getChat {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $args = shift || {};
|
my $args = shift || {};
|
||||||
@@ -829,6 +868,17 @@ Takes chat_id, and user_id as arguments. And optionally only_if_banned.
|
|||||||
|
|
||||||
Returns nothing, it's send-only method (Telegram API returns true on success)
|
Returns nothing, it's send-only method (Telegram API returns true on success)
|
||||||
|
|
||||||
|
=head2 muteChatMember
|
||||||
|
|
||||||
|
This is the wrapper around the C<restrictChatMember> API method. See
|
||||||
|
L<https://core.telegram.org/bots/api#restrictchatmember>.
|
||||||
|
|
||||||
|
Takes chat_id, and user_id as arguments. And optionally until_date.
|
||||||
|
|
||||||
|
Shorthand for revoking all perminnsions for member being muted.
|
||||||
|
|
||||||
|
Returns nothing, it's send-only method (Telegram API returns true on success)
|
||||||
|
|
||||||
=head2 getChat
|
=head2 getChat
|
||||||
|
|
||||||
This is the wrapper around the C<getChat> API method. See
|
This is the wrapper around the C<getChat> API method. See
|
||||||
|
|||||||
Reference in New Issue
Block a user