Replace td_api::keyboardButtonTypeRequestUser with td_api::keyboardButtonTypeRequestUsers.

This commit is contained in:
levlam 2023-12-22 18:06:40 +03:00
parent 9f9884f2f5
commit 590b3f3c25
5 changed files with 49 additions and 24 deletions

View File

@ -1725,13 +1725,14 @@ keyboardButtonTypeRequestLocation = KeyboardButtonType;
//@description A button that allows the user to create and send a poll when pressed; available only in private chats @force_regular If true, only regular polls must be allowed to create @force_quiz If true, only polls in quiz mode must be allowed to create
keyboardButtonTypeRequestPoll force_regular:Bool force_quiz:Bool = KeyboardButtonType;
//@description A button that requests a user to be shared by the current user; available only in private chats. Use the method shareUserWithBot to complete the request
//@description A button that requests users to be shared by the current user; available only in private chats. Use the method shareUsersWithBot to complete the request
//@id Unique button identifier
//@restrict_user_is_bot True, if the shared user must or must not be a bot
//@user_is_bot True, if the shared user must be a bot; otherwise, the shared user must no be a bot. Ignored if restrict_user_is_bot is false
//@restrict_user_is_premium True, if the shared user must or must not be a Telegram Premium user
//@user_is_premium True, if the shared user must be a Telegram Premium user; otherwise, the shared user must no be a Telegram Premium user. Ignored if restrict_user_is_premium is false
keyboardButtonTypeRequestUser id:int32 restrict_user_is_bot:Bool user_is_bot:Bool restrict_user_is_premium:Bool user_is_premium:Bool = KeyboardButtonType;
//@restrict_user_is_bot True, if the shared users must or must not be bots
//@user_is_bot True, if the shared users must be bots; otherwise, the shared users must not be bots. Ignored if restrict_user_is_bot is false
//@restrict_user_is_premium True, if the shared users must or must not be Telegram Premium users
//@user_is_premium True, if the shared users must be Telegram Premium users; otherwise, the shared users must not be Telegram Premium users. Ignored if restrict_user_is_premium is false
//@max_quantity The maximum number of users to share
keyboardButtonTypeRequestUsers id:int32 restrict_user_is_bot:Bool user_is_bot:Bool restrict_user_is_premium:Bool user_is_premium:Bool max_quantity:int32 = KeyboardButtonType;
//@description A button that requests a chat to be shared by the current user; available only in private chats. Use the method shareChatWithBot to complete the request
//@id Unique button identifier
@ -7573,7 +7574,7 @@ getLoginUrlInfo chat_id:int53 message_id:int53 button_id:int53 = LoginUrlInfo;
getLoginUrl chat_id:int53 message_id:int53 button_id:int53 allow_write_access:Bool = HttpUrl;
//@description Shares a user after pressing a keyboardButtonTypeRequestUser button with the bot
//@description Shares a user after pressing a keyboardButtonTypeRequestUsers button with the bot
//@chat_id Identifier of the chat with the bot
//@message_id Identifier of the message with the button
//@button_id Identifier of the button

View File

@ -244,8 +244,8 @@ static KeyboardButton get_keyboard_button(tl_object_ptr<telegram_api::KeyboardBu
auto keyboard_button = move_tl_object_as<telegram_api::keyboardButtonRequestPeer>(keyboard_button_ptr);
button.type = KeyboardButton::Type::RequestDialog;
button.text = std::move(keyboard_button->text_);
button.requested_dialog_type =
td::make_unique<RequestedDialogType>(std::move(keyboard_button->peer_type_), keyboard_button->button_id_);
button.requested_dialog_type = td::make_unique<RequestedDialogType>(
std::move(keyboard_button->peer_type_), keyboard_button->button_id_, keyboard_button->max_quantity_);
break;
}
default:
@ -525,11 +525,11 @@ static Result<KeyboardButton> get_keyboard_button(tl_object_ptr<td_api::keyboard
current_button.url = std::move(button_type->url_);
break;
}
case td_api::keyboardButtonTypeRequestUser::ID: {
case td_api::keyboardButtonTypeRequestUsers::ID: {
if (!request_buttons_allowed) {
return Status::Error(400, "Users can be requested in private chats only");
}
auto button_type = move_tl_object_as<td_api::keyboardButtonTypeRequestUser>(button->type_);
auto button_type = move_tl_object_as<td_api::keyboardButtonTypeRequestUsers>(button->type_);
current_button.type = KeyboardButton::Type::RequestDialog;
current_button.requested_dialog_type = td::make_unique<RequestedDialogType>(std::move(button_type));
break;
@ -865,9 +865,11 @@ static tl_object_ptr<telegram_api::KeyboardButton> get_input_keyboard_button(con
case KeyboardButton::Type::WebView:
return make_tl_object<telegram_api::keyboardButtonSimpleWebView>(keyboard_button.text, keyboard_button.url);
case KeyboardButton::Type::RequestDialog:
CHECK(keyboard_button.requested_dialog_type != nullptr);
return make_tl_object<telegram_api::keyboardButtonRequestPeer>(
keyboard_button.text, keyboard_button.requested_dialog_type->get_button_id(),
keyboard_button.requested_dialog_type->get_input_request_peer_type_object(), 1);
keyboard_button.requested_dialog_type->get_input_request_peer_type_object(),
keyboard_button.requested_dialog_type->get_max_quantity());
default:
UNREACHABLE();
return nullptr;

View File

@ -12,14 +12,15 @@
namespace td {
RequestedDialogType::RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestUser> &&request_user) {
CHECK(request_user != nullptr);
RequestedDialogType::RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestUsers> &&request_users) {
CHECK(request_users != nullptr);
type_ = Type::User;
button_id_ = request_user->id_;
restrict_is_bot_ = request_user->restrict_user_is_bot_;
is_bot_ = request_user->user_is_bot_;
restrict_is_premium_ = request_user->restrict_user_is_premium_;
is_premium_ = request_user->user_is_premium_;
button_id_ = request_users->id_;
max_quantity_ = request_users->max_quantity_;
restrict_is_bot_ = request_users->restrict_user_is_bot_;
is_bot_ = request_users->user_is_bot_;
restrict_is_premium_ = request_users->restrict_user_is_premium_;
is_premium_ = request_users->user_is_premium_;
}
RequestedDialogType::RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestChat> &&request_dialog) {
@ -40,9 +41,10 @@ RequestedDialogType::RequestedDialogType(td_api::object_ptr<td_api::keyboardButt
}
RequestedDialogType::RequestedDialogType(telegram_api::object_ptr<telegram_api::RequestPeerType> &&peer_type,
int32 button_id) {
int32 button_id, int32 max_quantity) {
CHECK(peer_type != nullptr);
button_id_ = button_id;
max_quantity_ = max_quantity;
switch (peer_type->get_id()) {
case telegram_api::requestPeerTypeUser::ID: {
auto type = telegram_api::move_object_as<telegram_api::requestPeerTypeUser>(peer_type);
@ -87,8 +89,8 @@ RequestedDialogType::RequestedDialogType(telegram_api::object_ptr<telegram_api::
td_api::object_ptr<td_api::KeyboardButtonType> RequestedDialogType::get_keyboard_button_type_object() const {
if (type_ == Type::User) {
return td_api::make_object<td_api::keyboardButtonTypeRequestUser>(button_id_, restrict_is_bot_, is_bot_,
restrict_is_premium_, is_premium_);
return td_api::make_object<td_api::keyboardButtonTypeRequestUsers>(
button_id_, restrict_is_bot_, is_bot_, restrict_is_premium_, is_premium_, max_quantity_);
} else {
auto user_administrator_rights = restrict_user_administrator_rights_
? user_administrator_rights_.get_chat_administrator_rights_object()
@ -173,6 +175,10 @@ int32 RequestedDialogType::get_button_id() const {
return button_id_;
}
int32 RequestedDialogType::get_max_quantity() const {
return max_quantity_;
}
Status RequestedDialogType::check_shared_dialog(Td *td, DialogId dialog_id) const {
switch (dialog_id.get_type()) {
case DialogType::User: {

View File

@ -22,6 +22,7 @@ class RequestedDialogType {
enum class Type : int32 { User, Group, Channel };
Type type_ = Type::User;
int32 button_id_ = 0;
int32 max_quantity_ = 1; // User only
bool restrict_is_bot_ = false; // User only
bool is_bot_ = false; // User only
bool restrict_is_premium_ = false; // User only
@ -41,11 +42,12 @@ class RequestedDialogType {
public:
RequestedDialogType() = default;
explicit RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestUser> &&request_user);
explicit RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestUsers> &&request_users);
explicit RequestedDialogType(td_api::object_ptr<td_api::keyboardButtonTypeRequestChat> &&request_dialog);
explicit RequestedDialogType(telegram_api::object_ptr<telegram_api::RequestPeerType> &&peer_type, int32 button_id);
explicit RequestedDialogType(telegram_api::object_ptr<telegram_api::RequestPeerType> &&peer_type, int32 button_id,
int32 max_quantity);
td_api::object_ptr<td_api::KeyboardButtonType> get_keyboard_button_type_object() const;
@ -53,6 +55,8 @@ class RequestedDialogType {
int32 get_button_id() const;
int32 get_max_quantity() const;
Status check_shared_dialog(Td *td, DialogId dialog_id) const;
template <class StorerT>

View File

@ -14,6 +14,7 @@ namespace td {
template <class StorerT>
void RequestedDialogType::store(StorerT &storer) const {
bool has_max_quantity = max_quantity_ != 1;
BEGIN_STORE_FLAGS();
STORE_FLAG(restrict_is_bot_);
STORE_FLAG(is_bot_);
@ -27,6 +28,7 @@ void RequestedDialogType::store(StorerT &storer) const {
STORE_FLAG(is_created_);
STORE_FLAG(restrict_user_administrator_rights_);
STORE_FLAG(restrict_bot_administrator_rights_);
STORE_FLAG(has_max_quantity);
END_STORE_FLAGS();
td::store(type_, storer);
td::store(button_id_, storer);
@ -36,10 +38,14 @@ void RequestedDialogType::store(StorerT &storer) const {
if (restrict_bot_administrator_rights_) {
td::store(bot_administrator_rights_, storer);
}
if (has_max_quantity) {
td::store(max_quantity_, storer);
}
}
template <class ParserT>
void RequestedDialogType::parse(ParserT &parser) {
bool has_max_quantity;
BEGIN_PARSE_FLAGS();
PARSE_FLAG(restrict_is_bot_);
PARSE_FLAG(is_bot_);
@ -53,6 +59,7 @@ void RequestedDialogType::parse(ParserT &parser) {
PARSE_FLAG(is_created_);
PARSE_FLAG(restrict_user_administrator_rights_);
PARSE_FLAG(restrict_bot_administrator_rights_);
PARSE_FLAG(has_max_quantity);
END_PARSE_FLAGS();
td::parse(type_, parser);
td::parse(button_id_, parser);
@ -62,6 +69,11 @@ void RequestedDialogType::parse(ParserT &parser) {
if (restrict_bot_administrator_rights_) {
td::parse(bot_administrator_rights_, parser);
}
if (has_max_quantity) {
td::parse(max_quantity_, parser);
} else {
max_quantity_ = 1;
}
}
} // namespace td