Move inline_message_id methods to InlineMessageManager.

This commit is contained in:
levlam 2024-05-29 13:43:33 +03:00
parent 03ca49f3a1
commit bf52d1cc53
4 changed files with 54 additions and 52 deletions

View File

@ -11,7 +11,6 @@
#include "td/telegram/files/FileManager.h"
#include "td/telegram/GameManager.h"
#include "td/telegram/Global.h"
#include "td/telegram/InlineQueriesManager.h"
#include "td/telegram/InputMessageText.h"
#include "td/telegram/Location.h"
#include "td/telegram/MessageContent.h"
@ -22,9 +21,11 @@
#include "td/telegram/Td.h"
#include "td/telegram/UserManager.h"
#include "td/utils/base64.h"
#include "td/utils/buffer.h"
#include "td/utils/logging.h"
#include "td/utils/Status.h"
#include "td/utils/tl_parsers.h"
namespace td {
@ -66,7 +67,7 @@ class EditInlineMessageQuery final : public Td::ResultHandler {
flags |= telegram_api::messages_editInlineBotMessage::INVERT_MEDIA_MASK;
}
auto dc_id = DcId::internal(InlineQueriesManager::get_inline_message_dc_id(input_bot_inline_message_id));
auto dc_id = DcId::internal(InlineMessageManager::get_inline_message_dc_id(input_bot_inline_message_id));
send_query(G()->net_query_creator().create(
telegram_api::messages_editInlineBotMessage(
flags, false /*ignored*/, false /*ignored*/, std::move(input_bot_inline_message_id), text,
@ -111,7 +112,7 @@ class SetInlineGameScoreQuery final : public Td::ResultHandler {
flags |= telegram_api::messages_setInlineGameScore::FORCE_MASK;
}
auto dc_id = DcId::internal(InlineQueriesManager::get_inline_message_dc_id(input_bot_inline_message_id));
auto dc_id = DcId::internal(InlineMessageManager::get_inline_message_dc_id(input_bot_inline_message_id));
send_query(G()->net_query_creator().create(
telegram_api::messages_setInlineGameScore(flags, false /*ignored*/, false /*ignored*/,
std::move(input_bot_inline_message_id), std::move(input_user), score),
@ -148,7 +149,7 @@ class GetInlineGameHighScoresQuery final : public Td::ResultHandler {
CHECK(input_bot_inline_message_id != nullptr);
CHECK(input_user != nullptr);
auto dc_id = DcId::internal(InlineQueriesManager::get_inline_message_dc_id(input_bot_inline_message_id));
auto dc_id = DcId::internal(InlineMessageManager::get_inline_message_dc_id(input_bot_inline_message_id));
send_query(G()->net_query_creator().create(
telegram_api::messages_getInlineGameHighScores(std::move(input_bot_inline_message_id), std::move(input_user)),
{}, dc_id));
@ -194,7 +195,7 @@ void InlineMessageManager::edit_inline_message_text(
TRY_RESULT_PROMISE(promise, new_reply_markup,
get_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true, false, true));
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -217,7 +218,7 @@ void InlineMessageManager::edit_inline_message_live_location(const string &inlin
TRY_RESULT_PROMISE(promise, new_reply_markup,
get_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true, false, true));
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -273,7 +274,7 @@ void InlineMessageManager::edit_inline_message_media(
TRY_RESULT_PROMISE(promise, new_reply_markup,
get_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true, false, true));
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -303,7 +304,7 @@ void InlineMessageManager::edit_inline_message_caption(const string &inline_mess
TRY_RESULT_PROMISE(promise, new_reply_markup,
get_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true, false, true));
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -322,7 +323,7 @@ void InlineMessageManager::edit_inline_message_reply_markup(const string &inline
TRY_RESULT_PROMISE(promise, new_reply_markup,
get_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true, false, true));
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -337,7 +338,7 @@ void InlineMessageManager::set_inline_game_score(const string &inline_message_id
int32 score, bool force, Promise<Unit> &&promise) {
CHECK(td_->auth_manager_->is_bot());
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -352,7 +353,7 @@ void InlineMessageManager::get_inline_game_high_scores(const string &inline_mess
Promise<td_api::object_ptr<td_api::gameHighScores>> &&promise) {
CHECK(td_->auth_manager_->is_bot());
auto input_bot_inline_message_id = td_->inline_queries_manager_->get_input_bot_inline_message_id(inline_message_id);
auto input_bot_inline_message_id = get_input_bot_inline_message_id(inline_message_id);
if (input_bot_inline_message_id == nullptr) {
return promise.set_error(Status::Error(400, "Invalid inline message identifier specified"));
}
@ -363,4 +364,39 @@ void InlineMessageManager::get_inline_game_high_scores(const string &inline_mess
->send(std::move(input_bot_inline_message_id), std::move(input_user));
}
int32 InlineMessageManager::get_inline_message_dc_id(
const telegram_api::object_ptr<telegram_api::InputBotInlineMessageID> &inline_message_id) {
CHECK(inline_message_id != nullptr);
switch (inline_message_id->get_id()) {
case telegram_api::inputBotInlineMessageID::ID:
return static_cast<const telegram_api::inputBotInlineMessageID *>(inline_message_id.get())->dc_id_;
case telegram_api::inputBotInlineMessageID64::ID:
return static_cast<const telegram_api::inputBotInlineMessageID64 *>(inline_message_id.get())->dc_id_;
default:
UNREACHABLE();
return 0;
}
}
telegram_api::object_ptr<telegram_api::InputBotInlineMessageID> InlineMessageManager::get_input_bot_inline_message_id(
const string &inline_message_id) {
auto r_binary = base64url_decode(inline_message_id);
if (r_binary.is_error()) {
return nullptr;
}
BufferSlice buffer_slice(r_binary.ok());
TlBufferParser parser(&buffer_slice);
auto result = buffer_slice.size() == 20 ? telegram_api::inputBotInlineMessageID::fetch(parser)
: telegram_api::inputBotInlineMessageID64::fetch(parser);
parser.fetch_end();
if (parser.get_error()) {
return nullptr;
}
if (!DcId::is_valid(get_inline_message_dc_id(result))) {
return nullptr;
}
LOG(INFO) << "Have inline message identifier: " << to_string(result);
return result;
}
} // namespace td

View File

@ -7,6 +7,7 @@
#pragma once
#include "td/telegram/td_api.h"
#include "td/telegram/telegram_api.h"
#include "td/telegram/UserId.h"
#include "td/actor/actor.h"
@ -51,9 +52,15 @@ class InlineMessageManager final : public Actor {
void get_inline_game_high_scores(const string &inline_message_id, UserId user_id,
Promise<td_api::object_ptr<td_api::gameHighScores>> &&promise);
static int32 get_inline_message_dc_id(
const telegram_api::object_ptr<telegram_api::InputBotInlineMessageID> &inline_message_id);
private:
void tear_down() final;
static telegram_api::object_ptr<telegram_api::InputBotInlineMessageID> get_input_bot_inline_message_id(
const string &inline_message_id);
Td *td_;
ActorShared<> parent_;
};

View File

@ -56,7 +56,6 @@
#include "td/utils/SliceBuilder.h"
#include "td/utils/Time.h"
#include "td/utils/tl_helpers.h"
#include "td/utils/tl_parsers.h"
namespace td {
@ -321,41 +320,6 @@ void InlineQueriesManager::after_get_difference() {
}
}
int32 InlineQueriesManager::get_inline_message_dc_id(
const tl_object_ptr<telegram_api::InputBotInlineMessageID> &inline_message_id) {
CHECK(inline_message_id != nullptr);
switch (inline_message_id->get_id()) {
case telegram_api::inputBotInlineMessageID::ID:
return static_cast<const telegram_api::inputBotInlineMessageID *>(inline_message_id.get())->dc_id_;
case telegram_api::inputBotInlineMessageID64::ID:
return static_cast<const telegram_api::inputBotInlineMessageID64 *>(inline_message_id.get())->dc_id_;
default:
UNREACHABLE();
return 0;
}
}
tl_object_ptr<telegram_api::InputBotInlineMessageID> InlineQueriesManager::get_input_bot_inline_message_id(
const string &inline_message_id) {
auto r_binary = base64url_decode(inline_message_id);
if (r_binary.is_error()) {
return nullptr;
}
BufferSlice buffer_slice(r_binary.ok());
TlBufferParser parser(&buffer_slice);
auto result = buffer_slice.size() == 20 ? telegram_api::inputBotInlineMessageID::fetch(parser)
: telegram_api::inputBotInlineMessageID64::fetch(parser);
parser.fetch_end();
if (parser.get_error()) {
return nullptr;
}
if (!DcId::is_valid(get_inline_message_dc_id(result))) {
return nullptr;
}
LOG(INFO) << "Have inline message identifier: " << to_string(result);
return result;
}
string InlineQueriesManager::get_inline_message_id(
tl_object_ptr<telegram_api::InputBotInlineMessageID> &&input_bot_inline_message_id) {
if (input_bot_inline_message_id == nullptr) {

View File

@ -78,11 +78,6 @@ class InlineQueriesManager final : public Actor {
void on_chosen_result(UserId user_id, Location user_location, const string &query, const string &result_id,
tl_object_ptr<telegram_api::InputBotInlineMessageID> &&input_bot_inline_message_id);
static int32 get_inline_message_dc_id(const tl_object_ptr<telegram_api::InputBotInlineMessageID> &inline_message_id);
static tl_object_ptr<telegram_api::InputBotInlineMessageID> get_input_bot_inline_message_id(
const string &inline_message_id);
static string get_inline_message_id(
tl_object_ptr<telegram_api::InputBotInlineMessageID> &&input_bot_inline_message_id);