Add td_api::searchUserByToken.

This commit is contained in:
levlam 2022-12-01 16:54:58 +03:00
parent b340e559bb
commit 6977ac94ed
8 changed files with 58 additions and 1 deletions

View File

@ -6370,9 +6370,13 @@ resendChangePhoneNumberCode = AuthenticationCodeInfo;
//@description Checks the authentication code sent to confirm a new phone number of the user @code Authentication code to check
checkChangePhoneNumberCode code:string = Ok;
//@description Returns an HTTPS link, which can be used to get information about the current user
getUserLink = UserLink;
//@description Searches a user by a token from the user's link @token Token to search for
searchUserByToken token:string = User;
//@description Sets the list of commands supported by the bot for the given user scope and language; for bots only
//@scope The scope to which the commands are relevant; pass null to change commands in the default bot command scope

View File

@ -618,6 +618,36 @@ class ExportContactTokenQuery final : public Td::ResultHandler {
}
};
class ImportContactTokenQuery final : public Td::ResultHandler {
Promise<td_api::object_ptr<td_api::user>> promise_;
public:
explicit ImportContactTokenQuery(Promise<td_api::object_ptr<td_api::user>> &&promise) : promise_(std::move(promise)) {
}
void send(const string &token) {
send_query(G()->net_query_creator().create(telegram_api::contacts_importContactToken(token)));
}
void on_result(BufferSlice packet) final {
auto result_ptr = fetch_result<telegram_api::contacts_importContactToken>(packet);
if (result_ptr.is_error()) {
return on_error(result_ptr.move_as_error());
}
auto user = result_ptr.move_as_ok();
LOG(DEBUG) << "Receive result for ImportContactTokenQuery: " << to_string(user);
auto user_id = ContactsManager::get_user_id(user);
td_->contacts_manager_->on_get_user(std::move(user), "ImportContactTokenQuery");
promise_.set_value(td_->contacts_manager_->get_user_object(user_id));
}
void on_error(Status status) final {
promise_.set_error(std::move(status));
}
};
void set_default_message_ttl(Td *td, int32 message_ttl, Promise<Unit> &&promise) {
td->create_handler<SetDefaultHistoryTtlQuery>(std::move(promise))->send(message_ttl);
}
@ -701,4 +731,8 @@ void export_contact_token(Td *td, Promise<td_api::object_ptr<td_api::userLink>>
td->create_handler<ExportContactTokenQuery>(std::move(promise))->send();
}
void import_contact_token(Td *td, const string &token, Promise<td_api::object_ptr<td_api::user>> &&promise) {
td->create_handler<ImportContactTokenQuery>(std::move(promise))->send(token);
}
} // namespace td

View File

@ -52,4 +52,6 @@ void set_default_channel_administrator_rights(Td *td, AdministratorRights admini
void export_contact_token(Td *td, Promise<td_api::object_ptr<td_api::userLink>> &&promise);
void import_contact_token(Td *td, const string &token, Promise<td_api::object_ptr<td_api::user>> &&promise);
} // namespace td

View File

@ -3402,7 +3402,7 @@ class GetSupportUserQuery final : public Td::ResultHandler {
LOG(INFO) << "Receive result for GetSupportUserQuery: " << to_string(ptr);
auto user_id = ContactsManager::get_user_id(ptr->user_);
td_->contacts_manager_->on_get_user(std::move(ptr->user_), "GetSupportUserQuery", false);
td_->contacts_manager_->on_get_user(std::move(ptr->user_), "GetSupportUserQuery");
promise_.set_value(std::move(user_id));
}
@ -15428,6 +15428,10 @@ void ContactsManager::get_user_link_impl(Promise<td_api::object_ptr<td_api::user
export_contact_token(td_, std::move(promise));
}
void ContactsManager::search_user_by_token(string token, Promise<td_api::object_ptr<td_api::user>> &&promise) {
import_contact_token(td_, token, std::move(promise));
}
void ContactsManager::send_get_me_query(Td *td, Promise<Unit> &&promise) {
vector<tl_object_ptr<telegram_api::InputUser>> users;
users.push_back(make_tl_object<telegram_api::inputUserSelf>());

View File

@ -540,6 +540,8 @@ class ContactsManager final : public Actor {
void get_user_link(Promise<td_api::object_ptr<td_api::userLink>> &&promise);
void search_user_by_token(string token, Promise<td_api::object_ptr<td_api::user>> &&promise);
static void send_get_me_query(Td *td, Promise<Unit> &&promise);
UserId get_me(Promise<Unit> &&promise);
bool get_user(UserId user_id, int left_tries, Promise<Unit> &&promise);

View File

@ -4536,6 +4536,13 @@ void Td::on_request(uint64 id, const td_api::getUserLink &request) {
contacts_manager_->get_user_link(std::move(promise));
}
void Td::on_request(uint64 id, td_api::searchUserByToken &request) {
CHECK_IS_USER();
CLEAN_INPUT_STRING(request.token_);
CREATE_REQUEST_PROMISE();
contacts_manager_->search_user_by_token(std::move(request.token_), std::move(promise));
}
void Td::on_request(uint64 id, const td_api::getActiveSessions &request) {
CHECK_IS_USER();
CREATE_REQUEST_PROMISE();

View File

@ -488,6 +488,8 @@ class Td final : public Actor {
void on_request(uint64 id, const td_api::getUserLink &request);
void on_request(uint64 id, td_api::searchUserByToken &request);
void on_request(uint64 id, const td_api::getActiveSessions &request);
void on_request(uint64 id, const td_api::terminateSession &request);

View File

@ -2173,6 +2173,8 @@ class CliClient final : public Actor {
}
} else if (op == "gul") {
send_request(td_api::make_object<td_api::getUserLink>());
} else if (op == "subt") {
send_request(td_api::make_object<td_api::searchUserByToken>(args));
} else if (op == "AddContact") {
UserId user_id;
string first_name;