1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026
//
// 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/KeyboardButtonStyle.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 Dependencies;
class UserManager;
struct KeyboardButton {
// append only
enum class Type : int32 {
Text,
RequestPhoneNumber,
RequestLocation,
RequestPoll,
RequestPollQuiz,
RequestPollRegular,
WebView,
RequestDialog
};
Type type;
KeyboardButtonStyle style;
string text;
string url; // WebView only
unique_ptr<RequestedDialogType> requested_dialog_type; // RequestDialog only
};
struct InlineKeyboardButton {
// append only
enum class Type : int32 {
Url,
Callback,
CallbackGame,
SwitchInline,
SwitchInlineCurrentDialog,
Buy,
UrlAuth,
CallbackWithPassword,
User,
WebView,
Copy
};
Type type;
int64 id = 0; // UrlAuth: button_id or (2 * request_write_access - 1) * bot_user_id
// SwitchInline: mask of allowed target chats; 0 if any
UserId user_id; // User only
KeyboardButtonStyle style;
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<vector<KeyboardButton>> keyboard; // for ShowKeyboard
string placeholder; // for ShowKeyboard, ForceReply
vector<vector<InlineKeyboardButton>> inline_keyboard; // for InlineKeyboard
StringBuilder &print(StringBuilder &string_builder) const;
tl_object_ptr<telegram_api::ReplyMarkup> get_input_reply_markup(UserManager *user_manager) const;
tl_object_ptr<td_api::ReplyMarkup> get_reply_markup_object(UserManager *user_manager) const;
const RequestedDialogType *get_requested_dialog_type(int32 button_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);
KeyboardButton get_keyboard_button(tl_object_ptr<telegram_api::KeyboardButton> &&keyboard_button_ptr);
Result<KeyboardButton> get_keyboard_button(td_api::object_ptr<td_api::keyboardButton> &&button,
bool request_buttons_allowed);
td_api::object_ptr<td_api::keyboardButton> get_keyboard_button_object(const KeyboardButton &keyboard_button);
telegram_api::object_ptr<telegram_api::KeyboardButton> get_input_keyboard_button(const KeyboardButton &keyboard_button);
unique_ptr<ReplyMarkup> get_reply_markup(tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup_ptr, bool is_bot,
bool only_inline_keyboard, bool message_contains_mention);
Result<unique_ptr<ReplyMarkup>> get_inline_reply_markup(td_api::object_ptr<td_api::ReplyMarkup> &&reply_markup_ptr,
bool is_bot, bool switch_inline_buttons_allowed);
Result<unique_ptr<ReplyMarkup>> get_reply_markup(td_api::object_ptr<td_api::ReplyMarkup> &&reply_markup_ptr,
DialogType dialog_type, bool is_admined_monoforum, bool is_bot,
bool is_anonymous);
unique_ptr<ReplyMarkup> dup_reply_markup(const unique_ptr<ReplyMarkup> &reply_markup);
tl_object_ptr<telegram_api::ReplyMarkup> get_input_reply_markup(UserManager *user_manager,
const unique_ptr<ReplyMarkup> &reply_markup);
tl_object_ptr<td_api::ReplyMarkup> get_reply_markup_object(UserManager *user_manager,
const unique_ptr<ReplyMarkup> &reply_markup);
void add_reply_markup_dependencies(Dependencies &dependencies, const ReplyMarkup *reply_markup);
} // namespace td
|