Add td_api::getCallbackQueryMessage.

GitOrigin-RevId: a5ca7eab673e00942b4e2fe7a9c6e17dfb3784f8
This commit is contained in:
levlam 2020-10-29 01:06:07 +03:00
parent 1a6161003c
commit ef1b2921ae
8 changed files with 73 additions and 23 deletions

View File

@ -3599,6 +3599,9 @@ getRepliedMessage chat_id:int53 message_id:int53 = Message;
//@description Returns information about a newest pinned chat message @chat_id Identifier of the chat the message belongs to
getChatPinnedMessage chat_id:int53 = Message;
//@description Returns information about a message with the callback button that originated a callback query; for bots only @chat_id Identifier of the chat the message belongs to @message_id Message identifier @callback_query_id Identifier of the callback query
getCallbackQueryMessage chat_id:int53 message_id:int53 callback_query_id:int64 = Message;
//@description Returns information about messages. If a message is not found, returns null on the corresponding position of the result @chat_id Identifier of the chat the messages belong to @message_ids Identifiers of the messages to get
getMessages chat_id:int53 message_ids:vector<int53> = Messages;

Binary file not shown.

View File

@ -889,6 +889,7 @@ account.webAuthorizations#ed56c9fc authorizations:Vector<WebAuthorization> users
inputMessageID#a676a322 id:int = InputMessage;
inputMessageReplyTo#bad88395 id:int = InputMessage;
inputMessagePinned#86872538 = InputMessage;
inputMessageCallbackQuery#acfa1a7e id:int query_id:long = InputMessage;
inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer;
inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer;

Binary file not shown.

View File

@ -5811,10 +5811,6 @@ vector<int32> MessagesManager::get_scheduled_server_message_ids(const vector<Mes
[](MessageId message_id) { return message_id.get_scheduled_server_message_id().get(); });
}
tl_object_ptr<telegram_api::InputMessage> MessagesManager::get_input_message(MessageId message_id) {
return make_tl_object<telegram_api::inputMessageID>(message_id.get_server_message_id().get());
}
tl_object_ptr<telegram_api::InputPeer> MessagesManager::get_input_peer(DialogId dialog_id,
AccessRights access_rights) const {
switch (dialog_id.get_type()) {
@ -16396,6 +16392,23 @@ MessageId MessagesManager::get_dialog_pinned_message(DialogId dialog_id, Promise
return d->last_pinned_message_id;
}
void MessagesManager::get_callback_query_message(DialogId dialog_id, MessageId message_id, int64 callback_query_id,
Promise<Unit> &&promise) {
Dialog *d = get_dialog_force(dialog_id);
if (d == nullptr) {
return promise.set_error(Status::Error(6, "Chat not found"));
}
if (!message_id.is_valid() || !message_id.is_server()) {
return promise.set_error(Status::Error(6, "Invalid message identifier specified"));
}
LOG(INFO) << "Get callback query " << message_id << " in " << dialog_id << " for query " << callback_query_id;
auto input_message = make_tl_object<telegram_api::inputMessageCallbackQuery>(message_id.get_server_message_id().get(),
callback_query_id);
get_message_force_from_server(d, message_id, std::move(promise), std::move(input_message));
}
bool MessagesManager::get_messages(DialogId dialog_id, const vector<MessageId> &message_ids, Promise<Unit> &&promise) {
Dialog *d = get_dialog_force(dialog_id);
if (d == nullptr) {
@ -16459,15 +16472,17 @@ void MessagesManager::get_messages_from_server(vector<FullMessageId> &&message_i
continue;
}
if (input_message == nullptr) {
input_message = make_tl_object<telegram_api::inputMessageID>(message_id.get_server_message_id().get());
}
switch (dialog_id.get_type()) {
case DialogType::User:
case DialogType::Chat:
ordinary_message_ids.push_back(input_message == nullptr ? get_input_message(message_id)
: std::move(input_message));
ordinary_message_ids.push_back(std::move(input_message));
break;
case DialogType::Channel:
channel_message_ids[dialog_id.get_channel_id()].push_back(
input_message == nullptr ? get_input_message(message_id) : std::move(input_message));
channel_message_ids[dialog_id.get_channel_id()].push_back(std::move(input_message));
break;
case DialogType::SecretChat:
LOG(ERROR) << "Can't get secret chat message from server";

View File

@ -587,6 +587,19 @@ class MessagesManager : public Actor {
FullMessageId get_replied_message(DialogId dialog_id, MessageId message_id, bool force, Promise<Unit> &&promise);
MessageId get_dialog_pinned_message(DialogId dialog_id, Promise<Unit> &&promise);
void get_callback_query_message(DialogId dialog_id, MessageId message_id, int64 callback_query_id,
Promise<Unit> &&promise);
bool get_messages(DialogId dialog_id, const vector<MessageId> &message_ids, Promise<Unit> &&promise);
void get_message_from_server(FullMessageId full_message_id, Promise<Unit> &&promise,
tl_object_ptr<telegram_api::InputMessage> input_message = nullptr);
void get_messages_from_server(vector<FullMessageId> &&message_ids, Promise<Unit> &&promise,
tl_object_ptr<telegram_api::InputMessage> input_message = nullptr);
struct MessageThreadInfo {
DialogId dialog_id;
vector<MessageId> message_ids;
@ -598,16 +611,6 @@ class MessagesManager : public Actor {
void on_get_discussion_message(DialogId dialog_id, MessageId message_id, vector<FullMessageId> full_message_ids,
Promise<MessageThreadInfo> &&promise);
MessageId get_dialog_pinned_message(DialogId dialog_id, Promise<Unit> &&promise);
bool get_messages(DialogId dialog_id, const vector<MessageId> &message_ids, Promise<Unit> &&promise);
void get_message_from_server(FullMessageId full_message_id, Promise<Unit> &&promise,
tl_object_ptr<telegram_api::InputMessage> input_message = nullptr);
void get_messages_from_server(vector<FullMessageId> &&message_ids, Promise<Unit> &&promise,
tl_object_ptr<telegram_api::InputMessage> input_message = nullptr);
bool is_message_edited_recently(FullMessageId full_message_id, int32 seconds);
Result<std::pair<string, bool>> get_message_link(FullMessageId full_message_id, bool for_group, bool for_comment);
@ -1710,8 +1713,6 @@ class MessagesManager : public Actor {
static int32 get_message_date(const tl_object_ptr<telegram_api::Message> &message_ptr);
static tl_object_ptr<telegram_api::InputMessage> get_input_message(MessageId message_id);
static bool is_dialog_inited(const Dialog *d);
int32 get_dialog_mute_until(const Dialog *d) const;

View File

@ -1102,6 +1102,29 @@ class GetChatPinnedMessageRequest : public RequestOnceActor {
}
};
class GetCallbackQueryMessageRequest : public RequestOnceActor {
DialogId dialog_id_;
MessageId message_id_;
int64 callback_query_id_;
void do_run(Promise<Unit> &&promise) override {
td->messages_manager_->get_callback_query_message(dialog_id_, message_id_, callback_query_id_, std::move(promise));
}
void do_send_result() override {
send_result(td->messages_manager_->get_message_object({dialog_id_, message_id_}));
}
public:
GetCallbackQueryMessageRequest(ActorShared<Td> td, uint64 request_id, int64 dialog_id, int64 message_id,
int64 callback_query_id)
: RequestOnceActor(std::move(td), request_id)
, dialog_id_(dialog_id)
, message_id_(message_id)
, callback_query_id_(callback_query_id) {
}
};
class GetMessagesRequest : public RequestOnceActor {
DialogId dialog_id_;
vector<MessageId> message_ids_;
@ -5157,15 +5180,20 @@ void Td::on_request(uint64 id, const td_api::getChatPinnedMessage &request) {
CREATE_REQUEST(GetChatPinnedMessageRequest, request.chat_id_);
}
void Td::on_request(uint64 id, const td_api::getMessageThread &request) {
CHECK_IS_USER();
CREATE_REQUEST(GetMessageThreadRequest, request.chat_id_, request.message_id_);
void Td::on_request(uint64 id, const td_api::getCallbackQueryMessage &request) {
CHECK_IS_BOT();
CREATE_REQUEST(GetCallbackQueryMessageRequest, request.chat_id_, request.message_id_, request.callback_query_id_);
}
void Td::on_request(uint64 id, const td_api::getMessages &request) {
CREATE_REQUEST(GetMessagesRequest, request.chat_id_, request.message_ids_);
}
void Td::on_request(uint64 id, const td_api::getMessageThread &request) {
CHECK_IS_USER();
CREATE_REQUEST(GetMessageThreadRequest, request.chat_id_, request.message_id_);
}
void Td::on_request(uint64 id, const td_api::getMessageLink &request) {
auto r_message_link = messages_manager_->get_message_link(
{DialogId(request.chat_id_), MessageId(request.message_id_)}, request.for_album_, request.for_comment_);

View File

@ -493,6 +493,8 @@ class Td final : public NetQueryCallback {
void on_request(uint64 id, const td_api::getChatPinnedMessage &request);
void on_request(uint64 id, const td_api::getCallbackQueryMessage &request);
void on_request(uint64 id, const td_api::getMessageThread &request);
void on_request(uint64 id, const td_api::getMessages &request);