Add GroupCallId.

This commit is contained in:
levlam 2020-11-24 17:29:09 +03:00
parent ce4054c5d4
commit 3c9cd41776
5 changed files with 52 additions and 12 deletions

View File

@ -1627,11 +1627,11 @@ messageInvoice title:string description:string photo:photo currency:string total
//@description A message with information about an ended call @is_video True, if the call was a video call @discard_reason Reason why the call was discarded @duration Call duration, in seconds //@description A message with information about an ended call @is_video True, if the call was a video call @discard_reason Reason why the call was discarded @duration Call duration, in seconds
messageCall is_video:Bool discard_reason:CallDiscardReason duration:int32 = MessageContent; messageCall is_video:Bool discard_reason:CallDiscardReason duration:int32 = MessageContent;
//@description A message with information about a group call //@description A message with information about a group call @group_call_id Group call identifier
messageGroupCall = MessageContent; messageGroupCall group_call_id:string = MessageContent;
//@description A message with information about an invite to a group call //@description A message with information about an invite to a group call @group_call_id Group call identifier @user_id Invited user identifier
messageInviteToGroupCall = MessageContent; messageInviteToGroupCall group_call_id:string user_id:int32 = MessageContent;
//@description A newly created basic group @title Title of the basic group @member_user_ids User identifiers of members in the basic group //@description A newly created basic group @title Title of the basic group @member_user_ids User identifiers of members in the basic group
messageBasicGroupChatCreate title:string member_user_ids:vector<int32> = MessageContent; messageBasicGroupChatCreate title:string member_user_ids:vector<int32> = MessageContent;
@ -2032,6 +2032,9 @@ callServer id:int64 ip_address:string ipv6_address:string port:int32 type:CallSe
//@description Contains the call identifier @id Call identifier //@description Contains the call identifier @id Call identifier
callId id:int32 = CallId; callId id:int32 = CallId;
//@description Contains the group call identifier @id Group call identifier
groupCallId id:string = GroupCallId;
//@class CallState @description Describes the current call state //@class CallState @description Describes the current call state

Binary file not shown.

View File

@ -7,6 +7,7 @@
#include "td/telegram/InputGroupCallId.h" #include "td/telegram/InputGroupCallId.h"
#include "td/utils/logging.h" #include "td/utils/logging.h"
#include "td/utils/misc.h"
namespace td { namespace td {
@ -14,6 +15,31 @@ InputGroupCallId::InputGroupCallId(const tl_object_ptr<telegram_api::inputGroupC
: group_call_id(input_group_call->id_), access_hash(input_group_call->access_hash_) { : group_call_id(input_group_call->id_), access_hash(input_group_call->access_hash_) {
} }
Result<InputGroupCallId> InputGroupCallId::from_group_call_id(const string &group_call_id) {
if (group_call_id.empty()) {
return InputGroupCallId();
}
auto splitted = split(group_call_id, '_');
auto r_group_call_id = to_integer_safe<int64>(splitted.first);
auto r_access_hash = to_integer_safe<int64>(splitted.second);
if (r_group_call_id.is_error() || r_access_hash.is_error()) {
return Status::Error("Invalid group call identifier specified");
}
InputGroupCallId result;
result.group_call_id = r_group_call_id.ok();
result.access_hash = r_access_hash.ok();
return result;
}
string InputGroupCallId::get_group_call_id() const {
if (is_valid()) {
return PSTRING() << group_call_id << '_' << access_hash;
}
return string();
}
tl_object_ptr<telegram_api::inputGroupCall> InputGroupCallId::get_input_group_call() const { tl_object_ptr<telegram_api::inputGroupCall> InputGroupCallId::get_input_group_call() const {
return make_tl_object<telegram_api::inputGroupCall>(group_call_id, access_hash); return make_tl_object<telegram_api::inputGroupCall>(group_call_id, access_hash);
} }

View File

@ -9,6 +9,7 @@
#include "td/telegram/telegram_api.h" #include "td/telegram/telegram_api.h"
#include "td/utils/common.h" #include "td/utils/common.h"
#include "td/utils/Status.h"
#include "td/utils/StringBuilder.h" #include "td/utils/StringBuilder.h"
namespace td { namespace td {
@ -22,6 +23,10 @@ class InputGroupCallId {
explicit InputGroupCallId(const tl_object_ptr<telegram_api::inputGroupCall> &input_group_call); explicit InputGroupCallId(const tl_object_ptr<telegram_api::inputGroupCall> &input_group_call);
static Result<InputGroupCallId> from_group_call_id(const string &group_call_id);
string get_group_call_id() const;
bool operator==(const InputGroupCallId &other) const { bool operator==(const InputGroupCallId &other) const {
return group_call_id == other.group_call_id && access_hash == other.access_hash; return group_call_id == other.group_call_id && access_hash == other.access_hash;
} }

View File

@ -4024,7 +4024,7 @@ unique_ptr<MessageContent> get_message_content(Td *td, FormattedText message,
auto message_contact = move_tl_object_as<telegram_api::messageMediaContact>(media); auto message_contact = move_tl_object_as<telegram_api::messageMediaContact>(media);
if (message_contact->user_id_ != 0) { if (message_contact->user_id_ != 0) {
td->contacts_manager_->get_user_id_object(UserId(message_contact->user_id_), td->contacts_manager_->get_user_id_object(UserId(message_contact->user_id_),
"messageMediaContact"); // to ensure updateUser "MessageMediaContact"); // to ensure updateUser
} }
return make_unique<MessageContact>(Contact( return make_unique<MessageContact>(Contact(
std::move(message_contact->phone_number_), std::move(message_contact->first_name_), std::move(message_contact->phone_number_), std::move(message_contact->first_name_),
@ -4677,12 +4677,12 @@ tl_object_ptr<td_api::MessageContent> get_message_content_object(const MessageCo
case MessageContentType::ChatDeleteUser: { case MessageContentType::ChatDeleteUser: {
const MessageChatDeleteUser *m = static_cast<const MessageChatDeleteUser *>(content); const MessageChatDeleteUser *m = static_cast<const MessageChatDeleteUser *>(content);
return make_tl_object<td_api::messageChatDeleteMember>( return make_tl_object<td_api::messageChatDeleteMember>(
td->contacts_manager_->get_user_id_object(m->user_id, "messageChatDeleteMember")); td->contacts_manager_->get_user_id_object(m->user_id, "MessageChatDeleteMember"));
} }
case MessageContentType::ChatMigrateTo: { case MessageContentType::ChatMigrateTo: {
const MessageChatMigrateTo *m = static_cast<const MessageChatMigrateTo *>(content); const MessageChatMigrateTo *m = static_cast<const MessageChatMigrateTo *>(content);
return make_tl_object<td_api::messageChatUpgradeTo>( return make_tl_object<td_api::messageChatUpgradeTo>(
td->contacts_manager_->get_supergroup_id_object(m->migrated_to_channel_id, "messageChatUpgradeTo")); td->contacts_manager_->get_supergroup_id_object(m->migrated_to_channel_id, "MessageChatUpgradeTo"));
} }
case MessageContentType::ChannelCreate: { case MessageContentType::ChannelCreate: {
const MessageChannelCreate *m = static_cast<const MessageChannelCreate *>(content); const MessageChannelCreate *m = static_cast<const MessageChannelCreate *>(content);
@ -4692,7 +4692,7 @@ tl_object_ptr<td_api::MessageContent> get_message_content_object(const MessageCo
const MessageChannelMigrateFrom *m = static_cast<const MessageChannelMigrateFrom *>(content); const MessageChannelMigrateFrom *m = static_cast<const MessageChannelMigrateFrom *>(content);
return make_tl_object<td_api::messageChatUpgradeFrom>( return make_tl_object<td_api::messageChatUpgradeFrom>(
m->title, m->title,
td->contacts_manager_->get_basic_group_id_object(m->migrated_from_chat_id, "messageChatUpgradeFrom")); td->contacts_manager_->get_basic_group_id_object(m->migrated_from_chat_id, "MessageChatUpgradeFrom"));
} }
case MessageContentType::PinMessage: { case MessageContentType::PinMessage: {
const MessagePinMessage *m = static_cast<const MessagePinMessage *>(content); const MessagePinMessage *m = static_cast<const MessagePinMessage *>(content);
@ -4768,10 +4768,16 @@ tl_object_ptr<td_api::MessageContent> get_message_content_object(const MessageCo
td->messages_manager_->get_message_sender_object(m->traveler_dialog_id), td->messages_manager_->get_message_sender_object(m->traveler_dialog_id),
td->messages_manager_->get_message_sender_object(m->watcher_dialog_id), m->distance); td->messages_manager_->get_message_sender_object(m->watcher_dialog_id), m->distance);
} }
case MessageContentType::GroupCall: case MessageContentType::GroupCall: {
return make_tl_object<td_api::messageGroupCall>(); auto *m = static_cast<const MessageGroupCall *>(content);
case MessageContentType::InviteToGroupCall: return make_tl_object<td_api::messageGroupCall>(m->group_call_id.get_group_call_id());
return make_tl_object<td_api::messageInviteToGroupCall>(); }
case MessageContentType::InviteToGroupCall: {
auto *m = static_cast<const MessageInviteToGroupCall *>(content);
return make_tl_object<td_api::messageInviteToGroupCall>(
m->group_call_id.get_group_call_id(),
td->contacts_manager_->get_user_id_object(m->user_id, "MessageInviteToGroupCall"));
}
default: default:
UNREACHABLE(); UNREACHABLE();
return nullptr; return nullptr;