diff --git a/include/tgbot/EventBroadcaster.h b/include/tgbot/EventBroadcaster.h index 8773f353..98c04818 100644 --- a/include/tgbot/EventBroadcaster.h +++ b/include/tgbot/EventBroadcaster.h @@ -12,6 +12,7 @@ #include "tgbot/types/PollAnswer.h" #include "tgbot/types/ChatMemberUpdated.h" #include "tgbot/types/ChatJoinRequest.h" +#include "tgbot/types/SuccessfulPayment.h" #include #include @@ -43,6 +44,7 @@ friend EventHandler; typedef std::function PollAnswerListener; typedef std::function ChatMemberUpdatedListener; typedef std::function ChatJoinRequestListener; + typedef std::function SuccessfulPaymentListener; /** * @brief Registers listener which receives new incoming message of any kind - text, photo, sticker, etc. @@ -202,6 +204,16 @@ friend EventHandler; _onChatJoinRequestListeners.push_back(listener); } + /** + * @brief Registers listener which receives information about successful payments. + * This listener is triggered when a successful payment is received by the bot. + * + * @param listener Listener. + */ + inline void onSuccessfulPayment(const SuccessfulPaymentListener& listener) { + _onSuccessfulPaymentListeners.push_back(listener); + } + private: template inline void broadcast(const std::vector& listeners, const ObjectType object) const { @@ -278,6 +290,10 @@ friend EventHandler; broadcast(_onChatJoinRequestListeners, result); } + inline void broadcastSuccessfulPayment(const SuccessfulPayment::Ptr& payment) const { + broadcast(_onSuccessfulPaymentListeners, payment); + } + std::vector _onAnyMessageListeners; std::unordered_map _onCommandListeners; std::vector _onUnknownCommandListeners; @@ -293,6 +309,8 @@ friend EventHandler; std::vector _onMyChatMemberListeners; std::vector _onChatMemberListeners; std::vector _onChatJoinRequestListeners; + std::vector _onSuccessfulPaymentListeners; + }; } diff --git a/src/EventHandler.cpp b/src/EventHandler.cpp index 1a6ed400..a19e7f4a 100644 --- a/src/EventHandler.cpp +++ b/src/EventHandler.cpp @@ -72,6 +72,10 @@ void EventHandler::handleMessage(const Message::Ptr& message) const { } else { _broadcaster.broadcastNonCommandMessage(message); } + + if (message->successfulPayment != nullptr) { + _broadcaster.broadcastSuccessfulPayment(message->successfulPayment); + } } }