Add td_api::setBirthdate.

This commit is contained in:
levlam 2024-03-21 14:04:40 +03:00
parent 9b55b61983
commit f361989c05
6 changed files with 85 additions and 0 deletions

View File

@ -9488,6 +9488,9 @@ toggleUsernameIsActive username:string is_active:Bool = Ok;
//@description Changes order of active usernames of the current user @usernames The new order of active usernames. All currently active usernames must be specified
reorderActiveUsernames usernames:vector<string> = Ok;
//@description Changes the birthdate of the current user @birthdate The new value of the current user's birthdate; pass null to remove the birthdate
setBirthdate birthdate:birthdate = Ok;
//@description Changes the emoji status of the current user; for Telegram Premium users only @emoji_status New emoji status; pass null to switch to the default badge
setEmojiStatus emoji_status:emojiStatus = Ok;

View File

@ -1000,6 +1000,41 @@ class ReorderBotUsernamesQuery final : public Td::ResultHandler {
}
};
class UpdateBirthdayQuery final : public Td::ResultHandler {
Promise<Unit> promise_;
public:
explicit UpdateBirthdayQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
}
void send(const Birthdate &birthdate) {
int32 flags = 0;
if (!birthdate.is_empty()) {
flags |= telegram_api::account_updateBirthday::BIRTHDAY_MASK;
}
send_query(G()->net_query_creator().create(
telegram_api::account_updateBirthday(flags, birthdate.get_input_birthday()), {{"me"}}));
}
void on_result(BufferSlice packet) final {
auto result_ptr = fetch_result<telegram_api::account_updateBirthday>(packet);
if (result_ptr.is_error()) {
return on_error(result_ptr.move_as_error());
}
LOG(DEBUG) << "Receive result for UpdateBirthdayQuery: " << result_ptr.ok();
if (result_ptr.ok()) {
promise_.set_value(Unit());
} else {
promise_.set_error(Status::Error(400, "Failed to change birthdate"));
}
}
void on_error(Status status) final {
promise_.set_error(std::move(status));
}
};
class UpdateEmojiStatusQuery final : public Td::ResultHandler {
Promise<Unit> promise_;
@ -6325,6 +6360,29 @@ void ContactsManager::reorder_bot_usernames(UserId bot_user_id, vector<string> &
td_->create_handler<ReorderBotUsernamesQuery>(std::move(promise))->send(bot_user_id, std::move(usernames));
}
void ContactsManager::set_birthdate(Birthdate &&birthdate, Promise<Unit> &&promise) {
auto query_promise = PromiseCreator::lambda(
[actor_id = actor_id(this), birthdate, promise = std::move(promise)](Result<Unit> result) mutable {
if (result.is_ok()) {
send_closure(actor_id, &ContactsManager::on_set_birthdate, birthdate, std::move(promise));
} else {
promise.set_error(result.move_as_error());
}
});
td_->create_handler<UpdateBirthdayQuery>(std::move(query_promise))->send(birthdate);
}
void ContactsManager::on_set_birthdate(Birthdate birthdate, Promise<Unit> &&promise) {
auto my_user_id = get_my_id();
UserFull *user_full = get_user_full_force(my_user_id, "on_set_birthdate");
if (user_full != nullptr) {
user_full->birthdate = std::move(birthdate);
user_full->is_changed = true;
update_user_full(user_full, my_user_id, "on_set_birthdate");
}
promise.set_value(Unit());
}
void ContactsManager::set_emoji_status(const EmojiStatus &emoji_status, Promise<Unit> &&promise) {
if (!td_->option_manager_->get_option_boolean("is_premium")) {
return promise.set_error(Status::Error(400, "The method is available only to Telegram Premium users"));

View File

@ -460,6 +460,8 @@ class ContactsManager final : public Actor {
void reorder_bot_usernames(UserId bot_user_id, vector<string> &&usernames, Promise<Unit> &&promise);
void set_birthdate(Birthdate &&birthdate, Promise<Unit> &&promise);
void set_emoji_status(const EmojiStatus &emoji_status, Promise<Unit> &&promise);
void set_chat_description(ChatId chat_id, const string &description, Promise<Unit> &&promise);
@ -1292,6 +1294,8 @@ class ContactsManager final : public Actor {
void set_my_id(UserId my_id);
void on_set_birthdate(Birthdate birthdate, Promise<Unit> &&promise);
void on_set_emoji_status(EmojiStatus emoji_status, Promise<Unit> &&promise);
void on_update_user_name(User *u, UserId user_id, string &&first_name, string &&last_name);

View File

@ -18,6 +18,7 @@
#include "td/telegram/BackgroundId.h"
#include "td/telegram/BackgroundManager.h"
#include "td/telegram/BackgroundType.h"
#include "td/telegram/Birthdate.h"
#include "td/telegram/BoostManager.h"
#include "td/telegram/BotCommand.h"
#include "td/telegram/BotInfoManager.h"
@ -7661,6 +7662,12 @@ void Td::on_request(uint64 id, td_api::reorderActiveUsernames &request) {
contacts_manager_->reorder_usernames(std::move(request.usernames_), std::move(promise));
}
void Td::on_request(uint64 id, td_api::setBirthdate &request) {
CHECK_IS_USER();
CREATE_OK_REQUEST_PROMISE();
contacts_manager_->set_birthdate(Birthdate(std::move(request.birthdate_)), std::move(promise));
}
void Td::on_request(uint64 id, const td_api::setEmojiStatus &request) {
CHECK_IS_USER();
CREATE_OK_REQUEST_PROMISE();

View File

@ -1348,6 +1348,8 @@ class Td final : public Actor {
void on_request(uint64 id, td_api::reorderActiveUsernames &request);
void on_request(uint64 id, td_api::setBirthdate &request);
void on_request(uint64 id, const td_api::setEmojiStatus &request);
void on_request(uint64 id, const td_api::getThemedEmojiStatuses &request);

View File

@ -5822,6 +5822,17 @@ class CliClient final : public Actor {
send_request(td_api::make_object<td_api::toggleUsernameIsActive>(username, is_active));
} else if (op == "raun") {
send_request(td_api::make_object<td_api::reorderActiveUsernames>(autosplit_str(args)));
} else if (op == "sbd") {
int32 day;
int32 month;
int32 year;
get_args(args, day, month, year);
if (day == 0) {
send_request(td_api::make_object<td_api::setBirthdate>(nullptr));
} else {
send_request(
td_api::make_object<td_api::setBirthdate>(td_api::make_object<td_api::birthdate>(day, month, year)));
}
} else if (op == "sese") {
send_request(td_api::make_object<td_api::setEmojiStatus>(nullptr));
} else if (op == "ses") {