66#include " tgbot/types/InlineQuery.h"
77#include " tgbot/types/ChosenInlineResult.h"
88#include " tgbot/types/CallbackQuery.h"
9+ #include " tgbot/types/ShippingQuery.h"
10+ #include " tgbot/types/PreCheckoutQuery.h"
11+ #include " tgbot/types/Poll.h"
12+ #include " tgbot/types/PollAnswer.h"
13+ #include " tgbot/types/ChatMemberUpdated.h"
14+ #include " tgbot/types/ChatJoinRequest.h"
915
16+ #include < functional>
1017#include < initializer_list>
1118#include < string>
12- #include < functional>
13- #include < vector>
1419#include < unordered_map>
20+ #include < vector>
1521
1622namespace TgBot {
1723
@@ -31,9 +37,15 @@ friend EventHandler;
3137 typedef std::function<void (const InlineQuery::Ptr)> InlineQueryListener;
3238 typedef std::function<void (const ChosenInlineResult::Ptr)> ChosenInlineResultListener;
3339 typedef std::function<void (const CallbackQuery::Ptr)> CallbackQueryListener;
40+ typedef std::function<void (const ShippingQuery::Ptr)> ShippingQueryListener;
41+ typedef std::function<void (const PreCheckoutQuery::Ptr)> PreCheckoutQueryListener;
42+ typedef std::function<void (const Poll::Ptr)> PollListener;
43+ typedef std::function<void (const PollAnswer::Ptr)> PollAnswerListener;
44+ typedef std::function<void (const ChatMemberUpdated::Ptr)> ChatMemberUpdatedListener;
45+ typedef std::function<void (const ChatJoinRequest::Ptr)> ChatJoinRequestListener;
3446
3547 /* *
36- * @brief Registers listener which receives all messages which the bot can ever receive .
48+ * @brief Registers listener which receives new incoming message of any kind - text, photo, sticker, etc .
3749 * @param listener Listener.
3850 */
3951 inline void onAnyMessage (const MessageListener& listener) {
@@ -87,29 +99,109 @@ friend EventHandler;
8799 }
88100
89101 /* *
90- * @brief Registers listener which receives all the inline query.
102+ * @brief Registers listener which receives new versions of a message that is known to the bot and was edited
103+ * @param listener Listener.
104+ */
105+ inline void onEditedMessage (const MessageListener& listener) {
106+ _onEditedMessageListeners.push_back (listener);
107+ }
108+
109+ /* *
110+ * @brief Registers listener which receives new incoming inline queries
91111 * @param listener Listener.
92112 */
93113 inline void onInlineQuery (const InlineQueryListener& listener) {
94114 _onInlineQueryListeners.push_back (listener);
95115 }
96116
97117 /* *
98- * @brief Registers listener which receives all the chosen inline result.
118+ * @brief Registers listener which receives the results of an inline query that was chosen by a user and sent to their chat partner.
119+ * Please see https://core.telegram.org/bots/inline#collecting-feedback for details on how to enable these updates for your bot.
120+ *
99121 * @param listener Listener.
100122 */
101123 inline void onChosenInlineResult (const ChosenInlineResultListener& listener){
102124 _onChosenInlineResultListeners.push_back (listener);
103125 }
104126
105127 /* *
106- * @brief Registers listener which receives all the callback query.
128+ * @brief Registers listener which receives new incoming callback queries
107129 * @param listener Listener.
108130 */
109131 inline void onCallbackQuery (const CallbackQueryListener& listener){
110132 _onCallbackQueryListeners.push_back (listener);
111133 }
112134
135+ /* *
136+ * @brief Registers listener which receives new incoming shipping queries.
137+ * Only for invoices with flexible price
138+ *
139+ * @param listener Listener.
140+ */
141+ inline void onShippingQuery (const ShippingQueryListener& listener){
142+ _onShippingQueryListeners.push_back (listener);
143+ }
144+
145+ /* *
146+ * @brief Registers listener which receives new incoming pre-checkout queries.
147+ * Contains full information about checkout
148+ *
149+ * @param listener Listener.
150+ */
151+ inline void onPreCheckoutQuery (const PreCheckoutQueryListener& listener){
152+ _onPreCheckoutQueryListeners.push_back (listener);
153+ }
154+
155+ /* *
156+ * @brief Registers listener which receives new poll states.
157+ * Bots receive only updates about stopped polls and polls, which are sent by the bot
158+ *
159+ * @param listener Listener.
160+ */
161+ inline void onPoll (const PollListener& listener){
162+ _onPollListeners.push_back (listener);
163+ }
164+
165+ /* *
166+ * @brief Registers listener which receives an answer if a user changed their answer in a non-anonymous poll.
167+ * Bots receive new votes only in polls that were sent by the bot itself.
168+ *
169+ * @param listener Listener.
170+ */
171+ inline void onPollAnswer (const PollAnswerListener& listener){
172+ _onPollAnswerListeners.push_back (listener);
173+ }
174+
175+ /* *
176+ * @brief Registers listener which receives the bot's chat member status if it was updated in a chat.
177+ * For private chats, this update is received only when the bot is blocked or unblocked by the user.
178+ *
179+ * @param listener Listener.
180+ */
181+ inline void onMyChatMember (const ChatMemberUpdatedListener& listener){
182+ _onMyChatMemberListeners.push_back (listener);
183+ }
184+
185+ /* *
186+ * @brief Registers listener which receives a status if a chat member's status was updated in a chat.
187+ * The bot must be an administrator in the chat and must explicitly specify “chat_member” in the list of allowedUpdates to receive these updates.
188+ *
189+ * @param listener Listener.
190+ */
191+ inline void onChatMember (const ChatMemberUpdatedListener& listener){
192+ _onChatMemberListeners.push_back (listener);
193+ }
194+
195+ /* *
196+ * @brief Registers listener which receives requests to join the chat.
197+ * The bot must have the canInviteUsers administrator right in the chat to receive these updates.
198+ *
199+ * @param listener Listener.
200+ */
201+ inline void onChatJoinRequest (const ChatJoinRequestListener& listener){
202+ _onChatJoinRequestListeners.push_back (listener);
203+ }
204+
113205private:
114206 template <typename ListenerType, typename ObjectType>
115207 inline void broadcast (const std::vector<ListenerType>& listeners, const ObjectType object) const {
@@ -142,6 +234,10 @@ friend EventHandler;
142234 broadcast<MessageListener, Message::Ptr>(_onNonCommandMessageListeners, message);
143235 }
144236
237+ inline void broadcastEditedMessage (const Message::Ptr& message) const {
238+ broadcast<MessageListener, Message::Ptr>(_onEditedMessageListeners, message);
239+ }
240+
145241 inline void broadcastInlineQuery (const InlineQuery::Ptr& query) const {
146242 broadcast<InlineQueryListener, InlineQuery::Ptr>(_onInlineQueryListeners, query);
147243 }
@@ -154,13 +250,49 @@ friend EventHandler;
154250 broadcast<CallbackQueryListener, CallbackQuery::Ptr>(_onCallbackQueryListeners, result);
155251 }
156252
253+ inline void broadcastShippingQuery (const ShippingQuery::Ptr& result) const {
254+ broadcast<ShippingQueryListener, ShippingQuery::Ptr>(_onShippingQueryListeners, result);
255+ }
256+
257+ inline void broadcastPreCheckoutQuery (const PreCheckoutQuery::Ptr& result) const {
258+ broadcast<PreCheckoutQueryListener, PreCheckoutQuery::Ptr>(_onPreCheckoutQueryListeners, result);
259+ }
260+
261+ inline void broadcastPoll (const Poll::Ptr& result) const {
262+ broadcast<PollListener, Poll::Ptr>(_onPollListeners, result);
263+ }
264+
265+ inline void broadcastPollAnswer (const PollAnswer::Ptr& result) const {
266+ broadcast<PollAnswerListener, PollAnswer::Ptr>(_onPollAnswerListeners, result);
267+ }
268+
269+ inline void broadcastMyChatMember (const ChatMemberUpdated::Ptr& result) const {
270+ broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onMyChatMemberListeners, result);
271+ }
272+
273+ inline void broadcastChatMember (const ChatMemberUpdated::Ptr& result) const {
274+ broadcast<ChatMemberUpdatedListener, ChatMemberUpdated::Ptr>(_onChatMemberListeners, result);
275+ }
276+
277+ inline void broadcastChatJoinRequest (const ChatJoinRequest::Ptr& result) const {
278+ broadcast<ChatJoinRequestListener, ChatJoinRequest::Ptr>(_onChatJoinRequestListeners, result);
279+ }
280+
157281 std::vector<MessageListener> _onAnyMessageListeners;
158282 std::unordered_map<std::string, MessageListener> _onCommandListeners;
159283 std::vector<MessageListener> _onUnknownCommandListeners;
160284 std::vector<MessageListener> _onNonCommandMessageListeners;
285+ std::vector<MessageListener> _onEditedMessageListeners;
161286 std::vector<InlineQueryListener> _onInlineQueryListeners;
162287 std::vector<ChosenInlineResultListener> _onChosenInlineResultListeners;
163288 std::vector<CallbackQueryListener> _onCallbackQueryListeners;
289+ std::vector<ShippingQueryListener> _onShippingQueryListeners;
290+ std::vector<PreCheckoutQueryListener> _onPreCheckoutQueryListeners;
291+ std::vector<PollListener> _onPollListeners;
292+ std::vector<PollAnswerListener> _onPollAnswerListeners;
293+ std::vector<ChatMemberUpdatedListener> _onMyChatMemberListeners;
294+ std::vector<ChatMemberUpdatedListener> _onChatMemberListeners;
295+ std::vector<ChatJoinRequestListener> _onChatJoinRequestListeners;
164296};
165297
166298}
0 commit comments