Skip to content

Commit a82cc1c

Browse files
committed
Support telegram_api::updateEphemeralBotCallbackQuery.
1 parent 8dddefb commit a82cc1c

6 files changed

Lines changed: 58 additions & 12 deletions

File tree

td/telegram/CallbackQueriesManager.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,37 @@ void CallbackQueriesManager::on_new_query(int64 callback_query_id, UserId sender
241241
chat_instance, std::move(payload)));
242242
}
243243

244+
void CallbackQueriesManager::on_new_ephemeral_query(
245+
int64 callback_query_id, UserId sender_user_id, BufferSlice &&data,
246+
telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message) {
247+
if (!sender_user_id.is_valid()) {
248+
LOG(ERROR) << "Receive new ephemeral callback query from invalid " << sender_user_id;
249+
return;
250+
}
251+
LOG_IF(ERROR, !td_->user_manager_->have_min_user(sender_user_id)) << "Receive unknown " << sender_user_id;
252+
if (!td_->auth_manager_->is_bot()) {
253+
LOG(ERROR) << "Receive new callback query";
254+
return;
255+
}
256+
257+
auto payload = get_query_payload(std::move(data), string());
258+
if (payload == nullptr) {
259+
return;
260+
}
261+
262+
auto message_full_id = td_->messages_manager_->on_edited_ephemeral_message(std::move(message), true);
263+
if (!message_full_id.get_message_id().is_local()) {
264+
LOG(ERROR) << "Receive ephemeral callback query from " << message_full_id;
265+
return;
266+
}
267+
268+
send_closure(G()->td(), &Td::send_update,
269+
td_api::make_object<td_api::updateNewCallbackQuery>(
270+
callback_query_id, td_->user_manager_->get_user_id_object(sender_user_id, "updateNewCallbackQuery"),
271+
td_->dialog_manager_->get_chat_id_object(message_full_id.get_dialog_id(), "updateNewCallbackQuery"),
272+
message_full_id.get_message_id().get(), 0, std::move(payload)));
273+
}
274+
244275
void CallbackQueriesManager::on_new_inline_query(
245276
int64 callback_query_id, UserId sender_user_id,
246277
tl_object_ptr<telegram_api::InputBotInlineMessageID> &&inline_message_id, BufferSlice &&data, int64 chat_instance,

td/telegram/CallbackQueriesManager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class CallbackQueriesManager {
3131
void on_new_query(int64 callback_query_id, UserId sender_user_id, DialogId dialog_id, MessageId message_id,
3232
BufferSlice &&data, int64 chat_instance, string &&game_short_name);
3333

34+
void on_new_ephemeral_query(int64 callback_query_id, UserId sender_user_id, BufferSlice &&data,
35+
telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message);
36+
3437
void on_new_inline_query(int64 callback_query_id, UserId sender_user_id,
3538
tl_object_ptr<telegram_api::InputBotInlineMessageID> &&inline_message_id, BufferSlice &&data,
3639
int64 chat_instance, string &&game_short_name);

td/telegram/MessagesManager.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4306,18 +4306,28 @@ void MessagesManager::on_new_ephemeral_message(telegram_api::object_ptr<telegram
43064306
on_get_message(std::move(message_info), true, "on_new_ephemeral_message");
43074307
}
43084308

4309-
void MessagesManager::on_edited_ephemeral_message(telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message) {
4309+
MessageFullId MessagesManager::on_edited_ephemeral_message(
4310+
telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message, bool force) {
43104311
auto message_info = parse_ephemeral_message(td_, std::move(message), "on_edited_ephemeral_message");
43114312
auto dialog_id = message_info.dialog_id;
43124313
if (!dialog_id.is_valid()) {
4313-
return;
4314+
return MessageFullId();
43144315
}
43154316

43164317
message_info.message_id = get_message_id_of_ephemeral_message_id(dialog_id, message_info.ephemeral_message_id);
43174318
if (message_info.message_id == MessageId()) {
4318-
return;
4319+
if (!force) {
4320+
return MessageFullId();
4321+
}
4322+
force_create_dialog(dialog_id, "on_edited_ephemeral_message", true);
4323+
Dialog *d = get_dialog(dialog_id);
4324+
if (d == nullptr) {
4325+
return MessageFullId();
4326+
}
4327+
CHECK(d->ephemeral_message_ids.count(message_info.ephemeral_message_id) == 0);
4328+
message_info.message_id = get_next_local_message_id(d);
43194329
}
4320-
on_get_message(std::move(message_info), false, "on_edited_ephemeral_message");
4330+
return on_get_message(std::move(message_info), false, "on_edited_ephemeral_message");
43214331
}
43224332

43234333
void MessagesManager::on_delete_ephemeral_messages(DialogId dialog_id,

td/telegram/MessagesManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@ class MessagesManager final : public Actor {
323323

324324
void on_new_ephemeral_message(telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message);
325325

326-
void on_edited_ephemeral_message(telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message);
326+
MessageFullId on_edited_ephemeral_message(telegram_api::object_ptr<telegram_api::ephemeralMessage> &&message,
327+
bool force = false);
327328

328329
void on_delete_ephemeral_messages(DialogId dialog_id, vector<EphemeralMessageId> ephemeral_message_ids);
329330

td/telegram/UpdatesManager.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4513,6 +4513,13 @@ void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateBotCallbackQuer
45134513
promise.set_value(Unit());
45144514
}
45154515

4516+
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateEphemeralBotCallbackQuery> update,
4517+
Promise<Unit> &&promise) {
4518+
td_->callback_queries_manager_->on_new_ephemeral_query(update->query_id_, UserId(update->user_id_),
4519+
std::move(update->data_), std::move(update->message_));
4520+
promise.set_value(Unit());
4521+
}
4522+
45164523
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateInlineBotCallbackQuery> update,
45174524
Promise<Unit> &&promise) {
45184525
td_->callback_queries_manager_->on_new_inline_query(update->query_id_, UserId(update->user_id_),
@@ -5092,9 +5099,4 @@ void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateNewStoryReactio
50925099
promise.set_value(Unit());
50935100
}
50945101

5095-
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateEphemeralBotCallbackQuery> update,
5096-
Promise<Unit> &&promise) {
5097-
promise.set_value(Unit());
5098-
}
5099-
51005102
} // namespace td

td/telegram/UpdatesManager.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@ class UpdatesManager final : public Actor {
633633
void on_update(tl_object_ptr<telegram_api::updateBotInlineSend> update, Promise<Unit> &&promise);
634634

635635
void on_update(tl_object_ptr<telegram_api::updateBotCallbackQuery> update, Promise<Unit> &&promise);
636+
void on_update(tl_object_ptr<telegram_api::updateEphemeralBotCallbackQuery> update, Promise<Unit> &&promise);
636637
void on_update(tl_object_ptr<telegram_api::updateInlineBotCallbackQuery> update, Promise<Unit> &&promise);
637638
void on_update(tl_object_ptr<telegram_api::updateBusinessBotCallbackQuery> update, Promise<Unit> &&promise);
638639

@@ -785,8 +786,6 @@ class UpdatesManager final : public Actor {
785786
// unsupported updates
786787

787788
void on_update(tl_object_ptr<telegram_api::updateNewStoryReaction> update, Promise<Unit> &&promise);
788-
789-
void on_update(tl_object_ptr<telegram_api::updateEphemeralBotCallbackQuery> update, Promise<Unit> &&promise);
790789
};
791790

792791
} // namespace td

0 commit comments

Comments
 (0)