diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cdab0304..cefedd703 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -539,6 +539,7 @@ set(TDLIB_SOURCE td/mtproto/TransportType.h td/mtproto/utils.h + td/telegram/AccentColorId.h td/telegram/AccessRights.h td/telegram/AccountManager.h td/telegram/AffectedHistory.h diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 1241ee0fa..cc0484f12 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -743,6 +743,10 @@ premiumGiveawayInfoOngoing creation_date:int32 status:PremiumGiveawayParticipant premiumGiveawayInfoCompleted creation_date:int32 actual_winners_selection_date:int32 was_refunded:Bool winner_count:int32 activation_count:int32 gift_code:string = PremiumGiveawayInfo; +//@description Contains accent color identifier for user/chat name, and backgrounds of chat photo, replies and link previews +//@id Accent color identifier; 0 - red, 1 - orange, 2 - purple/violet, 3 - green, 4 - cyan, 5 - blue, 6 - pink +accentColorId id:int32 = AccentColorId; + //@description Describes a custom emoji to be shown instead of the Telegram Premium badge //@custom_emoji_id Identifier of the custom emoji in stickerFormatTgs format //@expiration_date Point in time (Unix timestamp) when the status will expire; 0 if never @@ -767,6 +771,7 @@ usernames active_usernames:vector disabled_usernames:vector edit //@phone_number Phone number of the user //@status Current online status of the user //@profile_photo Profile photo of the user; may be null +//@accent_color_id Identifier of the accent color for name, and backgrounds of profile photo, reply and link preview //@emoji_status Emoji status to be shown instead of the default Telegram Premium badge; may be null. For Telegram Premium users only //@is_contact The user is a contact of the current user //@is_mutual_contact The user is a contact of the current user and the current user is a contact of the user @@ -783,7 +788,7 @@ usernames active_usernames:vector disabled_usernames:vector edit //@type Type of the user //@language_code IETF language tag of the user's language; only available to bots //@added_to_attachment_menu True, if the user added the current bot to attachment menu; only available to bots -user id:int53 first_name:string last_name:string usernames:usernames phone_number:string status:UserStatus profile_photo:profilePhoto emoji_status:emojiStatus is_contact:Bool is_mutual_contact:Bool is_close_friend:Bool is_verified:Bool is_premium:Bool is_support:Bool restriction_reason:string is_scam:Bool is_fake:Bool has_active_stories:Bool has_unread_active_stories:Bool have_access:Bool type:UserType language_code:string added_to_attachment_menu:Bool = User; +user id:int53 first_name:string last_name:string usernames:usernames phone_number:string status:UserStatus profile_photo:profilePhoto accent_color_id:accentColorId emoji_status:emojiStatus is_contact:Bool is_mutual_contact:Bool is_close_friend:Bool is_verified:Bool is_premium:Bool is_support:Bool restriction_reason:string is_scam:Bool is_fake:Bool has_active_stories:Bool has_unread_active_stories:Bool have_access:Bool type:UserType language_code:string added_to_attachment_menu:Bool = User; //@description Contains information about a bot @@ -4189,7 +4194,7 @@ chatEventUsernameChanged old_username:string new_username:string = ChatEventActi chatEventActiveUsernamesChanged old_usernames:vector new_usernames:vector = ChatEventAction; //@description The chat accent color was changed @old_accent_color_id Previous identifier of chat accent color @new_accent_color_id New identifier of chat accent color -chatEventAccentColorChanged old_accent_color_id:int32 new_accent_color_id:int32 = ChatEventAction; +chatEventAccentColorChanged old_accent_color_id:accentColorId new_accent_color_id:accentColorId = ChatEventAction; //@description The chat's custom emoji for reply background was changed @old_reply_background_custom_emoji_id Previous identifier of the custom emoji @new_reply_background_custom_emoji_id New identifier of the custom emoji chatEventReplyBackgroundCustomEmojiChanged old_reply_background_custom_emoji_id:int64 new_reply_background_custom_emoji_id:int64 = ChatEventAction; diff --git a/td/telegram/AccentColorId.h b/td/telegram/AccentColorId.h new file mode 100644 index 000000000..c8c125c43 --- /dev/null +++ b/td/telegram/AccentColorId.h @@ -0,0 +1,83 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/telegram/ChannelId.h" +#include "td/telegram/ChatId.h" +#include "td/telegram/td_api.h" +#include "td/telegram/UserId.h" + +#include "td/utils/common.h" +#include "td/utils/HashTableUtils.h" +#include "td/utils/StringBuilder.h" + +#include + +namespace td { + +class AccentColorId { + int32 id = -1; + + public: + AccentColorId() = default; + + explicit constexpr AccentColorId(int32 accent_color_id) : id(accent_color_id) { + } + template ::value>> + AccentColorId(T accent_color_id) = delete; + + explicit AccentColorId(UserId user_id) : id(user_id.get() % 7) { + } + + explicit AccentColorId(ChatId chat_id) : id(chat_id.get() % 7) { + } + + explicit AccentColorId(ChannelId channel_id) : id(channel_id.get() % 7) { + } + + bool is_valid() const { + return id >= 0; + } + + int32 get() const { + return id; + } + + bool operator==(const AccentColorId &other) const { + return id == other.id; + } + + bool operator!=(const AccentColorId &other) const { + return id != other.id; + } + + td_api::object_ptr get_accent_color_id_object() const { + return td_api::make_object(id); + } + + template + void store(StorerT &storer) const { + storer.store_int(id); + } + + template + void parse(ParserT &parser) { + id = parser.fetch_int(); + } +}; + +struct AccentColorIdHash { + uint32 operator()(AccentColorId accent_color_id) const { + return Hash()(accent_color_id.get()); + } +}; + +inline StringBuilder &operator<<(StringBuilder &string_builder, AccentColorId accent_color_id) { + return string_builder << "accent color #" << accent_color_id.get(); +} + +} // namespace td diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index bb740aeb0..c57e49b95 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -19145,8 +19145,8 @@ td_api::object_ptr ContactsManager::get_update_user_object(U td_api::object_ptr ContactsManager::get_update_unknown_user_object(UserId user_id) const { auto have_access = user_id == get_my_id() || user_messages_.count(user_id) != 0; return td_api::make_object(td_api::make_object( - user_id.get(), "", "", nullptr, "", td_api::make_object(), nullptr, nullptr, false, - false, false, false, false, false, "", false, false, false, false, have_access, + user_id.get(), "", "", nullptr, "", td_api::make_object(), nullptr, nullptr, nullptr, + false, false, false, false, false, false, "", false, false, false, false, have_access, td_api::make_object(), "", false)); } @@ -19184,7 +19184,7 @@ tl_object_ptr ContactsManager::get_user_object(UserId user_id, con return td_api::make_object( user_id.get(), u->first_name, u->last_name, u->usernames.get_usernames_object(), u->phone_number, get_user_status_object(user_id, u, G()->unix_time()), - get_profile_photo_object(td_->file_manager_.get(), u->photo), std::move(emoji_status), u->is_contact, + get_profile_photo_object(td_->file_manager_.get(), u->photo), nullptr, std::move(emoji_status), u->is_contact, u->is_mutual_contact, u->is_close_friend, u->is_verified, u->is_premium, u->is_support, get_restriction_reason_description(u->restriction_reasons), u->is_scam, u->is_fake, u->max_active_story_id.is_valid(), get_user_has_unread_stories(u), have_access, std::move(type), u->language_code, diff --git a/td/telegram/DialogEventLog.cpp b/td/telegram/DialogEventLog.cpp index c86d5e427..a583bb102 100644 --- a/td/telegram/DialogEventLog.cpp +++ b/td/telegram/DialogEventLog.cpp @@ -6,6 +6,7 @@ // #include "td/telegram/DialogEventLog.h" +#include "td/telegram/AccentColorId.h" #include "td/telegram/ChannelId.h" #include "td/telegram/ChatReactions.h" #include "td/telegram/ContactsManager.h" @@ -428,9 +429,10 @@ static td_api::object_ptr get_chat_event_action_object( } case telegram_api::channelAdminLogEventActionChangeColor::ID: { auto action = move_tl_object_as(action_ptr); - auto old_accent_color_id = clamp(action->prev_value_, 0, 256); - auto new_accent_color_id = clamp(action->new_value_, 0, 256); - return td_api::make_object(old_accent_color_id, new_accent_color_id); + auto old_accent_color_id = AccentColorId(action->prev_value_); + auto new_accent_color_id = AccentColorId(action->new_value_); + return td_api::make_object(old_accent_color_id.get_accent_color_id_object(), + new_accent_color_id.get_accent_color_id_object()); } case telegram_api::channelAdminLogEventActionChangeBackgroundEmoji::ID: { auto action = move_tl_object_as(action_ptr);