From e79d3b775e5cc462ca263862e3d3185c915bd5b8 Mon Sep 17 00:00:00 2001 From: Jannik <32801117+code1mountain@users.noreply.github.com> Date: Wed, 18 Nov 2020 15:11:47 +0100 Subject: [PATCH 1/6] Added is_verified and is_scam to User and Chat objects --- telegram-bot-api/Client.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 23008f7..f164b85 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -329,6 +329,12 @@ class Client::JsonUser : public Jsonable { if (user_info != nullptr && !user_info->language_code.empty()) { object("language_code", user_info->language_code); } + if (user_info != nullptr && user_info->is_verified) { + object("is_verified", td::JsonBool(user_info->is_verified)); + } + if (user_info != nullptr && user_info->is_scam) { + object("is_scam", td::JsonBool(user_info->is_scam)); + } if (is_bot && full_bot_info_) { object("can_join_groups", td::JsonBool(user_info->can_join_groups)); object("can_read_all_group_messages", td::JsonBool(user_info->can_read_all_group_messages)); @@ -582,6 +588,12 @@ class Client::JsonChat : public Jsonable { object("username", user_info->username); } object("type", "private"); + if (user_info->is_verified) { + object("is_verified", td::JsonBool(user_info->is_verified)); + } + if (user_info->is_scam) { + object("is_scam", td::JsonBool(user_info->is_scam)); + } if (is_full_) { if (!user_info->bio.empty()) { object("bio", user_info->bio); @@ -627,6 +639,12 @@ class Client::JsonChat : public Jsonable { } else { object("type", "channel"); } + if (supergroup_info->is_verified) { + object("is_verified", td::JsonBool(supergroup_info->is_verified)); + } + if (supergroup_info->is_scam) { + object("is_scam", td::JsonBool(supergroup_info->is_scam)); + } if (is_full_) { if (!supergroup_info->description.empty()) { object("description", supergroup_info->description); @@ -7934,6 +7952,8 @@ void Client::add_user(std::unordered_map &users, object_ptrlast_name = user->last_name_; user_info->username = user->username_; user_info->language_code = user->language_code_; + user_info->is_verified = user->is_verified_; + user_info->is_scam = user->is_scam_; user_info->have_access = user->have_access_; @@ -8003,6 +8023,8 @@ void Client::add_supergroup(std::unordered_map &supergrou supergroup_info->status = std::move(supergroup->status_); supergroup_info->is_supergroup = !supergroup->is_channel_; supergroup_info->has_location = supergroup->has_location_; + supergroup_info->is_verified = supergroup->is_verified_; + supergroup_info->is_scam = supergroup->is_scam_; } void Client::set_supergroup_description(int32 supergroup_id, td::string &&descripton) { From 1b6bb14ff618c67f3b467ada13bc6597100f066a Mon Sep 17 00:00:00 2001 From: Jannik <32801117+code1mountain@users.noreply.github.com> Date: Wed, 18 Nov 2020 15:12:32 +0100 Subject: [PATCH 2/6] Added is_verified and is_scam --- telegram-bot-api/Client.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index cc6a7a9..46dad90 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -556,6 +556,8 @@ class Client : public WebhookActor::Callback { td::string bio; + bool is_verified = false; + bool is_scam = false; bool have_access = false; bool can_join_groups = false; bool can_read_all_group_messages = false; @@ -592,6 +594,8 @@ class Client : public WebhookActor::Callback { bool is_supergroup = false; bool can_set_sticker_set = false; bool has_location = false; + bool is_verified = false; + bool is_scam = false; }; static void add_supergroup(std::unordered_map &supergroups, object_ptr &&supergroup); From 80e70157e0044c3d5f4410bdb26f376fabb27eed Mon Sep 17 00:00:00 2001 From: Jannik <32801117+code1mountain@users.noreply.github.com> Date: Wed, 18 Nov 2020 15:20:51 +0100 Subject: [PATCH 3/6] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index bd43e36..17ea624 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,16 @@ The `ChatMember` object now has two new fields: - `joined_date`: integer, unix timestamp, when has the user joined - `inviter`: `User`, the inviter +#### Object `Chat` +The `Chat` object now has two new fields: +- `is_verified`: bool, default false. Is the chat verified by Telegram, clients show a verified batch +- `is_scam`: bool, default false. Is the chat reported for scam, clients show a warning to the user + +#### Object `User` +The `User` object now has two new fields: +- `is_verified`: bool, default false. Is the user verified by Telegram, clients show a verified batch +- `is_scam`: bool, default false. Is the user reported for scam, clients show a warning to the user + In addition, the member list now shows the full bot list (previously only the bot that executed the query was shown) From e2470071996bf7ed8936c16e5aee433b38483be1 Mon Sep 17 00:00:00 2001 From: Jannik Date: Wed, 18 Nov 2020 07:04:03 -0800 Subject: [PATCH 4/6] Added ping command --- telegram-bot-api/Client.cpp | 32 ++++++++++++++++++++++++++++++++ telegram-bot-api/Client.h | 5 +++++ 2 files changed, 37 insertions(+) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 23008f7..fb19f64 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -256,6 +256,8 @@ bool Client::init_methods() { methods_.emplace("getparticipants", &Client::process_get_participants_query); methods_.emplace("deletemessages", &Client::process_delete_messages_query); methods_.emplace("togglegroupinvites", &Client::process_toggle_group_invites_query); + methods_.emplace("ping", &Client::process_ping_query); + return true; } @@ -3213,6 +3215,30 @@ class Client::TdOnSendCustomRequestCallback : public TdQueryCallback { PromisedQueryPtr query_; }; +//start custom callbacks impl + +class Client::TdOnPingCallback : public TdQueryCallback { + public: + TdOnPingCallback(PromisedQueryPtr query) + : query_(std::move(query)) { + } + + void on_result(object_ptr result) override { + if (result->get_id() == td_api::error::ID) { + return fail_query_with_error(std::move(query_), move_object_as(result), "Server not available"); + } + CHECK(result->get_id() == 959899022); // id for return type `seconds` + + auto seconds_ = move_object_as(result); + answer_query(td::VirtuallyJsonableString(std::to_string(seconds_->seconds_)), std::move(query_)); + } + + private: + PromisedQueryPtr query_; +}; + +//end custom callbacks impl + void Client::close() { need_close_ = true; if (td_client_.empty()) { @@ -7500,6 +7526,12 @@ td::Status Client::process_toggle_group_invites_query(PromisedQueryPtr &query) { return Status::OK(); } +td::Status Client::process_ping_query(PromisedQueryPtr &query) { + send_request(make_object(), + std::make_unique(std::move(query))); + return Status::OK(); +} + //end custom methods impl void Client::do_get_file(object_ptr file, PromisedQueryPtr query) { diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index cc6a7a9..4622244 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -178,6 +178,10 @@ class Client : public WebhookActor::Callback { class TdOnCancelDownloadFileCallback; class TdOnSendCustomRequestCallback; + //start custom callbacks + class TdOnPingCallback; + //end custom callbacks + void on_get_reply_message(int64 chat_id, object_ptr reply_to_message); void on_get_edited_message(object_ptr edited_message); @@ -492,6 +496,7 @@ class Client : public WebhookActor::Callback { Status process_get_participants_query(PromisedQueryPtr &query); Status process_delete_messages_query(PromisedQueryPtr &query); Status process_toggle_group_invites_query(PromisedQueryPtr &query); + Status process_ping_query(PromisedQueryPtr &query); void webhook_verified(td::string cached_ip_address) override; From f2daedea706b485504ef0ca99c206681d1df7022 Mon Sep 17 00:00:00 2001 From: Jannik <32801117+code1mountain@users.noreply.github.com> Date: Wed, 18 Nov 2020 16:10:55 +0100 Subject: [PATCH 5/6] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index bd43e36..6f032ab 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,15 @@ The maximum number of messages to be deleted in a single batch is determined by - `end` Last message id to delete ##### Returns `true` +#### Command `ping` +Send an MTProto ping message to the telegram servers. +Useful to detect the delay of the bot api server. + +##### Parameters +No parameters +##### Returns `string` +Ping delay in seconds represented as string. +