diff --git a/Telegram/SourceFiles/api/api_credits.cpp b/Telegram/SourceFiles/api/api_credits.cpp index dcbaac4a6..13cf45474 100644 --- a/Telegram/SourceFiles/api/api_credits.cpp +++ b/Telegram/SourceFiles/api/api_credits.cpp @@ -7,8 +7,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "api/api_credits.h" -#include "apiwrap.h" +#include "api/api_statistics_data_deserialize.h" #include "api/api_updates.h" +#include "apiwrap.h" #include "base/unixtime.h" #include "data/data_peer.h" #include "data/data_photo.h" @@ -202,4 +203,43 @@ rpl::producer> PremiumPeerBot( }; } +BotEarnStatistics::BotEarnStatistics(not_null user) +: StatisticsRequestSender(user) { +} + +rpl::producer BotEarnStatistics::request() { + return [=](auto consumer) { + auto lifetime = rpl::lifetime(); + + makeRequest(MTPpayments_GetStarsRevenueStats( + MTP_flags(0), + user()->input + )).done([=](const MTPpayments_StarsRevenueStats &result) { + const auto &data = result.data(); + const auto &status = data.vstatus().data(); + _data = Data::BotEarnStatistics{ + .revenueGraph = StatisticalGraphFromTL(data.vrevenue_graph()), + .currentBalance = status.vcurrent_balance().v, + .availableBalance = status.vavailable_balance().v, + .overallRevenue = status.voverall_revenue().v, + .usdRate = data.vusd_rate().v, + .isWithdrawalEnabled = status.is_withdrawal_enabled(), + .nextWithdrawalAt = status.vnext_withdrawal_at() + ? base::unixtime::parse(status.vnext_withdrawal_at()->v) + : QDateTime(), + }; + + consumer.put_done(); + }).fail([=](const MTP::Error &error) { + consumer.put_error_copy(error.type()); + }).send(); + + return lifetime; + }; +} + +Data::BotEarnStatistics BotEarnStatistics::data() const { + return _data; +} + } // namespace Api diff --git a/Telegram/SourceFiles/api/api_credits.h b/Telegram/SourceFiles/api/api_credits.h index 265e7b387..ae9ff5115 100644 --- a/Telegram/SourceFiles/api/api_credits.h +++ b/Telegram/SourceFiles/api/api_credits.h @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once +#include "api/api_statistics_sender.h" +#include "data/data_bot_earn.h" #include "data/data_credits.h" #include "mtproto/sender.h" @@ -14,6 +16,8 @@ namespace Main { class Session; } // namespace Main +class UserData; + namespace Api { class CreditsTopupOptions final { @@ -68,6 +72,20 @@ private: }; +class BotEarnStatistics final : public StatisticsRequestSender { +public: + explicit BotEarnStatistics(not_null); + + [[nodiscard]] rpl::producer request(); + [[nodiscard]] Data::BotEarnStatistics data() const; + +private: + Data::BotEarnStatistics _data; + + mtpRequestId _requestId = 0; + +}; + [[nodiscard]] rpl::producer> PremiumPeerBot( not_null session);