|
@@ -5,8 +5,8 @@ use Mojo::Base -strict, -async_await, -signatures;
|
|
|
use Data::Dumper;
|
|
use Data::Dumper;
|
|
|
|
|
|
|
|
our $client;
|
|
our $client;
|
|
|
-our $fsa;
|
|
|
|
|
our $abon_client;
|
|
our $abon_client;
|
|
|
|
|
+our $config;
|
|
|
|
|
|
|
|
sub __
|
|
sub __
|
|
|
{
|
|
{
|
|
@@ -21,40 +21,37 @@ our $commands = [
|
|
|
{command=>"balance", name=>__("Баланс"), description=>__("Проверка баланса")},
|
|
{command=>"balance", name=>__("Баланс"), description=>__("Проверка баланса")},
|
|
|
{command=>"service", name=>__("Сервисы"), description=>__("Подключенные сервисы")},
|
|
{command=>"service", name=>__("Сервисы"), description=>__("Подключенные сервисы")},
|
|
|
{command=>"credit", name=>__("Кредит"), description=>__("Установка кредита")},
|
|
{command=>"credit", name=>__("Кредит"), description=>__("Установка кредита")},
|
|
|
|
|
+ {command=>"transfer", name=>__("Перевод"), description=>__("Перевод денег")},
|
|
|
{command=>"logout", name=>__("Выход"), description=>__("Выход")},
|
|
{command=>"logout", name=>__("Выход"), description=>__("Выход")},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
##############################################
|
|
##############################################
|
|
|
|
|
|
|
|
-sub command_help($chatid, $uid, $rest)
|
|
|
|
|
|
|
+sub command_help($fsa, $info)
|
|
|
{
|
|
{
|
|
|
my @list = map { "<b>/$_->{command}</b> " . _($_->{description}) } @$commands;
|
|
my @list = map { "<b>/$_->{command}</b> " . _($_->{description}) } @$commands;
|
|
|
- notify($chatid, join("\n", @list), $rest);
|
|
|
|
|
|
|
+ reply($info, join("\n", @list));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-sub command_start($chatid, $uid, $from)
|
|
|
|
|
|
|
+async sub command_logout
|
|
|
{
|
|
{
|
|
|
- set_new_state("");
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-sub command_logout($chatid, $uid, $rest)
|
|
|
|
|
-{
|
|
|
|
|
- notify($chatid, _("Благодарим за использование нашего бота"));
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
|
|
|
- $client->del("client", "/client/$uid/telegram");
|
|
|
|
|
- if (my $err = $client->error)
|
|
|
|
|
- {
|
|
|
|
|
- report($chatid, $err);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ await $client->delete_p("client", "/client/$uid/telegram");
|
|
|
|
|
+ reply($info, _("Благодарим за использование нашего бота"));
|
|
|
|
|
|
|
|
- $fsa->notes(uid => undef);
|
|
|
|
|
- set_new_state("logged_out");
|
|
|
|
|
|
|
+ $fsa->delete_note("uid");
|
|
|
|
|
+ $fsa->state("logged_out");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async sub command_balance
|
|
async sub command_balance
|
|
|
{
|
|
{
|
|
|
- my ($chatid, $uid, $rest) = @_;
|
|
|
|
|
- my $money = await $abon_client->get_p($chatid, "client", "/client/$uid/money?human=1");
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
+
|
|
|
|
|
+ my $money = await $abon_client->get_p($info, "client", "/client/$uid/money?human=1");
|
|
|
my $cur = $money->{human};
|
|
my $cur = $money->{human};
|
|
|
|
|
|
|
|
my @lines = (
|
|
my @lines = (
|
|
@@ -76,14 +73,17 @@ async sub command_balance
|
|
|
push @lines, sprintf("<u>%s:</u> <b>%.2f $cur</b>", $_, $money->{accounts}->{$_});
|
|
push @lines, sprintf("<u>%s:</u> <b>%.2f $cur</b>", $_, $money->{accounts}->{$_});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- reply($rest, @lines);
|
|
|
|
|
|
|
+ reply($info, @lines);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async sub command_info
|
|
async sub command_info
|
|
|
{
|
|
{
|
|
|
- my ($chatid, $uid, $rest) = @_;
|
|
|
|
|
- my $client = await $abon_client->get_p($chatid, "client", "/client/$uid");
|
|
|
|
|
- reply($rest,
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
+ my $client = await $abon_client->get_p($info, "client", "/client/$uid");
|
|
|
|
|
+ say Dumper $client;
|
|
|
|
|
+ reply($info,
|
|
|
sprintf("<u>%s</u>: %d", _("Лицевой счет"), $client->{uid}),
|
|
sprintf("<u>%s</u>: %d", _("Лицевой счет"), $client->{uid}),
|
|
|
sprintf("<u>%s</u>: %s", _("Логин"), $client->{login}),
|
|
sprintf("<u>%s</u>: %s", _("Логин"), $client->{login}),
|
|
|
sprintf("<u>%s</u>: %s", _("ФИО"), $client->{fio}),
|
|
sprintf("<u>%s</u>: %s", _("ФИО"), $client->{fio}),
|
|
@@ -94,17 +94,19 @@ async sub command_info
|
|
|
|
|
|
|
|
async sub command_credit
|
|
async sub command_credit
|
|
|
{
|
|
{
|
|
|
- my ($chatid, $uid, $rest) = @_;
|
|
|
|
|
- my $money = await $abon_client->get_p($chatid, "client", "/client/$uid/money?human=1");
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
+
|
|
|
|
|
+ my $money = await $abon_client->get_p($info, "client", "/client/$uid/money?human=1");
|
|
|
|
|
|
|
|
if ($money->{credit} > 0)
|
|
if ($money->{credit} > 0)
|
|
|
{
|
|
{
|
|
|
- return reply($rest, sprintf("%s <b>%.2f %s</b>", _("У вас уже установлен кредит"), $money->{credit}, $money->{human}));
|
|
|
|
|
|
|
+ return reply($info, sprintf("%s <b>%.2f %s</b>", _("У вас уже установлен кредит"), $money->{credit}, $money->{human}));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- reply_with($rest, {
|
|
|
|
|
|
|
+ reply_with($info, {
|
|
|
inline_menu => [[
|
|
inline_menu => [[
|
|
|
- { text=>_("Я согласен с условиями"), callback_data=>"/set-credit" },
|
|
|
|
|
|
|
+ { text=>_("Я согласен с условиями"), callback_data=>"\x00/set-credit" },
|
|
|
]],
|
|
]],
|
|
|
},
|
|
},
|
|
|
_("Вы можете самостоятельно установить кредит на два дня"),
|
|
_("Вы можете самостоятельно установить кредит на два дня"),
|
|
@@ -112,63 +114,68 @@ async sub command_credit
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-async sub command_set_credit
|
|
|
|
|
|
|
+async sub callback_set_credit
|
|
|
{
|
|
{
|
|
|
- my ($chatid, $uid, $rest) = @_;
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
|
|
|
- my $res = await $abon_client->post_p($chatid, "client", "/client/$uid/credit", {human=>1});
|
|
|
|
|
- return reply($rest, _("Кредит не имеет смысла для бесплатных тарифных планов")) if $res->{credit} == 0;
|
|
|
|
|
|
|
+ my $res = await $abon_client->post_p($info, "client", "/client/$uid/credit", {human=>1});
|
|
|
|
|
+ return reply($info, _("Кредит не имеет смысла для бесплатных тарифных планов")) if $res->{credit} == 0;
|
|
|
|
|
|
|
|
- await reply($rest,
|
|
|
|
|
|
|
+ await reply($info,
|
|
|
sprintf("%s <b>%.2f %s</b>", _("Установлен кредит "), $res->{credit}, $res->{human}),
|
|
sprintf("%s <b>%.2f %s</b>", _("Установлен кредит "), $res->{credit}, $res->{human}),
|
|
|
"",
|
|
"",
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- command_balance($chatid, $uid, $rest);
|
|
|
|
|
|
|
+ command_balance($fsa, $info);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-=cut
|
|
|
|
|
-$VAR1 = [
|
|
|
|
|
- {
|
|
|
|
|
- 'tariff' => {
|
|
|
|
|
- 'monthly' => '0',
|
|
|
|
|
- 'dayly' => '0',
|
|
|
|
|
- 'entity' => 1000,
|
|
|
|
|
- 'speed' => 0,
|
|
|
|
|
- 'name_ru' => "\x{414}\x{43b}\x{44f} \x{441}\x{43e}\x{442}\x{440}\x{443}\x{434}\x{43d}\x{438}\x{43a}\x{43e}\x{432} MOL"
|
|
|
|
|
- },
|
|
|
|
|
- 'name' => 'pppoe',
|
|
|
|
|
- 'name_ru' => 'PPPoE',
|
|
|
|
|
- 'entity' => 32320,
|
|
|
|
|
- 'disabled' => 0
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- 'tariff' => {
|
|
|
|
|
- 'speed' => 0,
|
|
|
|
|
- 'name_ru' => "\x{414}\x{43b}\x{44f} \x{441}\x{43e}\x{442}\x{440}\x{443}\x{434}\x{43d}\x{438}\x{43a}\x{43e}\x{432} MOL",
|
|
|
|
|
- 'entity' => 1000,
|
|
|
|
|
- 'monthly' => '0',
|
|
|
|
|
- 'dayly' => '0'
|
|
|
|
|
- },
|
|
|
|
|
- 'name' => 'ipoe',
|
|
|
|
|
- 'entity' => 17,
|
|
|
|
|
- 'name_ru' => 'IPoE',
|
|
|
|
|
- 'disabled' => 0
|
|
|
|
|
- }
|
|
|
|
|
- ];
|
|
|
|
|
-=cut
|
|
|
|
|
-
|
|
|
|
|
async sub command_service
|
|
async sub command_service
|
|
|
{
|
|
{
|
|
|
- my ($chatid, $uid, $rest) = @_;
|
|
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
|
|
|
- my $res = await $abon_client->get_p($chatid, "client", "/client/$uid/service?human=1&as-array=1");
|
|
|
|
|
|
|
+ my $res = await $abon_client->get_p($info, "client", "/client/$uid/service?human=1&as-array=1");
|
|
|
my @list = map { sprintf("<u>%s:</u> %s (%s '%s')", $_->{name_ru}, format_wd($_->{tariff}, $_->{human}), _("тариф"), $_->{tariff}->{name_ru}) }
|
|
my @list = map { sprintf("<u>%s:</u> %s (%s '%s')", $_->{name_ru}, format_wd($_->{tariff}, $_->{human}), _("тариф"), $_->{tariff}->{name_ru}) }
|
|
|
grep { !$_->{disabled} } @$res;
|
|
grep { !$_->{disabled} } @$res;
|
|
|
|
|
|
|
|
- reply($rest, @list);
|
|
|
|
|
|
|
+ reply($info, @list);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+async sub command_transfer
|
|
|
|
|
+{
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ reply($info, "Введите лицевой счет пользователя, которому вы хотите перевести деньги со своего счета");
|
|
|
|
|
+
|
|
|
|
|
+ $fsa->delete_note("xfer_to");
|
|
|
|
|
+ $fsa->delete_note("xfer_amount");
|
|
|
|
|
+ $fsa->state("xfer_needs_uid");
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+async sub callback_transfer
|
|
|
|
|
+{
|
|
|
|
|
+ my ($fsa, $info) = @_;
|
|
|
|
|
+ my $uid = $fsa->note("uid");
|
|
|
|
|
+
|
|
|
|
|
+ my $to_uid = $fsa->note("xfer_to");
|
|
|
|
|
+ my $amount = $fsa->note("xfer_amount");
|
|
|
|
|
+
|
|
|
|
|
+ unless ($to_uid && $amount)
|
|
|
|
|
+ {
|
|
|
|
|
+ return reply($info, _("Произошла внутренняя ошибка"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ my $res = $abon_client->post_p($info, "client", "/client/$uid/money/to/$to_uid", {
|
|
|
|
|
+ amount => $amount,
|
|
|
|
|
+ ip => "0.0.0.0",
|
|
|
|
|
+ via => "abonbot",
|
|
|
|
|
+ currency => $config->{currency}->{name},
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ reply($info, _("Деньги успешно переведены"));
|
|
|
|
|
+ command_balance($fsa, $info);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
sub format_wd($rec, $cur)
|
|
sub format_wd($rec, $cur)
|
|
|
{
|
|
{
|
|
|
return _("бесплатно") if $rec->{dayly} == 0 && $rec->{monthly} == 0;
|
|
return _("бесплатно") if $rec->{dayly} == 0 && $rec->{monthly} == 0;
|
|
@@ -193,6 +200,5 @@ sub parse_error
|
|
|
|
|
|
|
|
1;
|
|
1;
|
|
|
|
|
|
|
|
-# что будет, если, к примеру, установка кредита вернет ошибку?
|
|
|
|
|
-# сервисы
|
|
|
|
|
-# перевод денег
|
|
|
|
|
|
|
+# перевод денег
|
|
|
|
|
+# локализация
|