Add td_api::getThemedChatEmojiStatuses.

This commit is contained in:
levlam 2023-12-21 22:44:59 +03:00
parent 40b585d74f
commit e2747b6c76
9 changed files with 81 additions and 7 deletions

View File

@ -8259,7 +8259,7 @@ getAttachmentMenuBot bot_user_id:int53 = AttachmentMenuBot;
toggleBotIsAddedToAttachmentMenu bot_user_id:int53 is_added:Bool allow_write_access:Bool = Ok;
//@description Returns up to 8 emoji statuses, which must be shown right after the default Premium Badge in the emoji status list
//@description Returns up to 8 emoji statuses, which must be shown right after the default Premium Badge in the emoji status list for users
getThemedEmojiStatuses = EmojiStatuses;
//@description Returns recent emoji statuses
@ -8272,6 +8272,10 @@ getDefaultEmojiStatuses = EmojiStatuses;
clearRecentEmojiStatuses = Ok;
//@description Returns up to 8 emoji statuses, which must be shown in the emoji status list for chats
getThemedChatEmojiStatuses = EmojiStatuses;
//@description Downloads a file from the cloud. Download progress and completion of the download will be notified through updateFile updates
//@file_id Identifier of the file to download
//@priority Priority of the download (1-32). The higher the priority, the earlier the file will be downloaded. If the priorities of two files are equal, then the last one for which downloadFile/addFileToDownloads was called will be downloaded first

View File

@ -37,6 +37,10 @@ SpecialStickerSetType SpecialStickerSetType::default_statuses() {
return SpecialStickerSetType("default_statuses_sticker_set");
}
SpecialStickerSetType SpecialStickerSetType::default_channel_statuses() {
return SpecialStickerSetType("default_channel_statuses_sticker_set");
}
SpecialStickerSetType SpecialStickerSetType::default_topic_icons() {
return SpecialStickerSetType("default_topic_icons_sticker_set");
}
@ -63,12 +67,12 @@ SpecialStickerSetType::SpecialStickerSetType(
case telegram_api::inputStickerSetEmojiDefaultStatuses::ID:
*this = default_statuses();
break;
case telegram_api::inputStickerSetEmojiChannelDefaultStatuses::ID:
*this = default_channel_statuses();
break;
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
*this = default_topic_icons();
break;
case telegram_api::inputStickerSetEmojiChannelDefaultStatuses::ID:
*this = default_statuses();
break;
default:
UNREACHABLE();
break;
@ -99,6 +103,9 @@ telegram_api::object_ptr<telegram_api::InputStickerSet> SpecialStickerSetType::g
if (*this == default_statuses()) {
return telegram_api::make_object<telegram_api::inputStickerSetEmojiDefaultStatuses>();
}
if (*this == default_channel_statuses()) {
return telegram_api::make_object<telegram_api::inputStickerSetEmojiChannelDefaultStatuses>();
}
if (*this == default_topic_icons()) {
return telegram_api::make_object<telegram_api::inputStickerSetEmojiDefaultTopicIcons>();
}

View File

@ -34,6 +34,8 @@ class SpecialStickerSetType {
static SpecialStickerSetType default_statuses();
static SpecialStickerSetType default_channel_statuses();
static SpecialStickerSetType default_topic_icons();
string get_dice_emoji() const;

View File

@ -1695,6 +1695,10 @@ void StickersManager::init() {
auto &sticker_set = add_special_sticker_set(SpecialStickerSetType::default_statuses());
load_special_sticker_set_info_from_binlog(sticker_set);
}
{
auto &sticker_set = add_special_sticker_set(SpecialStickerSetType::default_channel_statuses());
load_special_sticker_set_info_from_binlog(sticker_set);
}
{
auto &sticker_set = add_special_sticker_set(SpecialStickerSetType::default_topic_icons());
load_special_sticker_set_info_from_binlog(sticker_set);
@ -1917,6 +1921,10 @@ void StickersManager::on_load_special_sticker_set(const SpecialStickerSetType &t
set_promises(pending_get_default_statuses_queries_);
return;
}
if (type == SpecialStickerSetType::default_channel_statuses()) {
set_promises(pending_get_default_channel_statuses_queries_);
return;
}
if (type == SpecialStickerSetType::default_topic_icons()) {
set_promises(pending_get_default_topic_icons_queries_);
return;
@ -3066,8 +3074,8 @@ StickerSetId StickersManager::get_sticker_set_id(const tl_object_ptr<telegram_ap
case telegram_api::inputStickerSetPremiumGifts::ID:
case telegram_api::inputStickerSetEmojiGenericAnimations::ID:
case telegram_api::inputStickerSetEmojiDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
case telegram_api::inputStickerSetEmojiChannelDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
LOG(ERROR) << "Receive special sticker set " << to_string(set_ptr);
return add_special_sticker_set(SpecialStickerSetType(set_ptr)).id_;
case telegram_api::inputStickerSetDice::ID:
@ -3100,8 +3108,8 @@ StickerSetId StickersManager::add_sticker_set(tl_object_ptr<telegram_api::InputS
case telegram_api::inputStickerSetPremiumGifts::ID:
case telegram_api::inputStickerSetEmojiGenericAnimations::ID:
case telegram_api::inputStickerSetEmojiDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
case telegram_api::inputStickerSetEmojiChannelDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
LOG(ERROR) << "Receive special sticker set " << to_string(set_ptr);
return add_special_sticker_set(SpecialStickerSetType(set_ptr)).id_;
case telegram_api::inputStickerSetDice::ID:
@ -3298,8 +3306,8 @@ StickerSetId StickersManager::on_get_input_sticker_set(FileId sticker_file_id,
case telegram_api::inputStickerSetPremiumGifts::ID:
case telegram_api::inputStickerSetEmojiGenericAnimations::ID:
case telegram_api::inputStickerSetEmojiDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
case telegram_api::inputStickerSetEmojiChannelDefaultStatuses::ID:
case telegram_api::inputStickerSetEmojiDefaultTopicIcons::ID:
return add_special_sticker_set(SpecialStickerSetType(set_ptr)).id_;
case telegram_api::inputStickerSetDice::ID:
return StickerSetId();
@ -6020,6 +6028,44 @@ bool StickersManager::is_default_emoji_status(CustomEmojiId custom_emoji_id) {
return false;
}
void StickersManager::get_default_channel_emoji_statuses(bool is_recursive,
Promise<td_api::object_ptr<td_api::emojiStatuses>> &&promise) {
TRY_STATUS_PROMISE(promise, G()->close_status());
auto &special_sticker_set = add_special_sticker_set(SpecialStickerSetType::default_channel_statuses());
auto sticker_set = get_sticker_set(special_sticker_set.id_);
if (sticker_set == nullptr || !sticker_set->was_loaded_) {
if (is_recursive) {
return promise.set_value(td_api::make_object<td_api::emojiStatuses>());
}
pending_get_default_channel_statuses_queries_.push_back(PromiseCreator::lambda(
[actor_id = actor_id(this), promise = std::move(promise)](Result<Unit> &&result) mutable {
if (result.is_error()) {
promise.set_error(result.move_as_error());
} else {
send_closure(actor_id, &StickersManager::get_default_channel_emoji_statuses, true, std::move(promise));
}
}));
load_special_sticker_set(special_sticker_set);
return;
}
vector<int64> custom_emoji_ids;
for (auto sticker_id : sticker_set->sticker_ids_) {
auto custom_emoji_id = get_custom_emoji_id(sticker_id);
if (!custom_emoji_id.is_valid()) {
LOG(ERROR) << "Ignore wrong sticker " << sticker_id;
continue;
}
custom_emoji_ids.push_back(custom_emoji_id.get());
if (custom_emoji_ids.size() >= 8) {
break;
}
}
promise.set_value(td_api::make_object<td_api::emojiStatuses>(std::move(custom_emoji_ids)));
}
void StickersManager::get_default_topic_icons(bool is_recursive,
Promise<td_api::object_ptr<td_api::stickers>> &&promise) {
TRY_STATUS_PROMISE(promise, G()->close_status());

View File

@ -130,6 +130,9 @@ class StickersManager final : public Actor {
bool is_default_emoji_status(CustomEmojiId custom_emoji_id);
void get_default_channel_emoji_statuses(bool is_recursive,
Promise<td_api::object_ptr<td_api::emojiStatuses>> &&promise);
void get_default_topic_icons(bool is_recursive, Promise<td_api::object_ptr<td_api::stickers>> &&promise);
void get_custom_emoji_stickers(vector<CustomEmojiId> custom_emoji_ids, bool use_database,
@ -1060,6 +1063,7 @@ class StickersManager final : public Actor {
vector<Promise<Unit>> pending_get_premium_gift_option_sticker_queries_;
vector<Promise<Unit>> pending_get_generic_animations_queries_;
vector<Promise<Unit>> pending_get_default_statuses_queries_;
vector<Promise<Unit>> pending_get_default_channel_statuses_queries_;
vector<Promise<Unit>> pending_get_default_topic_icons_queries_;
double next_click_animated_emoji_message_time_ = 0;

View File

@ -7456,6 +7456,12 @@ void Td::on_request(uint64 id, const td_api::getThemedEmojiStatuses &request) {
stickers_manager_->get_default_emoji_statuses(false, std::move(promise));
}
void Td::on_request(uint64 id, const td_api::getThemedChatEmojiStatuses &request) {
CHECK_IS_USER();
CREATE_REQUEST_PROMISE();
stickers_manager_->get_default_channel_emoji_statuses(false, std::move(promise));
}
void Td::on_request(uint64 id, const td_api::getDefaultEmojiStatuses &request) {
CHECK_IS_USER();
CREATE_REQUEST_PROMISE();

View File

@ -1247,6 +1247,8 @@ class Td final : public Actor {
void on_request(uint64 id, const td_api::getThemedEmojiStatuses &request);
void on_request(uint64 id, const td_api::getThemedChatEmojiStatuses &request);
void on_request(uint64 id, const td_api::getDefaultEmojiStatuses &request);
void on_request(uint64 id, const td_api::getRecentEmojiStatuses &request);

View File

@ -2273,6 +2273,7 @@ void UpdatesManager::try_reload_data() {
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::premium_gifts());
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::generic_animations());
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::default_statuses());
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::default_channel_statuses());
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::default_topic_icons());
td_->stickers_manager_->get_default_custom_emoji_stickers(StickerListType::DialogPhoto, true, Auto());
td_->stickers_manager_->get_default_custom_emoji_stickers(StickerListType::UserProfilePhoto, true, Auto());

View File

@ -5587,6 +5587,8 @@ class CliClient final : public Actor {
send_request(td_api::make_object<td_api::getRecentEmojiStatuses>());
} else if (op == "cres") {
send_request(td_api::make_object<td_api::clearRecentEmojiStatuses>());
} else if (op == "gtces") {
send_request(td_api::make_object<td_api::getThemedChatEmojiStatuses>());
} else if (op == "ccun") {
ChatId chat_id;
string username;