Allow to send speaking actions in read-only chats.
This commit is contained in:
parent
8ede5f736f
commit
16ab28f230
@ -3825,9 +3825,9 @@ class SetTypingQuery : public Td::ResultHandler {
|
|||||||
explicit SetTypingQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit SetTypingQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryRef send(DialogId dialog_id, MessageId message_id, tl_object_ptr<telegram_api::SendMessageAction> &&action) {
|
NetQueryRef send(DialogId dialog_id, tl_object_ptr<telegram_api::InputPeer> &&input_peer, MessageId message_id,
|
||||||
|
tl_object_ptr<telegram_api::SendMessageAction> &&action) {
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
auto input_peer = td->messages_manager_->get_input_peer(dialog_id, AccessRights::Write);
|
|
||||||
CHECK(input_peer != nullptr);
|
CHECK(input_peer != nullptr);
|
||||||
|
|
||||||
int32 flags = 0;
|
int32 flags = 0;
|
||||||
@ -30388,16 +30388,26 @@ void MessagesManager::send_dialog_action(DialogId dialog_id, MessageId top_threa
|
|||||||
return promise.set_error(Status::Error(5, "Invalid message thread specified"));
|
return promise.set_error(Status::Error(5, "Invalid message thread specified"));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto can_send_status = can_send_message(dialog_id);
|
tl_object_ptr<telegram_api::InputPeer> input_peer;
|
||||||
if (can_send_status.is_error()) {
|
if (action == DialogAction::get_speaking_action()) {
|
||||||
if (td_->auth_manager_->is_bot()) {
|
input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Read);
|
||||||
return promise.set_error(can_send_status.move_as_error());
|
if (input_peer == nullptr) {
|
||||||
|
return promise.set_error(Status::Error(400, "Have no access to the chat"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
auto can_send_status = can_send_message(dialog_id);
|
||||||
|
if (can_send_status.is_error()) {
|
||||||
|
if (td_->auth_manager_->is_bot()) {
|
||||||
|
return promise.set_error(can_send_status.move_as_error());
|
||||||
|
}
|
||||||
|
return promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
return promise.set_value(Unit());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_dialog_action_unneeded(dialog_id)) {
|
if (is_dialog_action_unneeded(dialog_id)) {
|
||||||
return promise.set_value(Unit());
|
return promise.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dialog_id.get_type() == DialogType::SecretChat) {
|
if (dialog_id.get_type() == DialogType::SecretChat) {
|
||||||
@ -30412,8 +30422,9 @@ void MessagesManager::send_dialog_action(DialogId dialog_id, MessageId top_threa
|
|||||||
LOG(INFO) << "Cancel previous send chat action query";
|
LOG(INFO) << "Cancel previous send chat action query";
|
||||||
cancel_query(query_ref);
|
cancel_query(query_ref);
|
||||||
}
|
}
|
||||||
query_ref = td_->create_handler<SetTypingQuery>(std::move(promise))
|
query_ref =
|
||||||
->send(dialog_id, top_thread_message_id, action.get_input_send_message_action());
|
td_->create_handler<SetTypingQuery>(std::move(promise))
|
||||||
|
->send(dialog_id, std::move(input_peer), top_thread_message_id, action.get_input_send_message_action());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::on_send_dialog_action_timeout(DialogId dialog_id) {
|
void MessagesManager::on_send_dialog_action_timeout(DialogId dialog_id) {
|
||||||
|
Loading…
Reference in New Issue
Block a user