Add check_business_connection_chat_id.

This commit is contained in:
levlam 2024-06-11 23:12:04 +03:00
parent bd31c2a9ce
commit a879acc49d
2 changed files with 60 additions and 84 deletions

View File

@ -6074,6 +6074,21 @@ void Client::check_business_connection(const td::string &business_connection_id,
td::make_unique<TdOnCheckBusinessConnectionCallback<OnSuccess>>(this, std::move(query), std::move(on_success))); td::make_unique<TdOnCheckBusinessConnectionCallback<OnSuccess>>(this, std::move(query), std::move(on_success)));
} }
template <class OnSuccess>
void Client::check_business_connection_chat_id(const td::string &business_connection_id, const td::string &chat_id_str,
PromisedQueryPtr query, OnSuccess on_success) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str);
if (r_chat_id.is_error()) {
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message());
}
auto chat_id = r_chat_id.move_as_ok();
check_business_connection(business_connection_id, std::move(query),
[this, chat_id, on_success = std::move(on_success)](
const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
on_success(business_connection, chat_id, std::move(query));
});
}
template <class OnSuccess> template <class OnSuccess>
void Client::check_bot_command_scope(BotCommandScope &&scope, PromisedQueryPtr query, OnSuccess on_success) { void Client::check_bot_command_scope(BotCommandScope &&scope, PromisedQueryPtr query, OnSuccess on_success) {
CHECK(scope.scope_ != nullptr); CHECK(scope.scope_ != nullptr);
@ -10059,15 +10074,10 @@ td::Status Client::process_stop_poll_query(PromisedQueryPtr &query) {
[this, business_connection_id = business_connection_id.str(), chat_id_str = chat_id.str(), message_id]( [this, business_connection_id = business_connection_id.str(), chat_id_str = chat_id.str(), message_id](
object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) { object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, reply_markup = std::move(reply_markup)](
} const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
auto chat_id = r_chat_id.move_as_ok();
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id, reply_markup = std::move(reply_markup)](
const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
send_request( send_request(
make_object<td_api::stopBusinessPoll>(business_connection_id, chat_id, message_id, make_object<td_api::stopBusinessPoll>(business_connection_id, chat_id, message_id,
std::move(reply_markup)), std::move(reply_markup)),
@ -10224,17 +10234,11 @@ td::Status Client::process_send_media_group_query(PromisedQueryPtr &query) {
input_message_contents = std::move(input_message_contents)](object_ptr<td_api::ReplyMarkup> reply_markup, input_message_contents = std::move(input_message_contents)](object_ptr<td_api::ReplyMarkup> reply_markup,
PromisedQueryPtr query) mutable { PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, reply_parameters = std::move(reply_parameters), disable_notification, protect_content, effect_id,
} input_message_contents = std::move(input_message_contents), reply_markup = std::move(reply_markup)](
auto chat_id = r_chat_id.move_as_ok(); const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
return check_business_connection(
business_connection_id, std::move(query),
[this, chat_id, reply_parameters = std::move(reply_parameters), disable_notification, protect_content,
effect_id, input_message_contents = std::move(input_message_contents),
reply_markup = std::move(reply_markup)](const BusinessConnection *business_connection,
PromisedQueryPtr query) mutable {
send_request( send_request(
make_object<td_api::sendBusinessMessageAlbum>( make_object<td_api::sendBusinessMessageAlbum>(
business_connection->id_, chat_id, get_input_message_reply_to(std::move(reply_parameters)), business_connection->id_, chat_id, get_input_message_reply_to(std::move(reply_parameters)),
@ -10277,11 +10281,10 @@ td::Status Client::process_send_chat_action_query(PromisedQueryPtr &query) {
return td::Status::Error(400, "Wrong parameter action in request"); return td::Status::Error(400, "Wrong parameter action in request");
} }
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
TRY_RESULT(chat_id, get_business_connection_chat_id(chat_id_str)); check_business_connection_chat_id(
check_business_connection( business_connection_id, chat_id_str.str(), std::move(query),
business_connection_id, std::move(query), [this, action = std::move(action)](const BusinessConnection *business_connection, int64 chat_id,
[this, chat_id, action = std::move(action)](const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
PromisedQueryPtr query) mutable {
send_request(make_object<td_api::sendChatAction>(chat_id, 0, business_connection->id_, std::move(action)), send_request(make_object<td_api::sendChatAction>(chat_id, 0, business_connection->id_, std::move(action)),
td::make_unique<TdOnOkQueryCallback>(std::move(query))); td::make_unique<TdOnOkQueryCallback>(std::move(query)));
}); });
@ -10337,15 +10340,10 @@ td::Status Client::process_edit_message_text_query(PromisedQueryPtr &query) {
input_message_text = std::move(input_message_text)](object_ptr<td_api::ReplyMarkup> reply_markup, input_message_text = std::move(input_message_text)](object_ptr<td_api::ReplyMarkup> reply_markup,
PromisedQueryPtr query) mutable { PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, input_message_text = std::move(input_message_text),
} reply_markup = std::move(reply_markup)](const BusinessConnection *business_connection, int64 chat_id,
auto chat_id = r_chat_id.move_as_ok();
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id, input_message_text = std::move(input_message_text),
reply_markup = std::move(reply_markup)](const BusinessConnection *business_connection,
PromisedQueryPtr query) mutable { PromisedQueryPtr query) mutable {
send_request(make_object<td_api::editBusinessMessageText>(business_connection_id, chat_id, message_id, send_request(make_object<td_api::editBusinessMessageText>(business_connection_id, chat_id, message_id,
std::move(reply_markup), std::move(reply_markup),
@ -10399,16 +10397,11 @@ td::Status Client::process_edit_message_live_location_query(PromisedQueryPtr &qu
location = std::move(location), live_period, heading, location = std::move(location), live_period, heading,
proximity_alert_radius](object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) mutable { proximity_alert_radius](object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, location = std::move(location), live_period, heading,
} proximity_alert_radius, reply_markup = std::move(reply_markup)](
auto chat_id = r_chat_id.move_as_ok(); const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id, location = std::move(location), live_period,
heading, proximity_alert_radius, reply_markup = std::move(reply_markup)](
const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
send_request(make_object<td_api::editBusinessMessageLiveLocation>( send_request(make_object<td_api::editBusinessMessageLiveLocation>(
business_connection_id, chat_id, message_id, std::move(reply_markup), business_connection_id, chat_id, message_id, std::move(reply_markup),
std::move(location), live_period, heading, proximity_alert_radius), std::move(location), live_period, heading, proximity_alert_radius),
@ -10455,16 +10448,11 @@ td::Status Client::process_edit_message_media_query(PromisedQueryPtr &query) {
input_message_content = std::move(input_media)](object_ptr<td_api::ReplyMarkup> reply_markup, input_message_content = std::move(input_media)](object_ptr<td_api::ReplyMarkup> reply_markup,
PromisedQueryPtr query) mutable { PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, input_message_content = std::move(input_message_content),
} reply_markup = std::move(reply_markup)](const BusinessConnection *business_connection, int64 chat_id,
auto chat_id = r_chat_id.move_as_ok(); PromisedQueryPtr query) mutable {
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id,
input_message_content = std::move(input_message_content), reply_markup = std::move(reply_markup)](
const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
send_request(make_object<td_api::editBusinessMessageMedia>(business_connection_id, chat_id, send_request(make_object<td_api::editBusinessMessageMedia>(business_connection_id, chat_id,
message_id, std::move(reply_markup), message_id, std::move(reply_markup),
std::move(input_message_content)), std::move(input_message_content)),
@ -10511,16 +10499,11 @@ td::Status Client::process_edit_message_caption_query(PromisedQueryPtr &query) {
caption = std::move(caption), caption = std::move(caption),
show_caption_above_media](object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) mutable { show_caption_above_media](object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, reply_markup = std::move(reply_markup),
} caption = std::move(caption), show_caption_above_media](
auto chat_id = r_chat_id.move_as_ok(); const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id, reply_markup = std::move(reply_markup),
caption = std::move(caption), show_caption_above_media](const BusinessConnection *business_connection,
PromisedQueryPtr query) mutable {
send_request(make_object<td_api::editBusinessMessageCaption>( send_request(make_object<td_api::editBusinessMessageCaption>(
business_connection_id, chat_id, message_id, std::move(reply_markup), business_connection_id, chat_id, message_id, std::move(reply_markup),
std::move(caption), show_caption_above_media), std::move(caption), show_caption_above_media),
@ -10563,15 +10546,10 @@ td::Status Client::process_edit_message_reply_markup_query(PromisedQueryPtr &que
[this, business_connection_id = business_connection_id.str(), chat_id_str = chat_id.str(), message_id]( [this, business_connection_id = business_connection_id.str(), chat_id_str = chat_id.str(), message_id](
object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) { object_ptr<td_api::ReplyMarkup> reply_markup, PromisedQueryPtr query) {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, business_connection_id, message_id, reply_markup = std::move(reply_markup)](
} const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
auto chat_id = r_chat_id.move_as_ok();
return check_business_connection(
business_connection_id, std::move(query),
[this, business_connection_id, chat_id, message_id, reply_markup = std::move(reply_markup)](
const BusinessConnection *business_connection, PromisedQueryPtr query) mutable {
send_request(make_object<td_api::editBusinessMessageReplyMarkup>(business_connection_id, chat_id, send_request(make_object<td_api::editBusinessMessageReplyMarkup>(business_connection_id, chat_id,
message_id, std::move(reply_markup)), message_id, std::move(reply_markup)),
td::make_unique<TdOnReturnBusinessMessageCallback>(this, business_connection_id, td::make_unique<TdOnReturnBusinessMessageCallback>(this, business_connection_id,
@ -12188,17 +12166,11 @@ void Client::do_send_message(object_ptr<td_api::InputMessageContent> input_messa
input_message_content = std::move(input_message_content)](object_ptr<td_api::ReplyMarkup> reply_markup, input_message_content = std::move(input_message_content)](object_ptr<td_api::ReplyMarkup> reply_markup,
PromisedQueryPtr query) mutable { PromisedQueryPtr query) mutable {
if (!business_connection_id.empty()) { if (!business_connection_id.empty()) {
auto r_chat_id = get_business_connection_chat_id(chat_id_str); return check_business_connection_chat_id(
if (r_chat_id.is_error()) { business_connection_id, chat_id_str, std::move(query),
return fail_query_with_error(std::move(query), 400, r_chat_id.error().message()); [this, reply_parameters = std::move(reply_parameters), disable_notification, protect_content, effect_id,
} reply_markup = std::move(reply_markup), input_message_content = std::move(input_message_content)](
auto chat_id = r_chat_id.move_as_ok(); const BusinessConnection *business_connection, int64 chat_id, PromisedQueryPtr query) mutable {
return check_business_connection(
business_connection_id, std::move(query),
[this, chat_id, reply_parameters = std::move(reply_parameters), disable_notification, protect_content,
effect_id, reply_markup = std::move(reply_markup),
input_message_content = std::move(input_message_content)](const BusinessConnection *business_connection,
PromisedQueryPtr query) mutable {
send_request(make_object<td_api::sendBusinessMessage>( send_request(make_object<td_api::sendBusinessMessage>(
business_connection->id_, chat_id, business_connection->id_, chat_id,
get_input_message_reply_to(std::move(reply_parameters)), disable_notification, get_input_message_reply_to(std::move(reply_parameters)), disable_notification,

View File

@ -344,6 +344,10 @@ class Client final : public WebhookActor::Callback {
void check_business_connection(const td::string &business_connection_id, PromisedQueryPtr query, void check_business_connection(const td::string &business_connection_id, PromisedQueryPtr query,
OnSuccess on_success); OnSuccess on_success);
template <class OnSuccess>
void check_business_connection_chat_id(const td::string &business_connection_id, const td::string &chat_id_str,
PromisedQueryPtr query, OnSuccess on_success);
template <class OnSuccess> template <class OnSuccess>
void check_bot_command_scope(BotCommandScope &&scope, PromisedQueryPtr query, OnSuccess on_success); void check_bot_command_scope(BotCommandScope &&scope, PromisedQueryPtr query, OnSuccess on_success);