// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #pragma once #include "td/telegram/DialogId.h" #include "td/telegram/RequestedDialogType.h" #include "td/telegram/td_api.h" #include "td/telegram/telegram_api.h" #include "td/telegram/UserId.h" #include "td/utils/common.h" #include "td/utils/Status.h" #include "td/utils/StringBuilder.h" namespace td { class ContactsManager; class Dependencies; struct KeyboardButton { // append only enum class Type : int32 { Text, RequestPhoneNumber, RequestLocation, RequestPoll, RequestPollQuiz, RequestPollRegular, WebView, RequestDialog }; Type type; string text; string url; // WebView only unique_ptr requested_dialog_type; // RequestDialog only }; struct InlineKeyboardButton { // append only enum class Type : int32 { Url, Callback, CallbackGame, SwitchInline, SwitchInlineCurrentDialog, Buy, UrlAuth, CallbackWithPassword, User, WebView }; Type type; int64 id = 0; // UrlAuth only, button_id or (2 * request_write_access - 1) * bot_user_id UserId user_id; // User only string text; string forward_text; // UrlAuth only string data; }; struct ReplyMarkup { // append only enum class Type : int32 { InlineKeyboard, ShowKeyboard, RemoveKeyboard, ForceReply }; Type type; bool is_personal = false; // for ShowKeyboard, RemoveKeyboard, ForceReply bool is_persistent = false; // for ShowKeyboard bool need_resize_keyboard = false; // for ShowKeyboard bool is_one_time_keyboard = false; // for ShowKeyboard vector> keyboard; // for ShowKeyboard string placeholder; // for ShowKeyboard, ForceReply vector> inline_keyboard; // for InlineKeyboard StringBuilder &print(StringBuilder &string_builder) const; tl_object_ptr get_input_reply_markup(ContactsManager *contacts_manager) const; tl_object_ptr get_reply_markup_object(ContactsManager *contacts_manager) const; Status check_chosen_dialog(Td *td, int32 button_id, DialogId dialog_id) const; }; bool operator==(const ReplyMarkup &lhs, const ReplyMarkup &rhs); bool operator!=(const ReplyMarkup &lhs, const ReplyMarkup &rhs); StringBuilder &operator<<(StringBuilder &string_builder, const ReplyMarkup &reply_markup); unique_ptr get_reply_markup(tl_object_ptr &&reply_markup_ptr, bool is_bot, bool only_inline_keyboard, bool message_contains_mention); Result> get_reply_markup(tl_object_ptr &&reply_markup_ptr, bool is_bot, bool only_inline_keyboard, bool request_buttons_allowed, bool switch_inline_buttons_allowed) TD_WARN_UNUSED_RESULT; unique_ptr dup_reply_markup(const unique_ptr &reply_markup); tl_object_ptr get_input_reply_markup(ContactsManager *contacts_manager, const unique_ptr &reply_markup); tl_object_ptr get_reply_markup_object(ContactsManager *contacts_manager, const unique_ptr &reply_markup); void add_reply_markup_dependencies(Dependencies &dependencies, const ReplyMarkup *reply_markup); } // namespace td