use Modern::Perl; use utf8; use Mojo::AsyncAwait; use Data::Dumper; use Sub::Install; our $client; ############################################## sub command_help { my $cmd = shift; my $args = shift; my $chatid = shift; my $rest = shift; notify($chatid, "/purge ip-адрес-устройства номер-дерева - Очистить дерево PON", $rest); } # purge 172.1.1.1 2 - почистить дерево 2 на ПОН async command_purge => sub { my $cmd = shift; my $args = shift; my $chatid = shift; my $rest = shift; my $ip = $args->[0]; my $tree = $args->[1]; return notify($chatid, "Не указан IP-адрес") unless $ip; return notify($chatid, "Не указан номер дерева") unless $tree; return notify($chatid, "Неправильный IP-адрес: $ip") unless is_valid_ip($ip); return notify($chatid, "Неправильный номер дерева: $tree") unless $tree =~ /^\d+$/; my $res; eval { $res = await $client->get_p("device", "/pon?query=ip=$ip"); }; return notify($chatid, "Ошибка: " . parse_error($@)) if $@; return notify($chatid, "Устройство с IP=$ip не найдено") if @$res<1; my $dev = $res->[0]; notify($chatid, "Очищаю дерево $tree на устройстве $ip '$dev->{name}'..."); }; ################################### sub is_valid_ip { return $_[0] =~ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; } sub parse_error { my $e = shift; return $e unless ref $e; return "$e->{code} $e->{message} $e->{body}"; } 1;