Update TDLib to 1.7.9.

This commit is contained in:
levlam 2021-11-04 13:02:05 +03:00
parent 5130c52676
commit 2fa32d7db7
3 changed files with 69 additions and 43 deletions

2
td

@ -1 +1 @@
Subproject commit 0208b7058b1c092dc1b5f9a7509359d36a48ba8c Subproject commit 7d41d9eaa58a6e0927806283252dc9e74eda5512

View File

@ -558,6 +558,9 @@ class Client::JsonChatInviteLink : public Jsonable {
void store(JsonValueScope *scope) const { void store(JsonValueScope *scope) const {
auto object = scope->enter_object(); auto object = scope->enter_object();
object("invite_link", chat_invite_link_->invite_link_); object("invite_link", chat_invite_link_->invite_link_);
if (!chat_invite_link_->name_.empty()) {
object("name", chat_invite_link_->name_);
}
object("creator", JsonUser(chat_invite_link_->creator_user_id_, client_)); object("creator", JsonUser(chat_invite_link_->creator_user_id_, client_));
if (chat_invite_link_->expire_date_ != 0) { if (chat_invite_link_->expire_date_ != 0) {
object("expire_date", chat_invite_link_->expire_date_); object("expire_date", chat_invite_link_->expire_date_);
@ -565,6 +568,10 @@ class Client::JsonChatInviteLink : public Jsonable {
if (chat_invite_link_->member_limit_ != 0) { if (chat_invite_link_->member_limit_ != 0) {
object("member_limit", chat_invite_link_->member_limit_); object("member_limit", chat_invite_link_->member_limit_);
} }
if (chat_invite_link_->pending_join_request_count_ != 0) {
object("pending_join_request_count", chat_invite_link_->pending_join_request_count_);
}
object("creates_join_request", td::JsonBool(chat_invite_link_->creates_join_request_));
object("is_primary", td::JsonBool(chat_invite_link_->is_primary_)); object("is_primary", td::JsonBool(chat_invite_link_->is_primary_));
object("is_revoked", td::JsonBool(chat_invite_link_->is_revoked_)); object("is_revoked", td::JsonBool(chat_invite_link_->is_revoked_));
} }
@ -1421,54 +1428,54 @@ class Client::JsonProximityAlertTriggered : public Jsonable {
const Client *client_; const Client *client_;
}; };
class Client::JsonVoiceChatScheduled : public Jsonable { class Client::JsonVideoChatScheduled : public Jsonable {
public: public:
explicit JsonVoiceChatScheduled(const td_api::messageVoiceChatScheduled *voice_chat_scheduled) explicit JsonVideoChatScheduled(const td_api::messageVideoChatScheduled *video_chat_scheduled)
: voice_chat_scheduled_(voice_chat_scheduled) { : video_chat_scheduled_(video_chat_scheduled) {
} }
void store(JsonValueScope *scope) const { void store(JsonValueScope *scope) const {
auto object = scope->enter_object(); auto object = scope->enter_object();
object("start_date", voice_chat_scheduled_->start_date_); object("start_date", video_chat_scheduled_->start_date_);
} }
private: private:
const td_api::messageVoiceChatScheduled *voice_chat_scheduled_; const td_api::messageVideoChatScheduled *video_chat_scheduled_;
}; };
class Client::JsonVoiceChatStarted : public Jsonable { class Client::JsonVideoChatStarted : public Jsonable {
public: public:
void store(JsonValueScope *scope) const { void store(JsonValueScope *scope) const {
auto object = scope->enter_object(); auto object = scope->enter_object();
} }
}; };
class Client::JsonVoiceChatEnded : public Jsonable { class Client::JsonVideoChatEnded : public Jsonable {
public: public:
explicit JsonVoiceChatEnded(const td_api::messageVoiceChatEnded *voice_chat_ended) explicit JsonVideoChatEnded(const td_api::messageVideoChatEnded *video_chat_ended)
: voice_chat_ended_(voice_chat_ended) { : video_chat_ended_(video_chat_ended) {
} }
void store(JsonValueScope *scope) const { void store(JsonValueScope *scope) const {
auto object = scope->enter_object(); auto object = scope->enter_object();
object("duration", voice_chat_ended_->duration_); object("duration", video_chat_ended_->duration_);
} }
private: private:
const td_api::messageVoiceChatEnded *voice_chat_ended_; const td_api::messageVideoChatEnded *video_chat_ended_;
}; };
class Client::JsonInviteVoiceChatParticipants : public Jsonable { class Client::JsonInviteVideoChatParticipants : public Jsonable {
public: public:
JsonInviteVoiceChatParticipants(const td_api::messageInviteVoiceChatParticipants *invite_voice_chat_participants, JsonInviteVideoChatParticipants(const td_api::messageInviteVideoChatParticipants *invite_video_chat_participants,
const Client *client) const Client *client)
: invite_voice_chat_participants_(invite_voice_chat_participants), client_(client) { : invite_video_chat_participants_(invite_video_chat_participants), client_(client) {
} }
void store(JsonValueScope *scope) const { void store(JsonValueScope *scope) const {
auto object = scope->enter_object(); auto object = scope->enter_object();
object("users", JsonUsers(invite_voice_chat_participants_->user_ids_, client_)); object("users", JsonUsers(invite_video_chat_participants_->user_ids_, client_));
} }
private: private:
const td_api::messageInviteVoiceChatParticipants *invite_voice_chat_participants_; const td_api::messageInviteVideoChatParticipants *invite_video_chat_participants_;
const Client *client_; const Client *client_;
}; };
@ -1745,6 +1752,14 @@ void Client::JsonMessage::store(JsonValueScope *scope) const {
} }
break; break;
} }
case td_api::messageChatJoinByRequest::ID: {
if (message_->sender_user_id > 0) {
object("new_chat_participant", JsonUser(message_->sender_user_id, client_));
object("new_chat_member", JsonUser(message_->sender_user_id, client_));
object("new_chat_members", JsonUsers({message_->sender_user_id}, client_));
}
break;
}
case td_api::messageChatDeleteMember::ID: { case td_api::messageChatDeleteMember::ID: {
auto message_delete_member = static_cast<const td_api::messageChatDeleteMember *>(message_->content.get()); auto message_delete_member = static_cast<const td_api::messageChatDeleteMember *>(message_->content.get());
int64 user_id = message_delete_member->user_id_; int64 user_id = message_delete_member->user_id_;
@ -1842,6 +1857,9 @@ void Client::JsonMessage::store(JsonValueScope *scope) const {
break; break;
case td_api::messageChatSetTheme::ID: case td_api::messageChatSetTheme::ID:
break; break;
case td_api::messageAnimatedEmoji::ID:
UNREACHABLE();
break;
case td_api::messageWebsiteConnected::ID: { case td_api::messageWebsiteConnected::ID: {
auto chat = client_->get_chat(message_->chat_id); auto chat = client_->get_chat(message_->chat_id);
if (chat->type != ChatInfo::Type::Private) { if (chat->type != ChatInfo::Type::Private) {
@ -1867,22 +1885,22 @@ void Client::JsonMessage::store(JsonValueScope *scope) const {
object("proximity_alert_triggered", JsonProximityAlertTriggered(content, client_)); object("proximity_alert_triggered", JsonProximityAlertTriggered(content, client_));
break; break;
} }
case td_api::messageVoiceChatScheduled::ID: { case td_api::messageVideoChatScheduled::ID: {
auto content = static_cast<const td_api::messageVoiceChatScheduled *>(message_->content.get()); auto content = static_cast<const td_api::messageVideoChatScheduled *>(message_->content.get());
object("voice_chat_scheduled", JsonVoiceChatScheduled(content)); object("voice_chat_scheduled", JsonVideoChatScheduled(content));
break; break;
} }
case td_api::messageVoiceChatStarted::ID: case td_api::messageVideoChatStarted::ID:
object("voice_chat_started", JsonVoiceChatStarted()); object("voice_chat_started", JsonVideoChatStarted());
break; break;
case td_api::messageVoiceChatEnded::ID: { case td_api::messageVideoChatEnded::ID: {
auto content = static_cast<const td_api::messageVoiceChatEnded *>(message_->content.get()); auto content = static_cast<const td_api::messageVideoChatEnded *>(message_->content.get());
object("voice_chat_ended", JsonVoiceChatEnded(content)); object("voice_chat_ended", JsonVideoChatEnded(content));
break; break;
} }
case td_api::messageInviteVoiceChatParticipants::ID: { case td_api::messageInviteVideoChatParticipants::ID: {
auto content = static_cast<const td_api::messageInviteVoiceChatParticipants *>(message_->content.get()); auto content = static_cast<const td_api::messageInviteVideoChatParticipants *>(message_->content.get());
object("voice_chat_participants_invited", JsonInviteVoiceChatParticipants(content, client_)); object("voice_chat_participants_invited", JsonInviteVideoChatParticipants(content, client_));
break; break;
} }
default: default:
@ -2241,7 +2259,7 @@ class Client::JsonChatMember : public Jsonable {
object("can_pin_messages", td::JsonBool(administrator->can_pin_messages_)); object("can_pin_messages", td::JsonBool(administrator->can_pin_messages_));
} }
object("can_promote_members", td::JsonBool(administrator->can_promote_members_)); object("can_promote_members", td::JsonBool(administrator->can_promote_members_));
object("can_manage_voice_chats", td::JsonBool(administrator->can_manage_voice_chats_)); object("can_manage_voice_chats", td::JsonBool(administrator->can_manage_video_chats_));
if (!administrator->custom_title_.empty()) { if (!administrator->custom_title_.empty()) {
object("custom_title", administrator->custom_title_); object("custom_title", administrator->custom_title_);
} }
@ -4960,6 +4978,9 @@ td_api::object_ptr<td_api::ChatAction> Client::get_chat_action(const Query *quer
if (action == "upload_document") { if (action == "upload_document") {
return make_object<td_api::chatActionUploadingDocument>(); return make_object<td_api::chatActionUploadingDocument>();
} }
if (action == "choose_sticker") {
return make_object<td_api::chatActionChoosingSticker>();
}
if (action == "pick_up_location" || action == "find_location") { if (action == "pick_up_location" || action == "find_location") {
return make_object<td_api::chatActionChoosingLocation>(); return make_object<td_api::chatActionChoosingLocation>();
} }
@ -7107,12 +7128,14 @@ td::Status Client::process_export_chat_invite_link_query(PromisedQueryPtr &query
td::Status Client::process_create_chat_invite_link_query(PromisedQueryPtr &query) { td::Status Client::process_create_chat_invite_link_query(PromisedQueryPtr &query) {
auto chat_id = query->arg("chat_id"); auto chat_id = query->arg("chat_id");
auto name = query->arg("name");
auto expire_date = get_integer_arg(query.get(), "expire_date", 0, 0); auto expire_date = get_integer_arg(query.get(), "expire_date", 0, 0);
auto member_limit = get_integer_arg(query.get(), "member_limit", 0, 0, 100000); auto member_limit = get_integer_arg(query.get(), "member_limit", 0, 0, 100000);
auto creates_join_request = to_bool(query->arg("creates_join_request"));
check_chat(chat_id, AccessRights::Write, std::move(query), check_chat(chat_id, AccessRights::Write, std::move(query),
[this, expire_date, member_limit](int64 chat_id, PromisedQueryPtr query) { [this, name = name.str(), expire_date, member_limit, creates_join_request](int64 chat_id, PromisedQueryPtr query) {
send_request(make_object<td_api::createChatInviteLink>(chat_id, expire_date, member_limit), send_request(make_object<td_api::createChatInviteLink>(chat_id, name, expire_date, member_limit, creates_join_request),
std::make_unique<TdOnGetChatInviteLinkCallback>(this, std::move(query))); std::make_unique<TdOnGetChatInviteLinkCallback>(this, std::move(query)));
}); });
return Status::OK(); return Status::OK();
@ -7121,12 +7144,14 @@ td::Status Client::process_create_chat_invite_link_query(PromisedQueryPtr &query
td::Status Client::process_edit_chat_invite_link_query(PromisedQueryPtr &query) { td::Status Client::process_edit_chat_invite_link_query(PromisedQueryPtr &query) {
auto chat_id = query->arg("chat_id"); auto chat_id = query->arg("chat_id");
auto invite_link = query->arg("invite_link"); auto invite_link = query->arg("invite_link");
auto name = query->arg("name");
auto expire_date = get_integer_arg(query.get(), "expire_date", 0, 0); auto expire_date = get_integer_arg(query.get(), "expire_date", 0, 0);
auto member_limit = get_integer_arg(query.get(), "member_limit", 0, 0, 100000); auto member_limit = get_integer_arg(query.get(), "member_limit", 0, 0, 100000);
auto creates_join_request = to_bool(query->arg("creates_join_request"));
check_chat(chat_id, AccessRights::Write, std::move(query), check_chat(chat_id, AccessRights::Write, std::move(query),
[this, invite_link = invite_link.str(), expire_date, member_limit](int64 chat_id, PromisedQueryPtr query) { [this, invite_link = invite_link.str(), name = name.str(), expire_date, member_limit, creates_join_request](int64 chat_id, PromisedQueryPtr query) {
send_request(make_object<td_api::editChatInviteLink>(chat_id, invite_link, expire_date, member_limit), send_request(make_object<td_api::editChatInviteLink>(chat_id, invite_link, name, expire_date, member_limit, creates_join_request),
std::make_unique<TdOnGetChatInviteLinkCallback>(this, std::move(query))); std::make_unique<TdOnGetChatInviteLinkCallback>(this, std::move(query)));
}); });
return Status::OK(); return Status::OK();
@ -7403,11 +7428,11 @@ td::Status Client::process_promote_chat_member_query(PromisedQueryPtr &query) {
auto can_restrict_members = to_bool(query->arg("can_restrict_members")); auto can_restrict_members = to_bool(query->arg("can_restrict_members"));
auto can_pin_messages = to_bool(query->arg("can_pin_messages")); auto can_pin_messages = to_bool(query->arg("can_pin_messages"));
auto can_promote_members = to_bool(query->arg("can_promote_members")); auto can_promote_members = to_bool(query->arg("can_promote_members"));
auto can_manage_voice_chats = to_bool(query->arg("can_manage_voice_chats")); auto can_manage_video_chats = to_bool(query->arg("can_manage_voice_chats"));
auto is_anonymous = to_bool(query->arg("is_anonymous")); auto is_anonymous = to_bool(query->arg("is_anonymous"));
auto status = make_object<td_api::chatMemberStatusAdministrator>( auto status = make_object<td_api::chatMemberStatusAdministrator>(
td::string(), true, can_manage_chat, can_change_info, can_post_messages, can_edit_messages, can_delete_messages, td::string(), true, can_manage_chat, can_change_info, can_post_messages, can_edit_messages, can_delete_messages,
can_invite_users, can_restrict_members, can_pin_messages, can_promote_members, can_manage_voice_chats, can_invite_users, can_restrict_members, can_pin_messages, can_promote_members, can_manage_video_chats,
is_anonymous); is_anonymous);
check_chat(chat_id, AccessRights::Write, std::move(query), check_chat(chat_id, AccessRights::Write, std::move(query),
[this, user_id, status = std::move(status)](int64 chat_id, PromisedQueryPtr query) mutable { [this, user_id, status = std::move(status)](int64 chat_id, PromisedQueryPtr query) mutable {
@ -8833,12 +8858,13 @@ bool Client::need_skip_update_message(int64 chat_id, const object_ptr<td_api::me
case td_api::messageChatChangePhoto::ID: case td_api::messageChatChangePhoto::ID:
case td_api::messageChatDeletePhoto::ID: case td_api::messageChatDeletePhoto::ID:
case td_api::messageChatDeleteMember::ID: case td_api::messageChatDeleteMember::ID:
case td_api::messageChatSetTheme::ID:
case td_api::messagePinMessage::ID: case td_api::messagePinMessage::ID:
case td_api::messageProximityAlertTriggered::ID: case td_api::messageProximityAlertTriggered::ID:
case td_api::messageVoiceChatScheduled::ID: case td_api::messageVideoChatScheduled::ID:
case td_api::messageVoiceChatStarted::ID: case td_api::messageVideoChatStarted::ID:
case td_api::messageVoiceChatEnded::ID: case td_api::messageVideoChatEnded::ID:
case td_api::messageInviteVoiceChatParticipants::ID: case td_api::messageInviteVideoChatParticipants::ID:
// don't skip // don't skip
break; break;
default: default:

View File

@ -147,10 +147,10 @@ class Client : public WebhookActor::Callback {
class JsonEncryptedCredentials; class JsonEncryptedCredentials;
class JsonPassportData; class JsonPassportData;
class JsonProximityAlertTriggered; class JsonProximityAlertTriggered;
class JsonVoiceChatScheduled; class JsonVideoChatScheduled;
class JsonVoiceChatStarted; class JsonVideoChatStarted;
class JsonVoiceChatEnded; class JsonVideoChatEnded;
class JsonInviteVoiceChatParticipants; class JsonInviteVideoChatParticipants;
class JsonChatSetTtl; class JsonChatSetTtl;
class JsonUpdateTypes; class JsonUpdateTypes;
class JsonWebhookInfo; class JsonWebhookInfo;