Update layer 109. Add keyboardButtonTypeRequestPoll.
GitOrigin-RevId: eae6bb600cef6eb4d9386c4dc2a762d065b1fa09
This commit is contained in:
parent
f3130ea7fb
commit
fa31f168b5
@ -735,6 +735,9 @@ keyboardButtonTypeRequestPhoneNumber = KeyboardButtonType;
|
||||
//@description A button that sends the user's location when pressed; available only in private chats
|
||||
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 should be allowed to create @force_quiz If true, only quiz mode polls should be allowed to create
|
||||
keyboardButtonTypeRequestPoll force_regular:Bool force_quiz:Bool = KeyboardButtonType;
|
||||
|
||||
|
||||
//@description Represents a single button in a bot keyboard @text Text of the button @type Type of the button
|
||||
keyboardButton text:string type:KeyboardButtonType = KeyboardButton;
|
||||
@ -1562,7 +1565,7 @@ inputMessageGame bot_user_id:int32 game_short_name:string = InputMessageContent;
|
||||
//@payload The invoice payload @provider_token Payment provider token @provider_data JSON-encoded data about the invoice, which will be shared with the payment provider @start_parameter Unique invoice bot start_parameter for the generation of this invoice
|
||||
inputMessageInvoice invoice:invoice title:string description:string photo_url:string photo_size:int32 photo_width:int32 photo_height:int32 payload:bytes provider_token:string provider_data:string start_parameter:string = InputMessageContent;
|
||||
|
||||
//@description A message with a poll. Polls can't be sent to secret chats. Polls can be sent to private chats only by bots @question Poll question, 1-255 characters @options List of poll answer options, 2-10 strings 1-100 characters each
|
||||
//@description A message with a poll. Polls can't be sent to secret chats. Polls can be sent to private chats if this is a private chat with self or with a bot only @question Poll question, 1-255 characters @options List of poll answer options, 2-10 strings 1-100 characters each
|
||||
//@is_anonymous True, if the poll voters are anonymous. Non-anonymous polls can't be sent or forwarded to channels @type Type of the poll
|
||||
inputMessagePoll question:string options:vector<string> is_anonymous:Bool type:PollType = InputMessageContent;
|
||||
|
||||
|
Binary file not shown.
@ -534,6 +534,7 @@ keyboardButtonGame#50f41ccf text:string = KeyboardButton;
|
||||
keyboardButtonBuy#afd93fbb text:string = KeyboardButton;
|
||||
keyboardButtonUrlAuth#10b78d29 flags:# text:string fwd_text:flags.0?string url:string button_id:int = KeyboardButton;
|
||||
inputKeyboardButtonUrlAuth#d02e7fd4 flags:# request_write_access:flags.0?true text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton;
|
||||
keyboardButtonRequestPoll#bbc7515d flags:# quiz:flags.0?Bool text:string = KeyboardButton;
|
||||
|
||||
keyboardButtonRow#77608b83 buttons:Vector<KeyboardButton> = KeyboardButtonRow;
|
||||
|
||||
|
Binary file not shown.
@ -17785,8 +17785,9 @@ Status MessagesManager::can_send_message_content(DialogId dialog_id, const Messa
|
||||
auto content_type = content->get_type();
|
||||
switch (dialog_type) {
|
||||
case DialogType::User:
|
||||
if (content_type == MessageContentType::Poll && !is_forward && !td_->auth_manager_->is_bot() && !is_via_bot) {
|
||||
return Status::Error(400, "Polls can't be sent to private chats");
|
||||
if (content_type == MessageContentType::Poll && !is_forward && !td_->auth_manager_->is_bot() && !is_via_bot &&
|
||||
!td_->contacts_manager_->is_user_bot(dialog_id.get_user_id()) && dialog_id != get_my_dialog_id()) {
|
||||
return Status::Error(400, "Polls can't be sent to the private chat");
|
||||
}
|
||||
break;
|
||||
case DialogType::Chat:
|
||||
|
@ -41,6 +41,15 @@ static StringBuilder &operator<<(StringBuilder &string_builder, const KeyboardBu
|
||||
case KeyboardButton::Type::RequestLocation:
|
||||
string_builder << "RequestLocation";
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPoll:
|
||||
string_builder << "RequestPoll";
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPollQuiz:
|
||||
string_builder << "RequestPollQuiz";
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPollRegular:
|
||||
string_builder << "RequestPollRegular";
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
@ -175,6 +184,20 @@ static KeyboardButton get_keyboard_button(tl_object_ptr<telegram_api::KeyboardBu
|
||||
button.text = std::move(keyboard_button->text_);
|
||||
break;
|
||||
}
|
||||
case telegram_api::keyboardButtonRequestPoll::ID: {
|
||||
auto keyboard_button = move_tl_object_as<telegram_api::keyboardButtonRequestPoll>(keyboard_button_ptr);
|
||||
if (keyboard_button->flags_ & telegram_api::keyboardButtonRequestPoll::QUIZ_MASK) {
|
||||
if (keyboard_button->quiz_) {
|
||||
button.type = KeyboardButton::Type::RequestPollQuiz;
|
||||
} else {
|
||||
button.type = KeyboardButton::Type::RequestPollRegular;
|
||||
}
|
||||
} else {
|
||||
button.type = KeyboardButton::Type::RequestPoll;
|
||||
}
|
||||
button.text = std::move(keyboard_button->text_);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
LOG(ERROR) << "Unsupported keyboard button: " << to_string(keyboard_button_ptr);
|
||||
}
|
||||
@ -346,16 +369,33 @@ static Result<KeyboardButton> get_keyboard_button(tl_object_ptr<td_api::keyboard
|
||||
break;
|
||||
case td_api::keyboardButtonTypeRequestPhoneNumber::ID:
|
||||
if (!request_buttons_allowed) {
|
||||
return Status::Error(400, "Phone number can be requested in a private chats only");
|
||||
return Status::Error(400, "Phone number can be requested in private chats only");
|
||||
}
|
||||
current_button.type = KeyboardButton::Type::RequestPhoneNumber;
|
||||
break;
|
||||
case td_api::keyboardButtonTypeRequestLocation::ID:
|
||||
if (!request_buttons_allowed) {
|
||||
return Status::Error(400, "Location can be requested in a private chats only");
|
||||
return Status::Error(400, "Location can be requested in private chats only");
|
||||
}
|
||||
current_button.type = KeyboardButton::Type::RequestLocation;
|
||||
break;
|
||||
case td_api::keyboardButtonTypeRequestPoll::ID: {
|
||||
if (!request_buttons_allowed) {
|
||||
return Status::Error(400, "Poll can be requested in private chats only");
|
||||
}
|
||||
auto *request_poll = static_cast<const td_api::keyboardButtonTypeRequestPoll *>(button->type_.get());
|
||||
if (request_poll->force_quiz_ && request_poll->force_regular_) {
|
||||
return Status::Error(400, "Can't force quiz mode and regular poll simultaneously");
|
||||
}
|
||||
if (request_poll->force_quiz_) {
|
||||
current_button.type = KeyboardButton::Type::RequestPollQuiz;
|
||||
} else if (request_poll->force_regular_) {
|
||||
current_button.type = KeyboardButton::Type::RequestPollRegular;
|
||||
} else {
|
||||
current_button.type = KeyboardButton::Type::RequestPoll;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
@ -560,6 +600,12 @@ static tl_object_ptr<telegram_api::KeyboardButton> get_keyboard_button(const Key
|
||||
return make_tl_object<telegram_api::keyboardButtonRequestPhone>(keyboard_button.text);
|
||||
case KeyboardButton::Type::RequestLocation:
|
||||
return make_tl_object<telegram_api::keyboardButtonRequestGeoLocation>(keyboard_button.text);
|
||||
case KeyboardButton::Type::RequestPoll:
|
||||
return make_tl_object<telegram_api::keyboardButtonRequestPoll>(0, false, keyboard_button.text);
|
||||
case KeyboardButton::Type::RequestPollQuiz:
|
||||
return make_tl_object<telegram_api::keyboardButtonRequestPoll>(1, true, keyboard_button.text);
|
||||
case KeyboardButton::Type::RequestPollRegular:
|
||||
return make_tl_object<telegram_api::keyboardButtonRequestPoll>(1, false, keyboard_button.text);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
@ -674,6 +720,15 @@ static tl_object_ptr<td_api::keyboardButton> get_keyboard_button_object(const Ke
|
||||
case KeyboardButton::Type::RequestLocation:
|
||||
type = make_tl_object<td_api::keyboardButtonTypeRequestLocation>();
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPoll:
|
||||
type = make_tl_object<td_api::keyboardButtonTypeRequestPoll>(false, false);
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPollQuiz:
|
||||
type = make_tl_object<td_api::keyboardButtonTypeRequestPoll>(false, true);
|
||||
break;
|
||||
case KeyboardButton::Type::RequestPollRegular:
|
||||
type = make_tl_object<td_api::keyboardButtonTypeRequestPoll>(true, false);
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
|
@ -17,7 +17,14 @@ namespace td {
|
||||
|
||||
struct KeyboardButton {
|
||||
// append only
|
||||
enum class Type : int32 { Text, RequestPhoneNumber, RequestLocation };
|
||||
enum class Type : int32 {
|
||||
Text,
|
||||
RequestPhoneNumber,
|
||||
RequestLocation,
|
||||
RequestPoll,
|
||||
RequestPollQuiz,
|
||||
RequestPollRegular
|
||||
};
|
||||
Type type;
|
||||
string text;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user