58 _onAnyMessageListeners.push_back(listener);
68 _onCommandListeners[commandName] = listener;
70 _onCommandListeners.erase(commandName);
81 for (
const auto& command : commandsList) {
82 _onCommandListeners[command] = listener;
85 for (
const auto& command : commandsList) {
86 _onCommandListeners.erase(command);
96 _onUnknownCommandListeners.push_back(listener);
104 _onNonCommandMessageListeners.push_back(listener);
112 _onEditedMessageListeners.push_back(listener);
120 _onInlineQueryListeners.push_back(listener);
130 _onChosenInlineResultListeners.push_back(listener);
138 _onCallbackQueryListeners.push_back(listener);
148 _onShippingQueryListeners.push_back(listener);
158 _onPreCheckoutQueryListeners.push_back(listener);
168 _onPollListeners.push_back(listener);
178 _onPollAnswerListeners.push_back(listener);
188 _onMyChatMemberListeners.push_back(listener);
198 _onChatMemberListeners.push_back(listener);
208 _onChatJoinRequestListeners.push_back(listener);
216 _onMessageReactionUpdatedListener.push_back(listener);
224 _onMessageReactionCountUpdatedListener.push_back(listener);
234 _onSuccessfulPaymentListeners.push_back(listener);
241 template<
typename ListenerType,
typename ObjectType>
242 inline void broadcast(
const std::vector<ListenerType>& listeners,
const ObjectType
object)
const {
246 for (
const ListenerType& item : listeners) {
251 inline void broadcastAnyMessage(
const Message::Ptr& message)
const {
252 broadcast<MessageListener, Message::Ptr>(_onAnyMessageListeners, message);
255 inline bool broadcastCommand(
const std::string& command,
const Message::Ptr& message)
const {
256 auto iter = _onCommandListeners.find(command);
257 if (iter == _onCommandListeners.end()) {
260 iter->second(message);
264 inline void broadcastUnknownCommand(
const Message::Ptr& message)
const {
265 broadcast<MessageListener, Message::Ptr>(_onUnknownCommandListeners, message);
268 inline void broadcastNonCommandMessage(
const Message::Ptr& message)
const {
269 broadcast<MessageListener, Message::Ptr>(_onNonCommandMessageListeners, message);
272 inline void broadcastEditedMessage(
const Message::Ptr& message)
const {
273 broadcast<MessageListener, Message::Ptr>(_onEditedMessageListeners, message);
276 inline void broadcastInlineQuery(
const InlineQuery::Ptr& query)
const {
277 broadcast<InlineQueryListener, InlineQuery::Ptr>(_onInlineQueryListeners, query);
280 inline void broadcastChosenInlineResult(
const ChosenInlineResult::Ptr& result)
const {
281 broadcast<ChosenInlineResultListener, ChosenInlineResult::Ptr>(_onChosenInlineResultListeners, result);
284 inline void broadcastCallbackQuery(
const CallbackQuery::Ptr& result)
const {
285 broadcast<CallbackQueryListener, CallbackQuery::Ptr>(_onCallbackQueryListeners, result);
288 inline void broadcastShippingQuery(
const ShippingQuery::Ptr& result)
const {
289 broadcast<ShippingQueryListener, ShippingQuery::Ptr>(_onShippingQueryListeners, result);
292 inline void broadcastPreCheckoutQuery(
const PreCheckoutQuery::Ptr& result)
const {
293 broadcast<PreCheckoutQueryListener, PreCheckoutQuery::Ptr>(_onPreCheckoutQueryListeners, result);
296 inline void broadcastPoll(
const Poll::Ptr& result)
const {
297 broadcast<PollListener, Poll::Ptr>(_onPollListeners, result);
300 inline void broadcastPollAnswer(
const PollAnswer::Ptr& result)
const {
301 broadcast<PollAnswerListener, PollAnswer::Ptr>(_onPollAnswerListeners, result);
304 inline void broadcastMyChatMember(
const ChatMemberUpdated::Ptr& result)
const {
305 broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onMyChatMemberListeners, result);
308 inline void broadcastChatMember(
const ChatMemberUpdated::Ptr& result)
const {
309 broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onChatMemberListeners, result);
312 inline void broadcastChatJoinRequest(
const ChatJoinRequest::Ptr& result)
const {
313 broadcast<ChatJoinRequestListener, ChatJoinRequest::Ptr>(_onChatJoinRequestListeners, result);
316 inline void broadcastMessageReactionUpdated(
const MessageReactionUpdated::Ptr& messageReaction)
const {
317 broadcast<MessageReactionUpdatedListener, MessageReactionUpdated::Ptr>(_onMessageReactionUpdatedListener, messageReaction);
320 inline void broadcastMessageReactionCountUpdated(
const MessageReactionCountUpdated::Ptr& messageReactionCount)
const {
321 broadcast<MessageReactionCountUpdatedListener, MessageReactionCountUpdated::Ptr>(_onMessageReactionCountUpdatedListener, messageReactionCount);
324 inline void broadcastSuccessfulPayment(
const Message::Ptr& message)
const {
325 if (!message || !message->successfulPayment) {
328 for (
const auto& listener : _onSuccessfulPaymentListeners) {
329 listener(message, message->successfulPayment);
334 std::vector<MessageListener> _onAnyMessageListeners;
335 std::unordered_map<std::string, MessageListener> _onCommandListeners;
336 std::vector<MessageListener> _onUnknownCommandListeners;
337 std::vector<MessageListener> _onNonCommandMessageListeners;
338 std::vector<MessageListener> _onEditedMessageListeners;
339 std::vector<InlineQueryListener> _onInlineQueryListeners;
340 std::vector<ChosenInlineResultListener> _onChosenInlineResultListeners;
341 std::vector<CallbackQueryListener> _onCallbackQueryListeners;
342 std::vector<ShippingQueryListener> _onShippingQueryListeners;
343 std::vector<PreCheckoutQueryListener> _onPreCheckoutQueryListeners;
344 std::vector<PollListener> _onPollListeners;
345 std::vector<PollAnswerListener> _onPollAnswerListeners;
346 std::vector<ChatMemberUpdatedListener> _onMyChatMemberListeners;
347 std::vector<ChatMemberUpdatedListener> _onChatMemberListeners;
348 std::vector<ChatJoinRequestListener> _onChatJoinRequestListeners;
349 std::vector<MessageReactionUpdatedListener> _onMessageReactionUpdatedListener;
350 std::vector<MessageReactionCountUpdatedListener> _onMessageReactionCountUpdatedListener;
351 std::vector<SuccessfulPaymentListener> _onSuccessfulPaymentListeners;