Add td_api::chatActionBarManageBusinessBot.
This commit is contained in:
parent
4444f0e328
commit
f9dfd502da
@ -1882,6 +1882,13 @@ chatActionBarSharePhoneNumber = ChatActionBar;
|
|||||||
//@request_date Point in time (Unix timestamp) when the join request was sent
|
//@request_date Point in time (Unix timestamp) when the join request was sent
|
||||||
chatActionBarJoinRequest title:string is_channel:Bool request_date:int32 = ChatActionBar;
|
chatActionBarJoinRequest title:string is_channel:Bool request_date:int32 = ChatActionBar;
|
||||||
|
|
||||||
|
//@description The chat is a private chat administered by a business bot
|
||||||
|
//@bot_user_id User identifier of the bot
|
||||||
|
//@manage_url URL to be opened to manage the bot
|
||||||
|
//@is_bot_paused True, if the bot is paused
|
||||||
|
//@can_bot_reply True, if the bot can reply
|
||||||
|
chatActionBarManageBusinessBot bot_user_id:int53 manage_url:string is_bot_paused:Bool can_bot_reply:Bool = ChatActionBar;
|
||||||
|
|
||||||
|
|
||||||
//@class KeyboardButtonType @description Describes a keyboard button type
|
//@class KeyboardButtonType @description Describes a keyboard button type
|
||||||
|
|
||||||
|
@ -18,12 +18,9 @@ unique_ptr<DialogActionBar> DialogActionBar::create(bool can_report_spam, bool c
|
|||||||
bool can_share_phone_number, bool can_report_location,
|
bool can_share_phone_number, bool can_report_location,
|
||||||
bool can_unarchive, int32 distance, bool can_invite_members,
|
bool can_unarchive, int32 distance, bool can_invite_members,
|
||||||
string join_request_dialog_title, bool is_join_request_broadcast,
|
string join_request_dialog_title, bool is_join_request_broadcast,
|
||||||
int32 join_request_date) {
|
int32 join_request_date, bool is_business_bot_paused,
|
||||||
if (!can_report_spam && !can_add_contact && !can_block_user && !can_share_phone_number && !can_report_location &&
|
bool can_business_bot_reply, UserId business_bot_user_id,
|
||||||
!can_invite_members && join_request_dialog_title.empty()) {
|
string business_bot_manage_url) {
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto action_bar = make_unique<DialogActionBar>();
|
auto action_bar = make_unique<DialogActionBar>();
|
||||||
action_bar->can_report_spam_ = can_report_spam;
|
action_bar->can_report_spam_ = can_report_spam;
|
||||||
action_bar->can_add_contact_ = can_add_contact;
|
action_bar->can_add_contact_ = can_add_contact;
|
||||||
@ -36,12 +33,20 @@ unique_ptr<DialogActionBar> DialogActionBar::create(bool can_report_spam, bool c
|
|||||||
action_bar->join_request_dialog_title_ = std::move(join_request_dialog_title);
|
action_bar->join_request_dialog_title_ = std::move(join_request_dialog_title);
|
||||||
action_bar->is_join_request_broadcast_ = is_join_request_broadcast;
|
action_bar->is_join_request_broadcast_ = is_join_request_broadcast;
|
||||||
action_bar->join_request_date_ = join_request_date;
|
action_bar->join_request_date_ = join_request_date;
|
||||||
|
action_bar->is_business_bot_paused_ = is_business_bot_paused;
|
||||||
|
action_bar->can_business_bot_reply_ = can_business_bot_reply;
|
||||||
|
action_bar->business_bot_user_id_ = business_bot_user_id;
|
||||||
|
action_bar->business_bot_manage_url_ = std::move(business_bot_manage_url);
|
||||||
|
if (action_bar->is_empty()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
return action_bar;
|
return action_bar;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DialogActionBar::is_empty() const {
|
bool DialogActionBar::is_empty() const {
|
||||||
return !can_report_spam_ && !can_add_contact_ && !can_block_user_ && !can_share_phone_number_ &&
|
return !can_report_spam_ && !can_add_contact_ && !can_block_user_ && !can_share_phone_number_ &&
|
||||||
!can_report_location_ && !can_invite_members_ && join_request_dialog_title_.empty();
|
!can_report_location_ && !can_invite_members_ && join_request_dialog_title_.empty() &&
|
||||||
|
!business_bot_user_id_.is_valid();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogActionBar::fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, FolderId folder_id) {
|
void DialogActionBar::fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, FolderId folder_id) {
|
||||||
@ -51,6 +56,22 @@ void DialogActionBar::fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, Fo
|
|||||||
distance_ = -1;
|
distance_ = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (business_bot_user_id_.is_valid()) {
|
||||||
|
if (dialog_type != DialogType::User || business_bot_manage_url_.empty()) {
|
||||||
|
LOG(ERROR) << "Receive business bot " << business_bot_user_id_ << " in " << dialog_id << " with manage URL "
|
||||||
|
<< business_bot_manage_url_;
|
||||||
|
business_bot_user_id_ = {};
|
||||||
|
business_bot_manage_url_ = {};
|
||||||
|
is_business_bot_paused_ = false;
|
||||||
|
can_business_bot_reply_ = false;
|
||||||
|
}
|
||||||
|
} else if (!business_bot_manage_url_.empty() || is_business_bot_paused_ || can_business_bot_reply_) {
|
||||||
|
LOG(ERROR) << "Receive business bot " << business_bot_user_id_ << " in " << dialog_id << " with manage URL "
|
||||||
|
<< business_bot_manage_url_;
|
||||||
|
business_bot_manage_url_ = {};
|
||||||
|
is_business_bot_paused_ = false;
|
||||||
|
can_business_bot_reply_ = false;
|
||||||
|
}
|
||||||
if (!join_request_dialog_title_.empty()) {
|
if (!join_request_dialog_title_.empty()) {
|
||||||
if (dialog_type != DialogType::User || join_request_date_ <= 0) {
|
if (dialog_type != DialogType::User || join_request_date_ <= 0) {
|
||||||
LOG(ERROR) << "Receive join_request_date = " << join_request_date_ << " in " << dialog_id;
|
LOG(ERROR) << "Receive join_request_date = " << join_request_date_ << " in " << dialog_id;
|
||||||
@ -182,7 +203,7 @@ void DialogActionBar::fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, Fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::ChatActionBar> DialogActionBar::get_chat_action_bar_object(DialogType dialog_type,
|
td_api::object_ptr<td_api::ChatActionBar> DialogActionBar::get_chat_action_bar_object(Td *td, DialogType dialog_type,
|
||||||
bool hide_unarchive) const {
|
bool hide_unarchive) const {
|
||||||
if (!join_request_dialog_title_.empty()) {
|
if (!join_request_dialog_title_.empty()) {
|
||||||
CHECK(dialog_type == DialogType::User);
|
CHECK(dialog_type == DialogType::User);
|
||||||
@ -226,6 +247,12 @@ td_api::object_ptr<td_api::ChatActionBar> DialogActionBar::get_chat_action_bar_o
|
|||||||
if (can_report_spam_) {
|
if (can_report_spam_) {
|
||||||
return td_api::make_object<td_api::chatActionBarReportSpam>(can_unarchive_);
|
return td_api::make_object<td_api::chatActionBarReportSpam>(can_unarchive_);
|
||||||
}
|
}
|
||||||
|
if (business_bot_user_id_.is_valid()) {
|
||||||
|
CHECK(dialog_type == DialogType::User);
|
||||||
|
return td_api::make_object<td_api::chatActionBarManageBusinessBot>(
|
||||||
|
td->user_manager_->get_user_id_object(business_bot_user_id_, "chatActionBarManageBusinessBot"),
|
||||||
|
business_bot_manage_url_, is_business_bot_paused_, can_business_bot_reply_);
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,11 +281,15 @@ bool DialogActionBar::on_user_contact_added() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DialogActionBar::on_user_deleted() {
|
bool DialogActionBar::on_user_deleted() {
|
||||||
if (join_request_dialog_title_.empty() && !can_share_phone_number_ && !can_block_user_ && !can_add_contact_ &&
|
if (!business_bot_user_id_.is_valid() && join_request_dialog_title_.empty() && !can_share_phone_number_ &&
|
||||||
distance_ < 0) {
|
!can_block_user_ && !can_add_contact_ && distance_ < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
business_bot_user_id_ = {};
|
||||||
|
business_bot_manage_url_.clear();
|
||||||
|
is_business_bot_paused_ = false;
|
||||||
|
can_business_bot_reply_ = false;
|
||||||
join_request_dialog_title_.clear();
|
join_request_dialog_title_.clear();
|
||||||
is_join_request_broadcast_ = false;
|
is_join_request_broadcast_ = false;
|
||||||
join_request_date_ = 0;
|
join_request_date_ = 0;
|
||||||
@ -291,7 +322,11 @@ bool operator==(const unique_ptr<DialogActionBar> &lhs, const unique_ptr<DialogA
|
|||||||
lhs->distance_ == rhs->distance_ && lhs->can_invite_members_ == rhs->can_invite_members_ &&
|
lhs->distance_ == rhs->distance_ && lhs->can_invite_members_ == rhs->can_invite_members_ &&
|
||||||
lhs->join_request_dialog_title_ == rhs->join_request_dialog_title_ &&
|
lhs->join_request_dialog_title_ == rhs->join_request_dialog_title_ &&
|
||||||
lhs->is_join_request_broadcast_ == lhs->is_join_request_broadcast_ &&
|
lhs->is_join_request_broadcast_ == lhs->is_join_request_broadcast_ &&
|
||||||
lhs->join_request_date_ == rhs->join_request_date_;
|
lhs->join_request_date_ == rhs->join_request_date_ &&
|
||||||
|
lhs->business_bot_user_id_ == rhs->business_bot_user_id_ &&
|
||||||
|
lhs->business_bot_manage_url_ == rhs->business_bot_manage_url_ &&
|
||||||
|
lhs->is_business_bot_paused_ == rhs->is_business_bot_paused_ &&
|
||||||
|
lhs->can_business_bot_reply_ == rhs->can_business_bot_reply_;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -21,6 +21,8 @@ class DialogActionBar {
|
|||||||
int32 distance_ = -1; // distance to the peer
|
int32 distance_ = -1; // distance to the peer
|
||||||
int32 join_request_date_ = 0;
|
int32 join_request_date_ = 0;
|
||||||
string join_request_dialog_title_;
|
string join_request_dialog_title_;
|
||||||
|
UserId business_bot_user_id_;
|
||||||
|
string business_bot_manage_url_;
|
||||||
|
|
||||||
bool can_report_spam_ = false;
|
bool can_report_spam_ = false;
|
||||||
bool can_add_contact_ = false;
|
bool can_add_contact_ = false;
|
||||||
@ -30,6 +32,8 @@ class DialogActionBar {
|
|||||||
bool can_unarchive_ = false;
|
bool can_unarchive_ = false;
|
||||||
bool can_invite_members_ = false;
|
bool can_invite_members_ = false;
|
||||||
bool is_join_request_broadcast_ = false;
|
bool is_join_request_broadcast_ = false;
|
||||||
|
bool is_business_bot_paused_ = false;
|
||||||
|
bool can_business_bot_reply_ = false;
|
||||||
|
|
||||||
friend bool operator==(const unique_ptr<DialogActionBar> &lhs, const unique_ptr<DialogActionBar> &rhs);
|
friend bool operator==(const unique_ptr<DialogActionBar> &lhs, const unique_ptr<DialogActionBar> &rhs);
|
||||||
|
|
||||||
@ -37,7 +41,9 @@ class DialogActionBar {
|
|||||||
static unique_ptr<DialogActionBar> create(bool can_report_spam, bool can_add_contact, bool can_block_user,
|
static unique_ptr<DialogActionBar> create(bool can_report_spam, bool can_add_contact, bool can_block_user,
|
||||||
bool can_share_phone_number, bool can_report_location, bool can_unarchive,
|
bool can_share_phone_number, bool can_report_location, bool can_unarchive,
|
||||||
int32 distance, bool can_invite_members, string join_request_dialog_title,
|
int32 distance, bool can_invite_members, string join_request_dialog_title,
|
||||||
bool is_join_request_broadcast, int32 join_request_date);
|
bool is_join_request_broadcast, int32 join_request_date,
|
||||||
|
bool is_business_bot_paused, bool can_business_bot_reply,
|
||||||
|
UserId business_bot_user_id, string business_bot_manage_url);
|
||||||
|
|
||||||
bool is_empty() const;
|
bool is_empty() const;
|
||||||
|
|
||||||
@ -49,7 +55,7 @@ class DialogActionBar {
|
|||||||
return can_unarchive_;
|
return can_unarchive_;
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::ChatActionBar> get_chat_action_bar_object(DialogType dialog_type,
|
td_api::object_ptr<td_api::ChatActionBar> get_chat_action_bar_object(Td *td, DialogType dialog_type,
|
||||||
bool hide_unarchive) const;
|
bool hide_unarchive) const;
|
||||||
|
|
||||||
void fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, FolderId folder_id);
|
void fix(Td *td, DialogId dialog_id, bool is_dialog_blocked, FolderId folder_id);
|
||||||
@ -66,6 +72,8 @@ class DialogActionBar {
|
|||||||
void store(StorerT &storer) const {
|
void store(StorerT &storer) const {
|
||||||
bool has_distance = distance_ >= 0;
|
bool has_distance = distance_ >= 0;
|
||||||
bool has_join_request = !join_request_dialog_title_.empty();
|
bool has_join_request = !join_request_dialog_title_.empty();
|
||||||
|
bool has_business_bot_user_id = business_bot_user_id_.is_valid();
|
||||||
|
bool has_business_bot_manage_url = !business_bot_manage_url_.empty();
|
||||||
BEGIN_STORE_FLAGS();
|
BEGIN_STORE_FLAGS();
|
||||||
STORE_FLAG(can_report_spam_);
|
STORE_FLAG(can_report_spam_);
|
||||||
STORE_FLAG(can_add_contact_);
|
STORE_FLAG(can_add_contact_);
|
||||||
@ -77,6 +85,10 @@ class DialogActionBar {
|
|||||||
STORE_FLAG(has_distance);
|
STORE_FLAG(has_distance);
|
||||||
STORE_FLAG(is_join_request_broadcast_);
|
STORE_FLAG(is_join_request_broadcast_);
|
||||||
STORE_FLAG(has_join_request);
|
STORE_FLAG(has_join_request);
|
||||||
|
STORE_FLAG(is_business_bot_paused_);
|
||||||
|
STORE_FLAG(can_business_bot_reply_);
|
||||||
|
STORE_FLAG(has_business_bot_user_id);
|
||||||
|
STORE_FLAG(has_business_bot_manage_url);
|
||||||
END_STORE_FLAGS();
|
END_STORE_FLAGS();
|
||||||
if (has_distance) {
|
if (has_distance) {
|
||||||
td::store(distance_, storer);
|
td::store(distance_, storer);
|
||||||
@ -85,12 +97,20 @@ class DialogActionBar {
|
|||||||
td::store(join_request_dialog_title_, storer);
|
td::store(join_request_dialog_title_, storer);
|
||||||
td::store(join_request_date_, storer);
|
td::store(join_request_date_, storer);
|
||||||
}
|
}
|
||||||
|
if (has_business_bot_user_id) {
|
||||||
|
td::store(business_bot_user_id_, storer);
|
||||||
|
}
|
||||||
|
if (has_business_bot_manage_url) {
|
||||||
|
td::store(business_bot_manage_url_, storer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ParserT>
|
template <class ParserT>
|
||||||
void parse(ParserT &parser) {
|
void parse(ParserT &parser) {
|
||||||
bool has_distance;
|
bool has_distance;
|
||||||
bool has_join_request;
|
bool has_join_request;
|
||||||
|
bool has_business_bot_user_id;
|
||||||
|
bool has_business_bot_manage_url;
|
||||||
BEGIN_PARSE_FLAGS();
|
BEGIN_PARSE_FLAGS();
|
||||||
PARSE_FLAG(can_report_spam_);
|
PARSE_FLAG(can_report_spam_);
|
||||||
PARSE_FLAG(can_add_contact_);
|
PARSE_FLAG(can_add_contact_);
|
||||||
@ -102,6 +122,10 @@ class DialogActionBar {
|
|||||||
PARSE_FLAG(has_distance);
|
PARSE_FLAG(has_distance);
|
||||||
PARSE_FLAG(is_join_request_broadcast_);
|
PARSE_FLAG(is_join_request_broadcast_);
|
||||||
PARSE_FLAG(has_join_request);
|
PARSE_FLAG(has_join_request);
|
||||||
|
PARSE_FLAG(is_business_bot_paused_);
|
||||||
|
PARSE_FLAG(can_business_bot_reply_);
|
||||||
|
PARSE_FLAG(has_business_bot_user_id);
|
||||||
|
PARSE_FLAG(has_business_bot_manage_url);
|
||||||
END_PARSE_FLAGS();
|
END_PARSE_FLAGS();
|
||||||
if (has_distance) {
|
if (has_distance) {
|
||||||
td::parse(distance_, parser);
|
td::parse(distance_, parser);
|
||||||
@ -110,6 +134,12 @@ class DialogActionBar {
|
|||||||
td::parse(join_request_dialog_title_, parser);
|
td::parse(join_request_dialog_title_, parser);
|
||||||
td::parse(join_request_date_, parser);
|
td::parse(join_request_date_, parser);
|
||||||
}
|
}
|
||||||
|
if (has_business_bot_user_id) {
|
||||||
|
td::parse(business_bot_user_id_, parser);
|
||||||
|
}
|
||||||
|
if (has_business_bot_manage_url) {
|
||||||
|
td::parse(business_bot_manage_url_, parser);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5263,10 +5263,11 @@ void MessagesManager::Dialog::parse(ParserT &parser) {
|
|||||||
|
|
||||||
(void)legacy_know_can_report_spam;
|
(void)legacy_know_can_report_spam;
|
||||||
if (know_action_bar && !has_action_bar) {
|
if (know_action_bar && !has_action_bar) {
|
||||||
action_bar = DialogActionBar::create(
|
action_bar =
|
||||||
action_bar_can_report_spam, action_bar_can_add_contact, action_bar_can_block_user,
|
DialogActionBar::create(action_bar_can_report_spam, action_bar_can_add_contact, action_bar_can_block_user,
|
||||||
action_bar_can_share_phone_number, action_bar_can_report_location, action_bar_can_unarchive,
|
action_bar_can_share_phone_number, action_bar_can_report_location,
|
||||||
has_outgoing_messages ? -1 : action_bar_distance, action_bar_can_invite_members, string(), false, 0);
|
action_bar_can_unarchive, has_outgoing_messages ? -1 : action_bar_distance,
|
||||||
|
action_bar_can_invite_members, string(), false, 0, false, false, UserId(), string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7960,11 +7961,12 @@ void MessagesManager::on_get_peer_settings(DialogId dialog_id,
|
|||||||
if (distance < -1 || d->has_outgoing_messages) {
|
if (distance < -1 || d->has_outgoing_messages) {
|
||||||
distance = -1;
|
distance = -1;
|
||||||
}
|
}
|
||||||
auto action_bar =
|
auto action_bar = DialogActionBar::create(
|
||||||
DialogActionBar::create(peer_settings->report_spam_, peer_settings->add_contact_, peer_settings->block_contact_,
|
peer_settings->report_spam_, peer_settings->add_contact_, peer_settings->block_contact_,
|
||||||
peer_settings->share_contact_, peer_settings->report_geo_, peer_settings->autoarchived_,
|
peer_settings->share_contact_, peer_settings->report_geo_, peer_settings->autoarchived_, distance,
|
||||||
distance, peer_settings->invite_members_, peer_settings->request_chat_title_,
|
peer_settings->invite_members_, peer_settings->request_chat_title_, peer_settings->request_chat_broadcast_,
|
||||||
peer_settings->request_chat_broadcast_, peer_settings->request_chat_date_);
|
peer_settings->request_chat_date_, peer_settings->business_bot_paused_, peer_settings->business_bot_can_reply_,
|
||||||
|
UserId(peer_settings->business_bot_id_), std::move(peer_settings->business_bot_manage_url_));
|
||||||
|
|
||||||
fix_dialog_action_bar(d, action_bar.get());
|
fix_dialog_action_bar(d, action_bar.get());
|
||||||
|
|
||||||
@ -19220,13 +19222,13 @@ td_api::object_ptr<td_api::ChatActionBar> MessagesManager::get_chat_action_bar_o
|
|||||||
if (user_d == nullptr || user_d->action_bar == nullptr) {
|
if (user_d == nullptr || user_d->action_bar == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return user_d->action_bar->get_chat_action_bar_object(DialogType::User, d->folder_id != FolderId::archive());
|
return user_d->action_bar->get_chat_action_bar_object(td_, DialogType::User, d->folder_id != FolderId::archive());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->action_bar == nullptr) {
|
if (d->action_bar == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return d->action_bar->get_chat_action_bar_object(dialog_type, false);
|
return d->action_bar->get_chat_action_bar_object(td_, dialog_type, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::chatBackground> MessagesManager::get_chat_background_object(const Dialog *d) const {
|
td_api::object_ptr<td_api::chatBackground> MessagesManager::get_chat_background_object(const Dialog *d) const {
|
||||||
|
Loading…
Reference in New Issue
Block a user