From 0f15affd95df70c74b8d9b29eb857146152d162e Mon Sep 17 00:00:00 2001 From: Florian Scheibner Date: Mon, 16 Nov 2015 14:56:02 +0100 Subject: Fix hide_keyboard and force_reply Messages --- include/tgbot/types/ForceReply.h | 2 +- include/tgbot/types/ReplyKeyboardHide.h | 2 +- src/TgTypeParser.cpp | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/tgbot/types/ForceReply.h b/include/tgbot/types/ForceReply.h index f46197a..8a946f8 100644 --- a/include/tgbot/types/ForceReply.h +++ b/include/tgbot/types/ForceReply.h @@ -50,7 +50,7 @@ public: /** * Optional. Use this parameter if you want to force reply from specific users only. Targets: 1) users that are @mentioned in the text of the Message object; 2) if the bot's message is a reply (has reply_to_message_id), sender of the original message. */ - bool selective; + bool selective = false; }; } diff --git a/include/tgbot/types/ReplyKeyboardHide.h b/include/tgbot/types/ReplyKeyboardHide.h index e4c4b20..acb0e5c 100644 --- a/include/tgbot/types/ReplyKeyboardHide.h +++ b/include/tgbot/types/ReplyKeyboardHide.h @@ -47,7 +47,7 @@ public: * Optional. Use this parameter if you want to hide keyboard for specific users only. Targets: 1) users that are @mentioned in the text of the Message object; 2) if the bot's message is a reply (has reply_to_message_id), sender of the original message. * Example: A user votes in a poll, bot returns confirmation message in reply to the vote and hides keyboard for that user, while still showing the keyboard with poll options to users who haven't voted yet. */ - bool selective; + bool selective = false; }; } diff --git a/src/TgTypeParser.cpp b/src/TgTypeParser.cpp index 141aebd..6586ec6 100644 --- a/src/TgTypeParser.cpp +++ b/src/TgTypeParser.cpp @@ -404,6 +404,7 @@ std::string TgTypeParser::parseReplyKeyboardHide(const ReplyKeyboardHide::Ptr& o } string result; result += '{'; + appendToJson(result, "hide_keyboard", object->hideKeyboard); appendToJson(result, "selective", object->selective); result.erase(result.length() - 1); result += '}'; @@ -422,6 +423,7 @@ std::string TgTypeParser::parseForceReply(const ForceReply::Ptr& object) const { } string result; result += '{'; + appendToJson(result, "force_reply", object->forceReply); appendToJson(result, "selective", object->selective); result.erase(result.length() - 1); result += '}'; -- cgit v1.2.3 From 14a6f4867ec74fbacdd93e888fb13c28aa637419 Mon Sep 17 00:00:00 2001 From: Florian Scheibner Date: Mon, 16 Nov 2015 14:57:53 +0100 Subject: Fix command parsing with @ for example /help@bot didn't work before --- include/tgbot/EventHandler.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/include/tgbot/EventHandler.h b/include/tgbot/EventHandler.h index e4fac7a..bb277a8 100644 --- a/include/tgbot/EventHandler.h +++ b/include/tgbot/EventHandler.h @@ -38,13 +38,21 @@ public: inline void handleUpdate(const Update::Ptr& update) const { _broadcaster->broadcastAnyMessage(update->message); if (StringTools::startsWith(update->message->text, "/")) { + unsigned long splitPosition; unsigned long spacePosition = update->message->text.find(' '); - std::string command; - if (spacePosition != update->message->text.npos) { - command = update->message->text.substr(1, spacePosition - 1); + unsigned long atSymbolPosition = update->message->text.find('@'); + if (spacePosition == update->message->text.npos) { + if (atSymbolPosition == update->message->text.npos) { + splitPosition = update->message->text.size(); + } else { + splitPosition = atSymbolPosition; + } + } else if (atSymbolPosition == update->message->text.npos) { + splitPosition = spacePosition; } else { - command = update->message->text.substr(1, update->message->text.size() - 1); + splitPosition = std::min(spacePosition, atSymbolPosition); } + std::string command = update->message->text.substr(1, splitPosition - 1); if (!_broadcaster->broadcastCommand(command, update->message)) { _broadcaster->broadcastUnknownCommand(update->message); } -- cgit v1.2.3