Add td_api::setVoiceChatDefaultParticipant.
This commit is contained in:
parent
4aa5df26bc
commit
37cee0d823
@ -4604,6 +4604,9 @@ sendCallDebugInformation call_id:int32 debug_information:string = Ok;
|
|||||||
//@description Returns list of participant identifiers, which can be used to join voice chats in a chat @chat_id Chat identifier
|
//@description Returns list of participant identifiers, which can be used to join voice chats in a chat @chat_id Chat identifier
|
||||||
getVoiceChatAvailableParticipants chat_id:int53 = MessageSenders;
|
getVoiceChatAvailableParticipants chat_id:int53 = MessageSenders;
|
||||||
|
|
||||||
|
//@description Changes default participant identifier, which can be used to join voice chats in a chat @chat_id Chat identifier @default_participant_id Default group call participant identifier to join the voice chats
|
||||||
|
setVoiceChatDefaultParticipant chat_id:int53 default_participant_id:MessageSender = Ok;
|
||||||
|
|
||||||
//@description Creates a voice chat (a group call bound to a chat). Available only for basic groups, supergroups and channels; requires can_manage_voice_chats rights
|
//@description Creates a voice chat (a group call bound to a chat). Available only for basic groups, supergroups and channels; requires can_manage_voice_chats rights
|
||||||
//@chat_id Chat identifier, in which the voice chat will be created
|
//@chat_id Chat identifier, in which the voice chat will be created
|
||||||
//@title Group call title; if empty, chat title will be used
|
//@title Group call title; if empty, chat title will be used
|
||||||
|
@ -123,6 +123,42 @@ class GetGroupCallJoinAsQuery : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SaveDefaultGroupCallJoinAsQuery : public Td::ResultHandler {
|
||||||
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit SaveDefaultGroupCallJoinAsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(DialogId dialog_id, DialogId as_dialog_id) {
|
||||||
|
auto input_peer = td->messages_manager_->get_input_peer(dialog_id, AccessRights::Read);
|
||||||
|
CHECK(input_peer != nullptr);
|
||||||
|
|
||||||
|
auto as_input_peer = td->messages_manager_->get_input_peer(as_dialog_id, AccessRights::Read);
|
||||||
|
CHECK(as_input_peer != nullptr);
|
||||||
|
|
||||||
|
send_query(G()->net_query_creator().create(
|
||||||
|
telegram_api::phone_saveDefaultGroupCallJoinAs(std::move(input_peer), std::move(as_input_peer))));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(uint64 id, BufferSlice packet) override {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::phone_saveDefaultGroupCallJoinAs>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(id, result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto success = result_ptr.move_as_ok();
|
||||||
|
LOG(INFO) << "Receive result for SaveDefaultGroupCallJoinAsQuery: " << success;
|
||||||
|
|
||||||
|
promise_.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(uint64 id, Status status) override {
|
||||||
|
// td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetGroupCallJoinAsQuery");
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class CreateGroupCallQuery : public Td::ResultHandler {
|
class CreateGroupCallQuery : public Td::ResultHandler {
|
||||||
Promise<InputGroupCallId> promise_;
|
Promise<InputGroupCallId> promise_;
|
||||||
DialogId dialog_id_;
|
DialogId dialog_id_;
|
||||||
@ -1112,6 +1148,43 @@ void GroupCallManager::get_group_call_join_as(DialogId dialog_id,
|
|||||||
td_->create_handler<GetGroupCallJoinAsQuery>(std::move(promise))->send(dialog_id);
|
td_->create_handler<GetGroupCallJoinAsQuery>(std::move(promise))->send(dialog_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GroupCallManager::set_group_call_default_join_as(DialogId dialog_id, DialogId as_dialog_id,
|
||||||
|
Promise<Unit> &&promise) {
|
||||||
|
if (!dialog_id.is_valid()) {
|
||||||
|
return promise.set_error(Status::Error(400, "Invalid chat identifier specified"));
|
||||||
|
}
|
||||||
|
if (!td_->messages_manager_->have_dialog_force(dialog_id)) {
|
||||||
|
return promise.set_error(Status::Error(400, "Chat not found"));
|
||||||
|
}
|
||||||
|
if (!td_->messages_manager_->have_input_peer(dialog_id, AccessRights::Read)) {
|
||||||
|
return promise.set_error(Status::Error(400, "Can't access chat"));
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (as_dialog_id.get_type()) {
|
||||||
|
case DialogType::User:
|
||||||
|
if (as_dialog_id != DialogId(td_->contacts_manager_->get_my_id())) {
|
||||||
|
return promise.set_error(Status::Error(400, "Can't join voice chat as another user"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DialogType::Chat:
|
||||||
|
case DialogType::Channel:
|
||||||
|
if (!td_->messages_manager_->have_dialog_force(as_dialog_id)) {
|
||||||
|
return promise.set_error(Status::Error(400, "Participant chat not found"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DialogType::SecretChat:
|
||||||
|
return promise.set_error(Status::Error(400, "Can't join voice chat as a secret chat"));
|
||||||
|
default:
|
||||||
|
return promise.set_error(Status::Error(400, "Invalid default participant identifier specified"));
|
||||||
|
}
|
||||||
|
if (!td_->messages_manager_->have_input_peer(as_dialog_id, AccessRights::Read)) {
|
||||||
|
return promise.set_error(Status::Error(400, "Can't access specified default participant chat"));
|
||||||
|
}
|
||||||
|
|
||||||
|
td_->create_handler<SaveDefaultGroupCallJoinAsQuery>(std::move(promise))->send(dialog_id, as_dialog_id);
|
||||||
|
td_->messages_manager_->on_update_dialog_default_join_group_call_as_dialog_id(dialog_id, as_dialog_id, true);
|
||||||
|
}
|
||||||
|
|
||||||
void GroupCallManager::create_voice_chat(DialogId dialog_id, string title, int32 start_date,
|
void GroupCallManager::create_voice_chat(DialogId dialog_id, string title, int32 start_date,
|
||||||
Promise<GroupCallId> &&promise) {
|
Promise<GroupCallId> &&promise) {
|
||||||
if (!dialog_id.is_valid()) {
|
if (!dialog_id.is_valid()) {
|
||||||
@ -2213,11 +2286,11 @@ void GroupCallManager::join_group_call(GroupCallId group_call_id, DialogId as_di
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!td_->messages_manager_->have_dialog_force(as_dialog_id, "join_group_call")) {
|
if (!td_->messages_manager_->have_dialog_force(as_dialog_id, "join_group_call")) {
|
||||||
return promise.set_error(Status::Error(400, "Alias chat not found"));
|
return promise.set_error(Status::Error(400, "Join as chat not found"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!td_->messages_manager_->have_input_peer(as_dialog_id, AccessRights::Read)) {
|
if (!td_->messages_manager_->have_input_peer(as_dialog_id, AccessRights::Read)) {
|
||||||
return promise.set_error(Status::Error(400, "Can't access the alias participant"));
|
return promise.set_error(Status::Error(400, "Can't access the join as participant"));
|
||||||
}
|
}
|
||||||
if (dialog_type == DialogType::SecretChat) {
|
if (dialog_type == DialogType::SecretChat) {
|
||||||
return promise.set_error(Status::Error(400, "Can't join voice chat as a secret chat"));
|
return promise.set_error(Status::Error(400, "Can't join voice chat as a secret chat"));
|
||||||
|
@ -48,6 +48,8 @@ class GroupCallManager : public Actor {
|
|||||||
|
|
||||||
void get_group_call_join_as(DialogId dialog_id, Promise<td_api::object_ptr<td_api::messageSenders>> &&promise);
|
void get_group_call_join_as(DialogId dialog_id, Promise<td_api::object_ptr<td_api::messageSenders>> &&promise);
|
||||||
|
|
||||||
|
void set_group_call_default_join_as(DialogId dialog_id, DialogId as_dialog_id, Promise<Unit> &&promise);
|
||||||
|
|
||||||
void create_voice_chat(DialogId dialog_id, string title, int32 start_date, Promise<GroupCallId> &&promise);
|
void create_voice_chat(DialogId dialog_id, string title, int32 start_date, Promise<GroupCallId> &&promise);
|
||||||
|
|
||||||
void get_group_call(GroupCallId group_call_id, Promise<td_api::object_ptr<td_api::groupCall>> &&promise);
|
void get_group_call(GroupCallId group_call_id, Promise<td_api::object_ptr<td_api::groupCall>> &&promise);
|
||||||
|
@ -5974,6 +5974,14 @@ void Td::on_request(uint64 id, const td_api::getVoiceChatAvailableParticipants &
|
|||||||
group_call_manager_->get_group_call_join_as(DialogId(request.chat_id_), std::move(promise));
|
group_call_manager_->get_group_call_join_as(DialogId(request.chat_id_), std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Td::on_request(uint64 id, const td_api::setVoiceChatDefaultParticipant &request) {
|
||||||
|
CHECK_IS_USER();
|
||||||
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
|
group_call_manager_->set_group_call_default_join_as(
|
||||||
|
DialogId(request.chat_id_), group_call_manager_->get_group_call_participant_id(request.default_participant_id_),
|
||||||
|
std::move(promise));
|
||||||
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, td_api::createVoiceChat &request) {
|
void Td::on_request(uint64 id, td_api::createVoiceChat &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CLEAN_INPUT_STRING(request.title_);
|
CLEAN_INPUT_STRING(request.title_);
|
||||||
|
@ -703,6 +703,8 @@ class Td final : public NetQueryCallback {
|
|||||||
|
|
||||||
void on_request(uint64 id, const td_api::getVoiceChatAvailableParticipants &request);
|
void on_request(uint64 id, const td_api::getVoiceChatAvailableParticipants &request);
|
||||||
|
|
||||||
|
void on_request(uint64 id, const td_api::setVoiceChatDefaultParticipant &request);
|
||||||
|
|
||||||
void on_request(uint64 id, td_api::createVoiceChat &request);
|
void on_request(uint64 id, td_api::createVoiceChat &request);
|
||||||
|
|
||||||
void on_request(uint64 id, const td_api::getGroupCall &request);
|
void on_request(uint64 id, const td_api::getGroupCall &request);
|
||||||
|
@ -2672,6 +2672,12 @@ class CliClient final : public Actor {
|
|||||||
send_request(td_api::make_object<td_api::sendCallDebugInformation>(as_call_id(args), "{}"));
|
send_request(td_api::make_object<td_api::sendCallDebugInformation>(as_call_id(args), "{}"));
|
||||||
} else if (op == "gvcap") {
|
} else if (op == "gvcap") {
|
||||||
send_request(td_api::make_object<td_api::getVoiceChatAvailableParticipants>(as_chat_id(args)));
|
send_request(td_api::make_object<td_api::getVoiceChatAvailableParticipants>(as_chat_id(args)));
|
||||||
|
} else if (op == "svcdp") {
|
||||||
|
string group_call_id;
|
||||||
|
string participant_id;
|
||||||
|
get_args(args, group_call_id, participant_id);
|
||||||
|
send_request(td_api::make_object<td_api::setVoiceChatDefaultParticipant>(as_chat_id(args),
|
||||||
|
as_message_sender(participant_id)));
|
||||||
} else if (op == "cvc") {
|
} else if (op == "cvc") {
|
||||||
string chat_id;
|
string chat_id;
|
||||||
string title;
|
string title;
|
||||||
@ -2690,14 +2696,14 @@ class CliClient final : public Actor {
|
|||||||
op == "tgcesne"));
|
op == "tgcesne"));
|
||||||
} else if (op == "jgc") {
|
} else if (op == "jgc") {
|
||||||
string group_call_id;
|
string group_call_id;
|
||||||
string participant_alias;
|
string participant_id;
|
||||||
string invite_hash;
|
string invite_hash;
|
||||||
get_args(args, group_call_id, participant_alias, invite_hash);
|
get_args(args, group_call_id, participant_id, invite_hash);
|
||||||
vector<td_api::object_ptr<td_api::groupCallPayloadFingerprint>> fingerprints;
|
vector<td_api::object_ptr<td_api::groupCallPayloadFingerprint>> fingerprints;
|
||||||
fingerprints.push_back(td_api::make_object<td_api::groupCallPayloadFingerprint>("hash", "setup", "fingerprint"));
|
fingerprints.push_back(td_api::make_object<td_api::groupCallPayloadFingerprint>("hash", "setup", "fingerprint"));
|
||||||
fingerprints.push_back(td_api::make_object<td_api::groupCallPayloadFingerprint>("h2", "s2", "fingerprint2"));
|
fingerprints.push_back(td_api::make_object<td_api::groupCallPayloadFingerprint>("h2", "s2", "fingerprint2"));
|
||||||
send_request(td_api::make_object<td_api::joinGroupCall>(
|
send_request(td_api::make_object<td_api::joinGroupCall>(
|
||||||
as_group_call_id(group_call_id), as_message_sender(participant_alias),
|
as_group_call_id(group_call_id), as_message_sender(participant_id),
|
||||||
td_api::make_object<td_api::groupCallPayload>("ufrag", "pwd", std::move(fingerprints)), group_call_source_,
|
td_api::make_object<td_api::groupCallPayload>("ufrag", "pwd", std::move(fingerprints)), group_call_source_,
|
||||||
true, invite_hash));
|
true, invite_hash));
|
||||||
} else if (op == "sgct") {
|
} else if (op == "sgct") {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user