mirror of
https://github.com/UltraCoderRU/telebotxx.git
synced 2026-01-28 12:15:13 +00:00
Changed Updates hierarchy.
ChannelPost and EditedChannelPost now supported.
This commit is contained in:
parent
014411a8a3
commit
79ea1a08a1
5 changed files with 39 additions and 55 deletions
|
|
@ -81,6 +81,7 @@ public:
|
||||||
/// \param limit maximum number of updates to be retrieved
|
/// \param limit maximum number of updates to be retrieved
|
||||||
/// \param timeout timeout in seconds for long polling
|
/// \param timeout timeout in seconds for long polling
|
||||||
/// \return Updates (vector of Update)
|
/// \return Updates (vector of Update)
|
||||||
|
/// \todo allowed_updates
|
||||||
Updates getUpdates(int offset = 0, unsigned short limit = 0, unsigned timeout = 0);
|
Updates getUpdates(int offset = 0, unsigned short limit = 0, unsigned timeout = 0);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ public:
|
||||||
enum class Type
|
enum class Type
|
||||||
{
|
{
|
||||||
Message,
|
Message,
|
||||||
EditedMessage,
|
|
||||||
InlineQuery,
|
InlineQuery,
|
||||||
ChosenInlineResult,
|
ChosenInlineResult,
|
||||||
CallbackQuery
|
CallbackQuery
|
||||||
|
|
@ -41,34 +40,30 @@ using Updates = std::vector<UpdatePtr>;
|
||||||
class MessageUpdate : public Update
|
class MessageUpdate : public Update
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MessageUpdate(int id, const Message& message);
|
enum class MessageType
|
||||||
|
{
|
||||||
|
Message,
|
||||||
|
EditedMessage,
|
||||||
|
ChannelPost,
|
||||||
|
EditedChannelPost
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageUpdate(int id, MessageType type, const Message& message);
|
||||||
MessageUpdate(const MessageUpdate&);
|
MessageUpdate(const MessageUpdate&);
|
||||||
MessageUpdate(MessageUpdate&&);
|
MessageUpdate(MessageUpdate&&);
|
||||||
~MessageUpdate();
|
~MessageUpdate();
|
||||||
|
|
||||||
|
MessageType getMessageType() const;
|
||||||
const Message& getMessage() const;
|
const Message& getMessage() const;
|
||||||
|
|
||||||
void swap(MessageUpdate& other) noexcept;
|
void swap(MessageUpdate& other) noexcept;
|
||||||
|
|
||||||
const MessageUpdate& operator=(MessageUpdate other);
|
const MessageUpdate& operator=(MessageUpdate other);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
MessageType type_;
|
||||||
Message message_;
|
Message message_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class EditedMessageUpdate : public MessageUpdate
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
EditedMessageUpdate(int id, const Message& message);
|
|
||||||
EditedMessageUpdate(const EditedMessageUpdate&);
|
|
||||||
EditedMessageUpdate(EditedMessageUpdate&&);
|
|
||||||
~EditedMessageUpdate();
|
|
||||||
|
|
||||||
void swap(EditedMessageUpdate& other) noexcept;
|
|
||||||
|
|
||||||
const EditedMessageUpdate& operator=(EditedMessageUpdate other);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // TELEBOTXX_UPDATE_HPP
|
#endif // TELEBOTXX_UPDATE_HPP
|
||||||
|
|
|
||||||
|
|
@ -249,18 +249,23 @@ std::unique_ptr<Chat> parseChat(const rapidjson::Value& parent, const char* name
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \todo Other updates
|
||||||
std::unique_ptr<Update> parseUpdate(const rapidjson::Value& obj)
|
std::unique_ptr<Update> parseUpdate(const rapidjson::Value& obj)
|
||||||
{
|
{
|
||||||
int id = parse<int>(obj, "update_id", REQUIRED);
|
int id = parse<int>(obj, "update_id", REQUIRED);
|
||||||
|
|
||||||
std::unique_ptr<Message> message;
|
std::unique_ptr<Message> message;
|
||||||
if ((message = parseMessage(obj, "message", OPTIONAL)))
|
if ((message = parseMessage(obj, "message", OPTIONAL)))
|
||||||
return std::make_unique<MessageUpdate>(id, *message);
|
return std::make_unique<MessageUpdate>(id, MessageUpdate::MessageType::Message, *message);
|
||||||
else if ((message = parseMessage(obj, "edited_message", OPTIONAL)))
|
else if ((message = parseMessage(obj, "edited_message", OPTIONAL)))
|
||||||
return std::make_unique<EditedMessageUpdate>(id, *message);
|
return std::make_unique<MessageUpdate>(id, MessageUpdate::MessageType::EditedMessage, *message);
|
||||||
/// \todo: other updates
|
else if ((message = parseMessage(obj, "channel_post", OPTIONAL)))
|
||||||
|
return std::make_unique<MessageUpdate>(id, MessageUpdate::MessageType::ChannelPost, *message);
|
||||||
|
else if ((message = parseMessage(obj, "edited_channel_post", OPTIONAL)))
|
||||||
|
return std::make_unique<MessageUpdate>(id, MessageUpdate::MessageType::EditedChannelPost, *message);
|
||||||
else
|
else
|
||||||
throw ParseError("Unknown update type");
|
///throw ParseError("Unknown update type");
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Updates> parseUpdates(const rapidjson::Value& parent, const char* name, bool required)
|
std::unique_ptr<Updates> parseUpdates(const rapidjson::Value& parent, const char* name, bool required)
|
||||||
|
|
@ -269,12 +274,9 @@ std::unique_ptr<Updates> parseUpdates(const rapidjson::Value& parent, const char
|
||||||
auto& obj = parseArray(parent, name, required, found);
|
auto& obj = parseArray(parent, name, required, found);
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
std::vector<UpdatePtr> updates;
|
Updates updates;
|
||||||
for (auto& elem : obj.GetArray())
|
for (auto& elem : obj.GetArray())
|
||||||
{
|
updates.emplace_back(parseUpdate(elem));
|
||||||
auto update = parseUpdate(elem);
|
|
||||||
updates.emplace_back(std::move(update));
|
|
||||||
}
|
|
||||||
return std::make_unique<Updates>(std::move(updates));
|
return std::make_unique<Updates>(std::move(updates));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,8 @@ void Update::swap(Update& other) noexcept
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
MessageUpdate::MessageUpdate(int id, const Message& message)
|
MessageUpdate::MessageUpdate(int id, MessageType type, const Message& message)
|
||||||
: Update(id, Type::Message),
|
: Update(id, Type::Message), type_(type), message_(message)
|
||||||
message_(message)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,6 +40,11 @@ MessageUpdate::MessageUpdate(const MessageUpdate&) = default;
|
||||||
MessageUpdate::MessageUpdate(MessageUpdate&&) = default;
|
MessageUpdate::MessageUpdate(MessageUpdate&&) = default;
|
||||||
MessageUpdate::~MessageUpdate() = default;
|
MessageUpdate::~MessageUpdate() = default;
|
||||||
|
|
||||||
|
MessageUpdate::MessageType MessageUpdate::getMessageType() const
|
||||||
|
{
|
||||||
|
return type_;
|
||||||
|
}
|
||||||
|
|
||||||
const Message& MessageUpdate::getMessage() const
|
const Message& MessageUpdate::getMessage() const
|
||||||
{
|
{
|
||||||
return message_;
|
return message_;
|
||||||
|
|
@ -59,26 +63,4 @@ const MessageUpdate& MessageUpdate::operator=(MessageUpdate other)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
EditedMessageUpdate::EditedMessageUpdate(int id, const Message& message)
|
|
||||||
: MessageUpdate(id, message)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
EditedMessageUpdate::EditedMessageUpdate(const EditedMessageUpdate&) = default;
|
|
||||||
EditedMessageUpdate::EditedMessageUpdate(EditedMessageUpdate&&) = default;
|
|
||||||
EditedMessageUpdate::~EditedMessageUpdate() = default;
|
|
||||||
|
|
||||||
void EditedMessageUpdate::swap(EditedMessageUpdate& other) noexcept
|
|
||||||
{
|
|
||||||
MessageUpdate::swap(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
const EditedMessageUpdate& EditedMessageUpdate::operator=(EditedMessageUpdate other)
|
|
||||||
{
|
|
||||||
swap(other);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -206,12 +206,16 @@ BOOST_AUTO_TEST_SUITE(TestBotApi)
|
||||||
BOOST_REQUIRE_NO_THROW(updates = bot->getUpdates());
|
BOOST_REQUIRE_NO_THROW(updates = bot->getUpdates());
|
||||||
for (auto update : updates)
|
for (auto update : updates)
|
||||||
{
|
{
|
||||||
if (update->getType() == Update::Type::Message)
|
switch (update->getType())
|
||||||
|
{
|
||||||
|
case Update::Type::Message:
|
||||||
{
|
{
|
||||||
auto& message = std::dynamic_pointer_cast<MessageUpdate>(update)->getMessage();
|
auto& message = std::dynamic_pointer_cast<MessageUpdate>(update)->getMessage();
|
||||||
if (message.getFrom())
|
if (message.getFrom())
|
||||||
std::cout << *message.getFrom() << ": ";
|
std::cout << *message.getFrom() << ": ";
|
||||||
std::cout << message.getText() << std::endl;
|
std::cout << message.getText() << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue