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) {
@@ -43,21 +55,30 @@ friend EventHandler;
4355 /* *
4456 * @brief Registers listener which receives all messages with commands (messages with leading '/' char).
4557 * @param commandName Command name which listener can handle.
46- * @param listener Listener.
58+ * @param listener Listener. Pass nullptr to remove listener of command
4759 */
4860 inline void onCommand (const std::string& commandName, const MessageListener& listener) {
49- _onCommandListeners[commandName] = listener;
61+ if (listener) {
62+ _onCommandListeners[commandName] = listener;
63+ } else {
64+ _onCommandListeners.erase (commandName);
65+ }
5066 }
5167
5268 /* *
5369 * @brief Registers listener which receives all messages with commands (messages with leading '/' char).
5470 * @param commandsList Commands names which listener can handle.
55- * @param listener Listener.
71+ * @param listener Listener. Pass nullptr to remove listener of commands
5672 */
5773 inline void onCommand (const std::initializer_list<std::string>& commandsList, const MessageListener& listener) {
58- for (const auto & command : commandsList)
59- {
60- _onCommandListeners[command] = listener;
74+ if (listener) {
75+ for (const auto & command : commandsList) {
76+ _onCommandListeners[command] = listener;
77+ }
78+ } else {
79+ for (const auto & command : commandsList) {
80+ _onCommandListeners.erase (command);
81+ }
6182 }
6283 }
6384
@@ -78,25 +99,109 @@ friend EventHandler;
7899 }
79100
80101 /* *
81- * @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
82111 * @param listener Listener.
83112 */
84113 inline void onInlineQuery (const InlineQueryListener& listener) {
85114 _onInlineQueryListeners.push_back (listener);
86115 }
87116
88117 /* *
89- * @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+ *
90121 * @param listener Listener.
91122 */
92123 inline void onChosenInlineResult (const ChosenInlineResultListener& listener){
93124 _onChosenInlineResultListeners.push_back (listener);
94125 }
95126
127+ /* *
128+ * @brief Registers listener which receives new incoming callback queries
129+ * @param listener Listener.
130+ */
96131 inline void onCallbackQuery (const CallbackQueryListener& listener){
97132 _onCallbackQueryListeners.push_back (listener);
98133 }
99134
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+
100205private:
101206 template <typename ListenerType, typename ObjectType>
102207 inline void broadcast (const std::vector<ListenerType>& listeners, const ObjectType object) const {
@@ -129,6 +234,10 @@ friend EventHandler;
129234 broadcast<MessageListener, Message::Ptr>(_onNonCommandMessageListeners, message);
130235 }
131236
237+ inline void broadcastEditedMessage (const Message::Ptr& message) const {
238+ broadcast<MessageListener, Message::Ptr>(_onEditedMessageListeners, message);
239+ }
240+
132241 inline void broadcastInlineQuery (const InlineQuery::Ptr& query) const {
133242 broadcast<InlineQueryListener, InlineQuery::Ptr>(_onInlineQueryListeners, query);
134243 }
@@ -141,13 +250,49 @@ friend EventHandler;
141250 broadcast<CallbackQueryListener, CallbackQuery::Ptr>(_onCallbackQueryListeners, result);
142251 }
143252
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+
144281 std::vector<MessageListener> _onAnyMessageListeners;
145282 std::unordered_map<std::string, MessageListener> _onCommandListeners;
146283 std::vector<MessageListener> _onUnknownCommandListeners;
147284 std::vector<MessageListener> _onNonCommandMessageListeners;
285+ std::vector<MessageListener> _onEditedMessageListeners;
148286 std::vector<InlineQueryListener> _onInlineQueryListeners;
149287 std::vector<ChosenInlineResultListener> _onChosenInlineResultListeners;
150288 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;
151296};
152297
153298}
0 commit comments