commands.pm 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. use Modern::Perl;
  2. use utf8;
  3. use Mojo::AsyncAwait;
  4. use Data::Dumper;
  5. use Sub::Install;
  6. our $client;
  7. ##############################################
  8. sub command_help
  9. {
  10. my $cmd = shift;
  11. my $args = shift;
  12. my $chatid = shift;
  13. my $rest = shift;
  14. notify($chatid, "<b>/purge</b> <i>ip-адрес-устройства номер-дерева</i> - Очистить дерево PON", $rest);
  15. }
  16. # purge 172.1.1.1 2 - почистить дерево 2 на ПОН
  17. async command_purge => sub
  18. {
  19. my $cmd = shift;
  20. my $args = shift;
  21. my $chatid = shift;
  22. my $rest = shift;
  23. my $ip = $args->[0];
  24. my $tree = $args->[1];
  25. return notify($chatid, "Не указан IP-адрес") unless $ip;
  26. return notify($chatid, "Не указан номер дерева") unless $tree;
  27. return notify($chatid, "Неправильный IP-адрес: $ip") unless is_valid_ip($ip);
  28. return notify($chatid, "Неправильный номер дерева: $tree") unless $tree =~ /^\d+$/;
  29. my $res;
  30. eval {
  31. $res = await $client->get_p("device", "/pon?query=ip=$ip");
  32. };
  33. return notify($chatid, "Ошибка: " . parse_error($@)) if $@;
  34. return notify($chatid, "Устройство с IP=$ip не найдено") if @$res<1;
  35. my $dev = $res->[0];
  36. notify($chatid, "Очищаю дерево $tree на устройстве $ip '$dev->{name}'...");
  37. };
  38. ###################################
  39. sub is_valid_ip
  40. {
  41. 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]?)$/;
  42. }
  43. sub parse_error
  44. {
  45. my $e = shift;
  46. return $e unless ref $e;
  47. return "$e->{code} $e->{message} $e->{body}";
  48. }
  49. 1;