Merge version 7.1

This commit is contained in:
David Guillen Fandos 2024-09-07 14:01:28 +02:00
commit 345fe067e4
7 changed files with 188 additions and 70 deletions

View File

@ -6,7 +6,7 @@ if (POLICY CMP0065)
cmake_policy(SET CMP0065 NEW)
endif()
project(TelegramBotApi VERSION 7.0 LANGUAGES CXX)
project(TelegramBotApi VERSION 7.1 LANGUAGES CXX)
if (POLICY CMP0069)
option(TELEGRAM_BOT_API_ENABLE_LTO "Use \"ON\" to enable Link Time Optimization.")

2
td

@ -1 +1 @@
Subproject commit 27c3eaeb4964bd5f18d8488e354abde1a4383e49
Subproject commit d93a99e3351db82573d765ce4f5e84714c277518

View File

@ -264,6 +264,10 @@ paths:
last_name:
description: The last name of the user; 0-64 characters.
type: string
disable_notification:
description: Disables "user joined Telegram" notification for other users that have the contact in their contact list.
default: false
type: boolean
required:
- first_name
multipart/form-data:
@ -276,6 +280,10 @@ paths:
last_name:
description: The last name of the user; 0-64 characters.
type: string
disable_notification:
description: Disables "user joined Telegram" notification for other users that have the contact in their contact list.
default: false
type: boolean
required:
- first_name
application/json:
@ -288,6 +296,10 @@ paths:
last_name:
description: The last name of the user; 0-64 characters.
type: string
disable_notification:
description: Disables "user joined Telegram" notification for other users that have the contact in their contact list.
default: false
type: boolean
required:
- first_name
required: true

View File

@ -929,6 +929,14 @@ class Client::JsonChat final : public td::Jsonable {
LOG(ERROR) << "Not found chat sticker set " << supergroup_info->sticker_set_id;
}
}
if (supergroup_info->custom_emoji_sticker_set_id != 0) {
auto sticker_set_name = client_->get_sticker_set_name(supergroup_info->custom_emoji_sticker_set_id);
if (!sticker_set_name.empty()) {
object("custom_emoji_sticker_set_name", sticker_set_name);
} else {
LOG(ERROR) << "Not found chat custom emoji sticker set " << supergroup_info->custom_emoji_sticker_set_id;
}
}
if (supergroup_info->can_set_sticker_set) {
object("can_set_sticker_set", td::JsonTrue());
}
@ -953,6 +961,9 @@ class Client::JsonChat final : public td::Jsonable {
if (supergroup_info->slow_mode_delay != 0) {
object("slow_mode_delay", supergroup_info->slow_mode_delay);
}
if (supergroup_info->unrestrict_boost_count != 0) {
object("unrestrict_boost_count", supergroup_info->unrestrict_boost_count);
}
if (supergroup_info->linked_chat_id != 0) {
object("linked_chat_id", supergroup_info->linked_chat_id);
}
@ -1703,6 +1714,23 @@ class Client::JsonPollAnswer final : public td::Jsonable {
const Client *client_;
};
class Client::JsonStory final : public td::Jsonable {
public:
JsonStory(int64 chat_id, int32 story_id, const Client *client)
: chat_id_(chat_id), story_id_(story_id), client_(client) {
}
void store(td::JsonValueScope *scope) const {
auto object = scope->enter_object();
object("chat", JsonChat(chat_id_, client_));
object("id", story_id_);
}
private:
int64 chat_id_;
int32 story_id_;
const Client *client_;
};
class Client::JsonForumTopicCreated final : public td::Jsonable {
public:
explicit JsonForumTopicCreated(const td_api::messageForumTopicCreated *forum_topic_created)
@ -2193,6 +2221,19 @@ class Client::JsonGiveawayCompleted final : public td::Jsonable {
const Client *client_;
};
class Client::JsonChatBoostAdded final : public td::Jsonable {
public:
JsonChatBoostAdded(const td_api::messageChatBoost *chat_boost) : chat_boost_(chat_boost) {
}
void store(td::JsonValueScope *scope) const {
auto object = scope->enter_object();
object("boost_count", chat_boost_->boost_count_);
}
private:
const td_api::messageChatBoost *chat_boost_;
};
class Client::JsonWebAppInfo final : public td::Jsonable {
public:
explicit JsonWebAppInfo(const td::string &url) : url_(url) {
@ -2488,6 +2529,9 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
if (!message_->author_signature.empty()) {
object("author_signature", message_->author_signature);
}
if (message_->sender_boost_count != 0) {
object("sender_boost_count", message_->sender_boost_count);
}
if (message_->sender_chat_id != 0) {
object("sender_chat", JsonChat(message_->sender_chat_id, client_));
}
@ -2572,6 +2616,10 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
if (message_->reply_to_message != nullptr && message_->reply_to_message->quote_ != nullptr) {
object("quote", JsonTextQuote(message_->reply_to_message->quote_.get(), client_));
}
if (message_->reply_to_story != nullptr) {
object("reply_to_story",
JsonStory(message_->reply_to_story->story_sender_chat_id_, message_->reply_to_story->story_id_, client_));
}
if (message_->media_album_id != 0) {
object("media_group_id", td::to_string(message_->media_album_id));
}
@ -2822,6 +2870,10 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
break;
case td_api::messageExpiredVideo::ID:
break;
case td_api::messageExpiredVideoNote::ID:
break;
case td_api::messageExpiredVoiceNote::ID:
break;
case td_api::messageCustomServiceAction::ID:
break;
case td_api::messageChatSetTheme::ID:
@ -2903,9 +2955,11 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
object("chat_shared", JsonChatShared(content));
break;
}
case td_api::messageStory::ID:
object("story", JsonEmptyObject());
case td_api::messageStory::ID: {
auto content = static_cast<const td_api::messageStory *>(message_->content.get());
object("story", JsonStory(content->story_sender_chat_id_, content->story_id_, client_));
break;
}
case td_api::messageChatSetBackground::ID:
break;
case td_api::messagePremiumGiftCode::ID:
@ -2928,6 +2982,11 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const {
object("giveaway_completed", JsonGiveawayCompleted(content, message_->chat_id, client_));
break;
}
case td_api::messageChatBoost::ID: {
auto content = static_cast<const td_api::messageChatBoost *>(message_->content.get());
object("boost_added", JsonChatBoostAdded(content));
break;
}
default:
UNREACHABLE();
}
@ -4807,6 +4866,36 @@ class Client::TdOnGetStickerSetCallback final : public TdQueryCallback {
int64 new_message_chat_id_;
};
class Client::TdOnGetChatCustomEmojiStickerSetCallback final : public TdQueryCallback {
public:
TdOnGetChatCustomEmojiStickerSetCallback(Client *client, int64 chat_id, int64 pinned_message_id,
PromisedQueryPtr query)
: client_(client), chat_id_(chat_id), pinned_message_id_(pinned_message_id), query_(std::move(query)) {
}
void on_result(object_ptr<td_api::Object> result) final {
auto chat_info = client_->get_chat(chat_id_);
CHECK(chat_info != nullptr);
CHECK(chat_info->type == ChatInfo::Type::Supergroup);
auto supergroup_info = client_->add_supergroup_info(chat_info->supergroup_id);
if (result->get_id() == td_api::error::ID) {
supergroup_info->custom_emoji_sticker_set_id = 0;
} else {
CHECK(result->get_id() == td_api::stickerSet::ID);
auto sticker_set = move_object_as<td_api::stickerSet>(result);
client_->on_get_sticker_set_name(sticker_set->id_, sticker_set->name_);
}
answer_query(JsonChat(chat_id_, client_, true, pinned_message_id_), std::move(query_));
}
private:
Client *client_;
int64 chat_id_;
int64 pinned_message_id_;
PromisedQueryPtr query_;
};
class Client::TdOnGetChatStickerSetCallback final : public TdQueryCallback {
public:
TdOnGetChatStickerSetCallback(Client *client, int64 chat_id, int64 pinned_message_id, PromisedQueryPtr query)
@ -4814,17 +4903,25 @@ class Client::TdOnGetChatStickerSetCallback final : public TdQueryCallback {
}
void on_result(object_ptr<td_api::Object> result) final {
auto chat_info = client_->get_chat(chat_id_);
CHECK(chat_info != nullptr);
CHECK(chat_info->type == ChatInfo::Type::Supergroup);
auto supergroup_info = client_->add_supergroup_info(chat_info->supergroup_id);
if (result->get_id() == td_api::error::ID) {
auto chat_info = client_->get_chat(chat_id_);
CHECK(chat_info != nullptr);
CHECK(chat_info->type == ChatInfo::Type::Supergroup);
client_->add_supergroup_info(chat_info->supergroup_id)->sticker_set_id = 0;
supergroup_info->sticker_set_id = 0;
} else {
CHECK(result->get_id() == td_api::stickerSet::ID);
auto sticker_set = move_object_as<td_api::stickerSet>(result);
client_->on_get_sticker_set_name(sticker_set->id_, sticker_set->name_);
}
auto sticker_set_id = supergroup_info->custom_emoji_sticker_set_id;
if (sticker_set_id != 0 && client_->get_sticker_set_name(sticker_set_id).empty()) {
return client_->send_request(make_object<td_api::getStickerSet>(sticker_set_id),
td::make_unique<TdOnGetChatCustomEmojiStickerSetCallback>(
client_, chat_id_, pinned_message_id_, std::move(query_)));
}
answer_query(JsonChat(chat_id_, client_, true, pinned_message_id_), std::move(query_));
}
@ -4870,6 +4967,13 @@ class Client::TdOnGetChatPinnedMessageCallback final : public TdQueryCallback {
make_object<td_api::getStickerSet>(sticker_set_id),
td::make_unique<TdOnGetChatStickerSetCallback>(client_, chat_id_, pinned_message_id, std::move(query_)));
}
sticker_set_id = supergroup_info->custom_emoji_sticker_set_id;
if (sticker_set_id != 0 && client_->get_sticker_set_name(sticker_set_id).empty()) {
return client_->send_request(make_object<td_api::getStickerSet>(sticker_set_id),
td::make_unique<TdOnGetChatCustomEmojiStickerSetCallback>(
client_, chat_id_, pinned_message_id, std::move(query_)));
}
}
answer_query(JsonChat(chat_id_, client_, true, pinned_message_id), std::move(query_));
@ -5703,6 +5807,7 @@ ServerBotInfo Client::get_bot_info() const {
}
void Client::start_up() {
CHECK(start_time_ < 1e-10);
start_time_ = td::Time::now();
next_bot_updates_warning_time_ = start_time_ + 600;
webhook_set_time_ = start_time_;
@ -6435,39 +6540,6 @@ void Client::on_update_authorization_state() {
CHECK(authorization_state_ != nullptr);
switch (authorization_state_->get_id()) {
case td_api::authorizationStateWaitTdlibParameters::ID: {
send_request(
make_object<td_api::setOption>("ignore_inline_thumbnails", make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("reuse_uploaded_photos_by_hash",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(
make_object<td_api::setOption>("disable_network_statistics", make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("disable_time_adjustment_protection",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(
make_object<td_api::setOption>("disable_minithumbnails", make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(
make_object<td_api::setOption>("disable_document_filenames", make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(
make_object<td_api::setOption>("disable_notifications", make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("ignore_update_chat_last_message",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("ignore_update_chat_read_inbox",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("ignore_update_user_chat_action",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("ignore_server_deletes_and_reads",
make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
send_request(make_object<td_api::setOption>("delete_chat_reference_after_seconds",
make_object<td_api::optionValueInteger>(3600)),
td::make_unique<TdOnOkCallback>());
@ -6479,6 +6551,15 @@ void Client::on_update_authorization_state() {
parameters_->file_expiration_timeout_seconds_)),
td::make_unique<TdOnOkCallback>());
for (td::string option : {"disable_network_statistics", "disable_time_adjustment_protection", "ignore_file_names",
"disable_minithumbnails", "disable_document_filenames", "disable_notifications",
"ignore_update_chat_last_message", "ignore_update_chat_read_inbox",
"ignore_update_user_chat_action", "ignore_server_deletes_and_reads",
"ignore_inline_thumbnails", "reuse_uploaded_photos_by_hash", "use_storage_optimizer"}) {
send_request(make_object<td_api::setOption>(option, make_object<td_api::optionValueBoolean>(true)),
td::make_unique<TdOnOkCallback>());
}
auto request = make_object<td_api::setTdlibParameters>();
request->use_test_dc_ = is_test_dc_;
request->database_directory_ = dir_;
@ -6491,8 +6572,6 @@ void Client::on_update_authorization_state() {
request->system_language_code_ = "en";
request->device_model_ = "server";
request->application_version_ = parameters_->version_;
request->enable_storage_optimizer_ = true;
request->ignore_file_names_ = true;
return send_request(std::move(request), td::make_unique<TdOnInitCallback>(this));
}
@ -6811,7 +6890,8 @@ void Client::on_update(object_ptr<td_api::Object> result) {
auto group_info = add_group_info(group_id);
group_info->photo = std::move(full_info->photo_);
group_info->description = std::move(full_info->description_);
group_info->invite_link = full_info->invite_link_ != nullptr ? std::move(full_info->invite_link_->invite_link_) : td::string();
group_info->invite_link = std::move(
full_info->invite_link_ != nullptr ? std::move(full_info->invite_link_->invite_link_) : td::string());
break;
}
case td_api::updateSupergroup::ID: {
@ -6827,11 +6907,14 @@ void Client::on_update(object_ptr<td_api::Object> result) {
auto supergroup_info = add_supergroup_info(supergroup_id);
supergroup_info->photo = std::move(full_info->photo_);
supergroup_info->description = std::move(full_info->description_);
supergroup_info->invite_link = full_info->invite_link_ != nullptr ? std::move(full_info->invite_link_->invite_link_) : td::string();
supergroup_info->invite_link = std::move(
full_info->invite_link_ != nullptr ? std::move(full_info->invite_link_->invite_link_) : td::string());
supergroup_info->sticker_set_id = full_info->sticker_set_id_;
supergroup_info->custom_emoji_sticker_set_id = full_info->custom_emoji_sticker_set_id_;
supergroup_info->can_set_sticker_set = full_info->can_set_sticker_set_;
supergroup_info->is_all_history_available = full_info->is_all_history_available_;
supergroup_info->slow_mode_delay = full_info->slow_mode_delay_;
supergroup_info->unrestrict_boost_count = full_info->unrestrict_boost_count_;
supergroup_info->linked_chat_id = full_info->linked_chat_id_;
supergroup_info->location = std::move(full_info->location_);
supergroup_info->has_hidden_members = full_info->has_hidden_members_;
@ -7058,9 +7141,9 @@ void Client::finish_closing() {
auto timeout = [&] {
if (next_authorization_time_ <= 0.0) {
return 600.0;
return was_authorized_ && authorization_date_ < get_unix_time() - 1800 ? 1.0 : 1800.0;
}
return td::min(next_authorization_time_ - td::Time::now(), 600.0);
return td::min(next_authorization_time_ - td::Time::now(), 1800.0);
}();
set_timeout_in(timeout);
LOG(INFO) << "Keep client opened for " << timeout << " seconds";
@ -7121,6 +7204,9 @@ td::Result<Client::InputReplyParameters> Client::get_reply_parameters(td::JsonVa
return td::Status::Error(400, "Object expected as reply parameters");
}
auto &object = value.get_object();
if (object.field_count() == 0) {
return InputReplyParameters();
}
TRY_RESULT(chat_id, object.get_optional_string_field("chat_id"));
TRY_RESULT(message_id, object.get_required_int_field("message_id"));
TRY_RESULT(allow_sending_without_reply, object.get_optional_bool_field("allow_sending_without_reply"));
@ -8180,8 +8266,8 @@ td::Result<td_api::object_ptr<td_api::InputInlineQueryResult>> Client::get_inlin
}
if (input_message_content == nullptr) {
input_message_content = make_object<td_api::inputMessageVoiceNote>(nullptr, voice_note_duration,
"" /* waveform */, std::move(caption));
input_message_content = make_object<td_api::inputMessageVoiceNote>(
nullptr, voice_note_duration, "" /* waveform */, std::move(caption), nullptr);
}
return make_object<td_api::inputInlineQueryResultVoiceNote>(
id, title, voice_note_url, voice_note_duration, std::move(reply_markup), std::move(input_message_content));
@ -10060,9 +10146,9 @@ td::Status Client::process_send_video_note_query(PromisedQueryPtr &query) {
auto thumbnail = get_input_thumbnail(query.get());
int32 duration = get_integer_arg(query.get(), "duration", 0, 0, MAX_DURATION);
int32 length = get_integer_arg(query.get(), "length", 0, 0, MAX_LENGTH);
do_send_message(
make_object<td_api::inputMessageVideoNote>(std::move(video_note), std::move(thumbnail), duration, length),
std::move(query));
do_send_message(make_object<td_api::inputMessageVideoNote>(std::move(video_note), std::move(thumbnail), duration,
length, nullptr),
std::move(query));
return td::Status::OK();
}
@ -10073,8 +10159,9 @@ td::Status Client::process_send_voice_query(PromisedQueryPtr &query) {
}
int32 duration = get_integer_arg(query.get(), "duration", 0, 0, MAX_DURATION);
TRY_RESULT(caption, get_caption(query.get()));
do_send_message(make_object<td_api::inputMessageVoiceNote>(std::move(voice_note), duration, "", std::move(caption)),
std::move(query));
do_send_message(
make_object<td_api::inputMessageVoiceNote>(std::move(voice_note), duration, "", std::move(caption), nullptr),
std::move(query));
return td::Status::OK();
}
@ -11350,7 +11437,7 @@ td::Status Client::process_restrict_chat_member_query(PromisedQueryPtr &query) {
permissions->can_change_info_ = old_permissions->can_change_info_;
permissions->can_invite_users_ = old_permissions->can_invite_users_;
permissions->can_pin_messages_ = old_permissions->can_pin_messages_;
permissions->can_manage_topics_ = old_permissions->can_manage_topics_;
permissions->can_create_topics_ = old_permissions->can_create_topics_;
}
send_request(make_object<td_api::setChatMemberStatus>(
@ -12188,7 +12275,7 @@ td::Status Client::process_search_chat_messages_query(PromisedQueryPtr &query) {
[this, query_, sender = std::move(sender), from_message_id, filter = std::move(filter)](
int64 chat_id, PromisedQueryPtr query) mutable {
send_request(make_object<td_api::searchChatMessages>(chat_id, query_.str(), std::move(sender),
from_message_id, 0, 100, std::move(filter), 0),
from_message_id, 0, 100, std::move(filter), 0, 0),
td::make_unique<TdOnFoundMessagesCallback>(this, std::move(query)));
});
return td::Status::OK();
@ -12296,10 +12383,11 @@ void Client::process_register_user_query(PromisedQueryPtr &query) {
return fail_query(400, "Bad Request: first_name not found", std::move(query));
}
auto last_name = query->arg("last_name");
auto disable_notification = to_bool(query->arg("disable_notification"));
if (authorization_state_->get_id() != td_api::authorizationStateWaitRegistration::ID) {
return fail_query(400, "Bad Request: currently not waiting for registration", std::move(query));
}
send_request(make_object<td_api::registerUser>(first_name.str(), last_name.str()),
send_request(make_object<td_api::registerUser>(first_name.str(), last_name.str(), disable_notification),
td::make_unique<TdOnAuthorizationQueryCallback>(this, std::move(query)));
}
//end custom auth methods impl
@ -13156,11 +13244,9 @@ void Client::json_store_administrator_rights(td::JsonObjectScope &object, const
}
object("can_promote_members", td::JsonBool(rights->can_promote_members_));
object("can_manage_video_chats", td::JsonBool(rights->can_manage_video_chats_));
if (chat_type == ChatType::Channel) {
object("can_post_stories", td::JsonBool(rights->can_post_stories_));
object("can_edit_stories", td::JsonBool(rights->can_edit_stories_));
object("can_delete_stories", td::JsonBool(rights->can_delete_stories_));
}
object("can_post_stories", td::JsonBool(rights->can_post_stories_));
object("can_edit_stories", td::JsonBool(rights->can_edit_stories_));
object("can_delete_stories", td::JsonBool(rights->can_delete_stories_));
object("is_anonymous", td::JsonBool(rights->is_anonymous_));
}
@ -13182,7 +13268,7 @@ void Client::json_store_permissions(td::JsonObjectScope &object, const td_api::c
object("can_change_info", td::JsonBool(permissions->can_change_info_));
object("can_invite_users", td::JsonBool(permissions->can_invite_users_));
object("can_pin_messages", td::JsonBool(permissions->can_pin_messages_));
object("can_manage_topics", td::JsonBool(permissions->can_manage_topics_));
object("can_manage_topics", td::JsonBool(permissions->can_create_topics_));
}
void Client::json_store_user_status(td::JsonObjectScope &object, const td_api::UserStatus *userStatus) {
@ -13729,6 +13815,10 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
return true;
case td_api::messageExpiredVideo::ID:
return true;
case td_api::messageExpiredVideoNote::ID:
return true;
case td_api::messageExpiredVoiceNote::ID:
return true;
case td_api::messageCustomServiceAction::ID:
return true;
case td_api::messageChatSetTheme::ID:
@ -14148,10 +14238,9 @@ Client::FullMessageId Client::add_message(object_ptr<td_api::message> &&message,
message_info->initial_send_date = message->forward_info_->date_;
message_info->forward_origin = std::move(message->forward_info_->origin_);
auto from_chat_id = message->forward_info_->from_chat_id_;
message_info->is_automatic_forward =
from_chat_id != 0 && from_chat_id != chat_id && message->forward_info_->from_message_id_ != 0 &&
get_chat_type(chat_id) == ChatType::Supergroup && get_chat_type(from_chat_id) == ChatType::Channel;
message_info->is_automatic_forward = message->forward_info_->source_ != nullptr &&
get_chat_type(chat_id) == ChatType::Supergroup &&
get_chat_type(message->forward_info_->source_->chat_id_) == ChatType::Channel;
} else if (message->import_info_ != nullptr) {
message_info->initial_send_date = message->import_info_->date_;
message_info->forward_origin = make_object<td_api::messageOriginHiddenUser>(message->import_info_->sender_name_);
@ -14202,6 +14291,7 @@ Client::FullMessageId Client::add_message(object_ptr<td_api::message> &&message,
message_info->can_be_saved = message->can_be_saved_;
message_info->is_topic_message = message->is_topic_message_;
message_info->author_signature = std::move(message->author_signature_);
message_info->sender_boost_count = message->sender_boost_count_;
drop_internal_reply_to_message_in_another_chat(message);
@ -14210,6 +14300,11 @@ Client::FullMessageId Client::add_message(object_ptr<td_api::message> &&message,
} else {
message_info->reply_to_message = nullptr;
}
if (message->reply_to_ != nullptr && message->reply_to_->get_id() == td_api::messageReplyToStory::ID) {
message_info->reply_to_story = move_object_as<td_api::messageReplyToStory>(message->reply_to_);
} else {
message_info->reply_to_story = nullptr;
}
if (message_info->content == nullptr || force_update_content) {
message_info->content = std::move(message->content_);

View File

@ -178,6 +178,7 @@ class Client final : public WebhookActor::Callback {
class JsonMessageReactionCountUpdated;
class JsonAddress;
class JsonOrderInfo;
class JsonStory;
class JsonSuccessfulPaymentBot;
class JsonEncryptedPassportElement;
class JsonEncryptedCredentials;
@ -195,6 +196,7 @@ class Client final : public WebhookActor::Callback {
class JsonGiveaway;
class JsonGiveawayWinners;
class JsonGiveawayCompleted;
class JsonChatBoostAdded;
class JsonUpdateTypes;
class JsonWebhookInfo;
class JsonStickerSet;
@ -238,6 +240,7 @@ class Client final : public WebhookActor::Callback {
class TdOnGetMyShortDescriptionCallback;
class TdOnGetChatFullInfoCallback;
class TdOnGetChatStickerSetCallback;
class TdOnGetChatCustomEmojiStickerSetCallback;
class TdOnGetChatPinnedMessageCallback;
class TdOnGetChatPinnedMessageToUnpinCallback;
class TdOnGetGroupMembersCallback;
@ -918,8 +921,10 @@ class Client final : public WebhookActor::Callback {
td::string description;
td::string invite_link;
int64 sticker_set_id = 0;
int64 custom_emoji_sticker_set_id = 0;
int32 date = 0;
int32 slow_mode_delay = 0;
int32 unrestrict_boost_count = 0;
int64 linked_chat_id = 0;
object_ptr<td_api::chatLocation> location;
object_ptr<td_api::ChatMemberStatus> status;
@ -981,9 +986,11 @@ class Client final : public WebhookActor::Callback {
int32 date = 0;
int32 edit_date = 0;
int32 initial_send_date = 0;
int32 sender_boost_count = 0;
object_ptr<td_api::MessageOrigin> forward_origin;
td::string author_signature;
object_ptr<td_api::messageReplyToMessage> reply_to_message;
object_ptr<td_api::messageReplyToStory> reply_to_story;
int64 media_album_id = 0;
int64 via_bot_user_id = 0;
object_ptr<td_api::MessageContent> content;

View File

@ -100,6 +100,11 @@ void ClientManager::send(PromisedQueryPtr query) {
auto id_it = token_to_id_.find(token);
if (id_it == token_to_id_.end()) {
auto method = query->method();
if (method == "close") {
return fail_query(400, "Bad Request: the bot has already been closed", std::move(query));
}
if (!check_flood_limits(query)) {
return;
}
@ -116,7 +121,6 @@ void ClientManager::send(PromisedQueryPtr query) {
query->token().str(), query->is_user(), query->is_test_dc(),
tqueue_id, parameters_, client_info->stat_.actor_id(&client_info->stat_));
auto method = query->method();
if (method != "deletewebhook" && method != "setwebhook") {
auto webhook_info = parameters_->shared_data_->webhook_db_->get(bot_token_with_dc);
if (!webhook_info.empty()) {

View File

@ -103,6 +103,7 @@ static void dump_stacktrace_signal_handler(int sig) {
static void fail_signal_handler(int sig) {
has_failed = true;
print_log();
{
td::LogGuard log_guard;
td::signal_safe_write_signal_number(sig);
@ -110,7 +111,6 @@ static void fail_signal_handler(int sig) {
options.use_gdb = true;
td::Stacktrace::print_to_stderr(options);
}
print_log();
_Exit(EXIT_FAILURE);
}
@ -165,7 +165,7 @@ int main(int argc, char *argv[]) {
auto start_time = td::Time::now();
auto shared_data = std::make_shared<SharedData>();
auto parameters = std::make_unique<ClientParameters>();
parameters->version_ = "7.0";
parameters->version_ = "7.1";
parameters->shared_data_ = shared_data;
parameters->start_time_ = start_time;
auto net_query_stats = td::create_net_query_stats();