54        _onAnyMessageListeners.push_back(listener);
 
 
   64            _onCommandListeners[commandName] = listener;
 
   66            _onCommandListeners.erase(commandName);
 
 
   77            for (
const auto& command : commandsList) {
 
   78                _onCommandListeners[command] = listener;
 
   81            for (
const auto& command : commandsList) {
 
   82                _onCommandListeners.erase(command);
 
 
   92        _onUnknownCommandListeners.push_back(listener);
 
 
  100        _onNonCommandMessageListeners.push_back(listener);
 
 
  108        _onEditedMessageListeners.push_back(listener);
 
 
  116        _onInlineQueryListeners.push_back(listener);
 
 
  126        _onChosenInlineResultListeners.push_back(listener);
 
 
  134        _onCallbackQueryListeners.push_back(listener);
 
 
  144        _onShippingQueryListeners.push_back(listener);
 
 
  154        _onPreCheckoutQueryListeners.push_back(listener);
 
 
  164        _onPollListeners.push_back(listener);
 
 
  174        _onPollAnswerListeners.push_back(listener);
 
 
  184        _onMyChatMemberListeners.push_back(listener);
 
 
  194        _onChatMemberListeners.push_back(listener);
 
 
  204        _onChatJoinRequestListeners.push_back(listener);
 
 
  214        _onSuccessfulPaymentListeners.push_back(listener);
 
 
  221    template<
typename ListenerType, 
typename ObjectType>
 
  222    inline void broadcast(
const std::vector<ListenerType>& listeners, 
const ObjectType 
object)
 const {
 
  226        for (
const ListenerType& item : listeners) {
 
  231    inline void broadcastAnyMessage(
const Message::Ptr& message)
 const {
 
  232        broadcast<MessageListener, Message::Ptr>(_onAnyMessageListeners, message);
 
  235    inline bool broadcastCommand(
const std::string& command, 
const Message::Ptr& message)
 const {
 
  236        auto iter = _onCommandListeners.find(command);
 
  237        if (iter == _onCommandListeners.end()) {
 
  240        iter->second(message);
 
  244    inline void broadcastUnknownCommand(
const Message::Ptr& message)
 const {
 
  245        broadcast<MessageListener, Message::Ptr>(_onUnknownCommandListeners, message);
 
  248    inline void broadcastNonCommandMessage(
const Message::Ptr& message)
 const {
 
  249        broadcast<MessageListener, Message::Ptr>(_onNonCommandMessageListeners, message);
 
  252    inline void broadcastEditedMessage(
const Message::Ptr& message)
 const {
 
  253        broadcast<MessageListener, Message::Ptr>(_onEditedMessageListeners, message);
 
  256    inline void broadcastInlineQuery(
const InlineQuery::Ptr& query)
 const {
 
  257        broadcast<InlineQueryListener, InlineQuery::Ptr>(_onInlineQueryListeners, query);
 
  260    inline void broadcastChosenInlineResult(
const ChosenInlineResult::Ptr& result)
 const {
 
  261        broadcast<ChosenInlineResultListener, ChosenInlineResult::Ptr>(_onChosenInlineResultListeners, result);
 
  264    inline void broadcastCallbackQuery(
const CallbackQuery::Ptr& result)
 const {
 
  265        broadcast<CallbackQueryListener, CallbackQuery::Ptr>(_onCallbackQueryListeners, result);
 
  268    inline void broadcastShippingQuery(
const ShippingQuery::Ptr& result)
 const {
 
  269        broadcast<ShippingQueryListener, ShippingQuery::Ptr>(_onShippingQueryListeners, result);
 
  272    inline void broadcastPreCheckoutQuery(
const PreCheckoutQuery::Ptr& result)
 const {
 
  273        broadcast<PreCheckoutQueryListener, PreCheckoutQuery::Ptr>(_onPreCheckoutQueryListeners, result);
 
  276    inline void broadcastPoll(
const Poll::Ptr& result)
 const {
 
  277        broadcast<PollListener, Poll::Ptr>(_onPollListeners, result);
 
  280    inline void broadcastPollAnswer(
const PollAnswer::Ptr& result)
 const {
 
  281        broadcast<PollAnswerListener, PollAnswer::Ptr>(_onPollAnswerListeners, result);
 
  284    inline void broadcastMyChatMember(
const ChatMemberUpdated::Ptr& result)
 const {
 
  285        broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onMyChatMemberListeners, result);
 
  288    inline void broadcastChatMember(
const ChatMemberUpdated::Ptr& result)
 const {
 
  289        broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onChatMemberListeners, result);
 
  292    inline void broadcastChatJoinRequest(
const ChatJoinRequest::Ptr& result)
 const {
 
  293        broadcast<ChatJoinRequestListener, ChatJoinRequest::Ptr>(_onChatJoinRequestListeners, result);
 
  296    inline void broadcastSuccessfulPayment(
const Message::Ptr& message)
 const {
 
  297        if (!message || !message->successfulPayment) {
 
  300        for (
const auto& listener : _onSuccessfulPaymentListeners) {
 
  301            listener(message, message->successfulPayment);
 
  306    std::vector<MessageListener> _onAnyMessageListeners;
 
  307    std::unordered_map<std::string, MessageListener> _onCommandListeners;
 
  308    std::vector<MessageListener> _onUnknownCommandListeners;
 
  309    std::vector<MessageListener> _onNonCommandMessageListeners;
 
  310    std::vector<MessageListener> _onEditedMessageListeners;
 
  311    std::vector<InlineQueryListener> _onInlineQueryListeners;
 
  312    std::vector<ChosenInlineResultListener> _onChosenInlineResultListeners;
 
  313    std::vector<CallbackQueryListener> _onCallbackQueryListeners;
 
  314    std::vector<ShippingQueryListener> _onShippingQueryListeners;
 
  315    std::vector<PreCheckoutQueryListener> _onPreCheckoutQueryListeners;
 
  316    std::vector<PollListener> _onPollListeners;
 
  317    std::vector<PollAnswerListener> _onPollAnswerListeners;
 
  318    std::vector<ChatMemberUpdatedListener> _onMyChatMemberListeners;
 
  319    std::vector<ChatMemberUpdatedListener> _onChatMemberListeners;
 
  320    std::vector<ChatJoinRequestListener> _onChatJoinRequestListeners;
 
  321    std::vector<SuccessfulPaymentListener> _onSuccessfulPaymentListeners;