aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2020-12-08 03:57:25 +0300
committerlevlam <levlam@telegram.org>2020-12-08 03:57:25 +0300
commit8cc6d61d39989a20987c19eccc906ee26ec3b80d (patch)
tree3601f0582d64cb68524a1465dc2910ee7df60b87
parente184e6c117ef18bb7114429cce11afc87914c362 (diff)
Add the field InlineQuery.chat_type, which can be sent by the server in the distant future.
-rw-r--r--telegram-bot-api/Client.cpp58
-rw-r--r--telegram-bot-api/Client.h2
2 files changed, 46 insertions, 14 deletions
diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp
index cc46212..dd507a2 100644
--- a/telegram-bot-api/Client.cpp
+++ b/telegram-bot-api/Client.cpp
@@ -1798,10 +1798,12 @@ class Client::JsonMessageId : public Jsonable {
class Client::JsonInlineQuery : public Jsonable {
public:
JsonInlineQuery(int64 inline_query_id, int32 sender_user_id, const td_api::location *user_location,
- const td::string &query, const td::string &offset, const Client *client)
+ const td_api::ChatType *chat_type, const td::string &query, const td::string &offset,
+ const Client *client)
: inline_query_id_(inline_query_id)
, sender_user_id_(sender_user_id)
, user_location_(user_location)
+ , chat_type_(chat_type)
, query_(query)
, offset_(offset)
, client_(client) {
@@ -1814,6 +1816,35 @@ class Client::JsonInlineQuery : public Jsonable {
if (user_location_ != nullptr) {
object("location", JsonLocation(user_location_));
}
+ if (chat_type_ != nullptr) {
+ auto chat_type = [&] {
+ switch (chat_type_->get_id()) {
+ case td_api::chatTypePrivate::ID: {
+ auto type = static_cast<const td_api::chatTypePrivate *>(chat_type_);
+ if (type->user_id_ == sender_user_id_) {
+ return "sender";
+ }
+ return "private";
+ }
+ case td_api::chatTypeBasicGroup::ID:
+ return "group";
+ case td_api::chatTypeSupergroup::ID: {
+ auto type = static_cast<const td_api::chatTypeSupergroup *>(chat_type_);
+ if (type->is_channel_) {
+ return "channel";
+ } else {
+ return "supergroup";
+ }
+ }
+ case td_api::chatTypeSecret::ID:
+ return "";
+ default:
+ UNREACHABLE();
+ return "";
+ }
+ }();
+ object("chat_type", chat_type);
+ }
object("query", query_);
object("offset", offset_);
}
@@ -1822,6 +1853,7 @@ class Client::JsonInlineQuery : public Jsonable {
int64 inline_query_id_;
int32 sender_user_id_;
const td_api::location *user_location_;
+ const td_api::ChatType *chat_type_;
const td::string &query_;
const td::string &offset_;
const Client *client_;
@@ -3952,33 +3984,32 @@ void Client::on_update(object_ptr<td_api::Object> result) {
bool need_warning = false;
switch (chat->type_->get_id()) {
case td_api::chatTypePrivate::ID: {
- auto info = move_object_as<td_api::chatTypePrivate>(chat->type_);
+ auto type = move_object_as<td_api::chatTypePrivate>(chat->type_);
chat_info->type = ChatInfo::Type::Private;
- auto user_id = info->user_id_;
+ auto user_id = type->user_id_;
chat_info->user_id = user_id;
need_warning = get_user_info(user_id) == nullptr;
break;
}
case td_api::chatTypeBasicGroup::ID: {
- auto info = move_object_as<td_api::chatTypeBasicGroup>(chat->type_);
+ auto type = move_object_as<td_api::chatTypeBasicGroup>(chat->type_);
chat_info->type = ChatInfo::Type::Group;
- auto group_id = info->basic_group_id_;
+ auto group_id = type->basic_group_id_;
chat_info->group_id = group_id;
need_warning = get_group_info(group_id) == nullptr;
break;
}
case td_api::chatTypeSupergroup::ID: {
- auto info = move_object_as<td_api::chatTypeSupergroup>(chat->type_);
+ auto type = move_object_as<td_api::chatTypeSupergroup>(chat->type_);
chat_info->type = ChatInfo::Type::Supergroup;
- auto supergroup_id = info->supergroup_id_;
+ auto supergroup_id = type->supergroup_id_;
chat_info->supergroup_id = supergroup_id;
need_warning = get_supergroup_info(supergroup_id) == nullptr;
break;
}
- case td_api::chatTypeSecret::ID: {
+ case td_api::chatTypeSecret::ID:
// unsupported
break;
- }
default:
UNREACHABLE();
}
@@ -4108,8 +4139,8 @@ void Client::on_update(object_ptr<td_api::Object> result) {
break;
case td_api::updateNewInlineQuery::ID: {
auto update = move_object_as<td_api::updateNewInlineQuery>(result);
- add_new_inline_query(update->id_, update->sender_user_id_, std::move(update->user_location_), update->query_,
- update->offset_);
+ add_new_inline_query(update->id_, update->sender_user_id_, std::move(update->user_location_),
+ std::move(update->chat_type_), update->query_, update->offset_);
break;
}
case td_api::updateNewChosenInlineResult::ID: {
@@ -8149,9 +8180,10 @@ void Client::add_update_poll_answer(object_ptr<td_api::updatePollAnswer> &&updat
}
void Client::add_new_inline_query(int64 inline_query_id, int32 sender_user_id, object_ptr<td_api::location> location,
- const td::string &query, const td::string &offset) {
+ object_ptr<td_api::ChatType> chat_type, const td::string &query,
+ const td::string &offset) {
add_update(UpdateType::InlineQuery,
- JsonInlineQuery(inline_query_id, sender_user_id, location.get(), query, offset, this), 30,
+ JsonInlineQuery(inline_query_id, sender_user_id, location.get(), chat_type.get(), query, offset, this), 30,
sender_user_id + (static_cast<int64>(1) << 33));
}
diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h
index 9273b96..7ed3737 100644
--- a/telegram-bot-api/Client.h
+++ b/telegram-bot-api/Client.h
@@ -719,7 +719,7 @@ class Client : public WebhookActor::Callback {
void add_update_poll_answer(object_ptr<td_api::updatePollAnswer> &&update);
void add_new_inline_query(int64 inline_query_id, int32 sender_user_id, object_ptr<td_api::location> location,
- const td::string &query, const td::string &offset);
+ object_ptr<td_api::ChatType> chat_type, const td::string &query, const td::string &offset);
void add_new_chosen_inline_result(int32 sender_user_id, object_ptr<td_api::location> location,
const td::string &query, const td::string &result_id,