Game play send message action is supported.

This commit is contained in:
John Preston 2016-09-30 16:40:22 +03:00
parent 376941dd5e
commit a18e3e5616
7 changed files with 125 additions and 39 deletions

View File

@ -787,10 +787,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} is typing";
"lng_users_typing" = "{user} and {second_user} are typing";
"lng_many_typing" = "{count:_not_used_|# is|# are} typing";
"lng_playing_game" = "playing game";
"lng_user_playing_game" = "{user} is playing game";
"lng_users_playing_game" = "{user} and {second_user} are playing game";
"lng_many_playing_game" = "{count:_not_used_|# is|# are} playing game";
"lng_playing_game" = "playing a game";
"lng_user_playing_game" = "{user} is playing a game";
"lng_users_playing_game" = "{user} and {second_user} are playing a game";
"lng_many_playing_game" = "{count:_not_used_|# is|# are} playing a game";
"lng_send_action_record_video" = "recording a video";
"lng_user_action_record_video" = "{user} is recording a video";
"lng_send_action_upload_video" = "sending a video";

View File

@ -171,7 +171,7 @@ void History::draftSavedToCloud() {
bool History::updateTyping(uint64 ms, bool force) {
bool changed = force;
for (TypingUsers::iterator i = typing.begin(), e = typing.end(); i != e;) {
for (auto i = typing.begin(), e = typing.end(); i != e;) {
if (ms >= i.value()) {
i = typing.erase(i);
changed = true;
@ -179,7 +179,7 @@ bool History::updateTyping(uint64 ms, bool force) {
++i;
}
}
for (SendActionUsers::iterator i = sendActions.begin(); i != sendActions.cend();) {
for (auto i = sendActions.begin(); i != sendActions.cend();) {
if (ms >= i.value().until) {
i = sendActions.erase(i);
changed = true;
@ -189,23 +189,46 @@ bool History::updateTyping(uint64 ms, bool force) {
}
if (changed) {
QString newTypingStr;
int32 cnt = typing.size();
if (cnt > 2) {
newTypingStr = lng_many_typing(lt_count, cnt);
} else if (cnt > 1) {
int typingCount = typing.size();
if (typingCount > 2) {
newTypingStr = lng_many_typing(lt_count, typingCount);
} else if (typingCount > 1) {
newTypingStr = lng_users_typing(lt_user, typing.begin().key()->firstName, lt_second_user, (typing.end() - 1).key()->firstName);
} else if (cnt) {
} else if (typingCount) {
newTypingStr = peer->isUser() ? lang(lng_typing) : lng_user_typing(lt_user, typing.begin().key()->firstName);
} else if (!sendActions.isEmpty()) {
switch (sendActions.begin().value().type) {
case SendActionRecordVideo: newTypingStr = peer->isUser() ? lang(lng_send_action_record_video) : lng_user_action_record_video(lt_user, sendActions.begin().key()->firstName); break;
case SendActionUploadVideo: newTypingStr = peer->isUser() ? lang(lng_send_action_upload_video) : lng_user_action_upload_video(lt_user, sendActions.begin().key()->firstName); break;
case SendActionRecordVoice: newTypingStr = peer->isUser() ? lang(lng_send_action_record_audio) : lng_user_action_record_audio(lt_user, sendActions.begin().key()->firstName); break;
case SendActionUploadVoice: newTypingStr = peer->isUser() ? lang(lng_send_action_upload_audio) : lng_user_action_upload_audio(lt_user, sendActions.begin().key()->firstName); break;
case SendActionUploadPhoto: newTypingStr = peer->isUser() ? lang(lng_send_action_upload_photo) : lng_user_action_upload_photo(lt_user, sendActions.begin().key()->firstName); break;
case SendActionUploadFile: newTypingStr = peer->isUser() ? lang(lng_send_action_upload_file) : lng_user_action_upload_file(lt_user, sendActions.begin().key()->firstName); break;
case SendActionChooseLocation: newTypingStr = peer->isUser() ? lang(lng_send_action_geo_location) : lng_user_action_geo_location(lt_user, sendActions.begin().key()->firstName); break;
case SendActionChooseContact: newTypingStr = peer->isUser() ? lang(lng_send_action_choose_contact) : lng_user_action_choose_contact(lt_user, sendActions.begin().key()->firstName); break;
// Handles all actions except game playing.
auto sendActionString = [](SendActionType type, const QString &name) -> QString {
switch (type) {
case SendActionRecordVideo: return name.isEmpty() ? lang(lng_send_action_record_video) : lng_user_action_record_video(lt_user, name);
case SendActionUploadVideo: return name.isEmpty() ? lang(lng_send_action_upload_video) : lng_user_action_upload_video(lt_user, name);
case SendActionRecordVoice: return name.isEmpty() ? lang(lng_send_action_record_audio) : lng_user_action_record_audio(lt_user, name);
case SendActionUploadVoice: return name.isEmpty() ? lang(lng_send_action_upload_audio) : lng_user_action_upload_audio(lt_user, name);
case SendActionUploadPhoto: return name.isEmpty() ? lang(lng_send_action_upload_photo) : lng_user_action_upload_photo(lt_user, name);
case SendActionUploadFile: return name.isEmpty() ? lang(lng_send_action_upload_file) : lng_user_action_upload_file(lt_user, name);
case SendActionChooseLocation: return name.isEmpty() ? lang(lng_send_action_geo_location) : lng_user_action_geo_location(lt_user, name);
case SendActionChooseContact: return name.isEmpty() ? lang(lng_send_action_choose_contact) : lng_user_action_choose_contact(lt_user, name);
default: break;
};
return QString();
};
for (auto i = sendActions.cbegin(), e = sendActions.cend(); i != e; ++i) {
newTypingStr = sendActionString(i->type, peer->isUser() ? QString() : i.key()->firstName);
if (!newTypingStr.isEmpty()) {
break;
}
}
// Everyone in sendActions are playing a game.
if (newTypingStr.isEmpty()) {
int playingCount = sendActions.size();
if (playingCount > 2) {
newTypingStr = lng_many_playing_game(lt_count, playingCount);
} else if (playingCount > 1) {
newTypingStr = lng_users_playing_game(lt_user, sendActions.begin().key()->firstName, lt_second_user, (sendActions.end() - 1).key()->firstName);
} else {
newTypingStr = peer->isUser() ? lang(lng_playing_game) : lng_user_playing_game(lt_user, sendActions.begin().key()->firstName);
}
}
}
if (!newTypingStr.isEmpty()) {
@ -527,6 +550,12 @@ void Histories::regSendAction(History *history, UserData *user, const MTPSendMes
if (action.type() == mtpc_sendMessageCancelAction) {
history->unregTyping(user);
return;
} else if (action.type() == mtpc_sendMessageGameStopAction) {
auto it = history->sendActions.find(user);
if (it != history->sendActions.end() && it->type == SendActionPlayGame) {
history->unregTyping(user);
}
return;
}
uint64 ms = getms();
@ -540,12 +569,18 @@ void Histories::regSendAction(History *history, UserData *user, const MTPSendMes
case mtpc_sendMessageUploadDocumentAction: history->sendActions.insert(user, SendAction(SendActionUploadFile, ms + 6000, action.c_sendMessageUploadDocumentAction().vprogress.v)); break;
case mtpc_sendMessageGeoLocationAction: history->sendActions.insert(user, SendAction(SendActionChooseLocation, ms + 6000)); break;
case mtpc_sendMessageChooseContactAction: history->sendActions.insert(user, SendAction(SendActionChooseContact, ms + 6000)); break;
case mtpc_sendMessageGamePlayAction: {
auto it = history->sendActions.find(user);
if (it == history->sendActions.end() || it->type == SendActionPlayGame || it->until <= ms) {
history->sendActions.insert(user, SendAction(SendActionPlayGame, ms + 30000));
}
} break;
default: return;
}
user->madeAction(when);
TypingHistories::const_iterator i = typing.find(history);
auto i = typing.find(history);
if (i == typing.cend()) {
typing.insert(history, ms);
history->typingDots = 0;
@ -1059,13 +1094,13 @@ HistoryItem *History::addNewItem(HistoryItem *adding, bool newMsg) {
void History::unregTyping(UserData *from) {
uint64 updateAtMs = 0;
TypingUsers::iterator i = typing.find(from);
if (i != typing.end()) {
auto i = typing.find(from);
if (i != typing.cend()) {
updateAtMs = getms();
i.value() = updateAtMs;
}
SendActionUsers::iterator j = sendActions.find(from);
if (j != sendActions.end()) {
auto j = sendActions.find(from);
if (j != sendActions.cend()) {
if (!updateAtMs) updateAtMs = getms();
j.value().until = updateAtMs;
}

View File

@ -142,6 +142,7 @@ enum SendActionType {
SendActionUploadFile,
SendActionChooseLocation,
SendActionChooseContact,
SendActionPlayGame,
};
struct SendAction {
SendAction(SendActionType type, uint64 until, int32 progress = 0) : type(type), until(until), progress(progress) {
@ -401,9 +402,9 @@ public:
mutable const HistoryItem *textCachedFor = nullptr; // cache
mutable Text lastItemTextCache;
typedef QMap<UserData*, uint64> TypingUsers;
using TypingUsers = QMap<UserData*, uint64>;
TypingUsers typing;
typedef QMap<UserData*, SendAction> SendActionUsers;
using SendActionUsers = QMap<UserData*, SendAction>;
SendActionUsers sendActions;
QString typingStr;
Text typingText;

View File

@ -3454,6 +3454,7 @@ void HistoryWidget::updateSendAction(History *history, SendActionType type, int3
case SendActionUploadFile: action = MTP_sendMessageUploadDocumentAction(MTP_int(progress)); break;
case SendActionChooseLocation: action = MTP_sendMessageGeoLocationAction(); break;
case SendActionChooseContact: action = MTP_sendMessageChooseContactAction(); break;
case SendActionPlayGame: action = MTP_sendMessageGamePlayAction(); break;
}
_sendActionRequests.insert(qMakePair(history, type), MTP::send(MTPmessages_SetTyping(history->peer->input, action), rpcDone(&HistoryWidget::sendActionDone)));
if (type == SendActionTyping) _sendActionStopTimer.start(5000);
@ -5817,7 +5818,8 @@ void HistoryWidget::app_sendBotCallback(const HistoryMessageReplyMarkup::Button
}
void HistoryWidget::botCallbackDone(BotCallbackInfo info, const MTPmessages_BotCallbackAnswer &answer, mtpRequestId req) {
if (auto item = App::histItemById(info.msgId)) {
auto item = App::histItemById(info.msgId);
if (item) {
if (auto markup = item->Get<HistoryMessageReplyMarkup>()) {
if (info.row < markup->rows.size() && info.col < markup->rows.at(info.row).size()) {
if (markup->rows.at(info.row).at(info.col).requestId == req) {
@ -5842,6 +5844,7 @@ void HistoryWidget::botCallbackDone(BotCallbackInfo info, const MTPmessages_BotC
if (info.game) {
url = appendShareGameScoreUrl(url, info.msgId);
BotGameUrlClickHandler(info.bot, url).onClick(Qt::LeftButton);
updateSendAction(item->history(), SendActionPlayGame);
} else {
UrlClickHandler(url).onClick(Qt::LeftButton);
}

View File

@ -479,6 +479,8 @@ sendMessageUploadPhotoAction#d1d34a26 progress:int = SendMessageAction;
sendMessageUploadDocumentAction#aa0cd9e4 progress:int = SendMessageAction;
sendMessageGeoLocationAction#176f8ba1 = SendMessageAction;
sendMessageChooseContactAction#628cbc6f = SendMessageAction;
sendMessageGamePlayAction#dd6a8f48 = SendMessageAction;
sendMessageGameStopAction#15c2c99a = SendMessageAction;
contacts.found#1aa1f784 results:Vector<Peer> chats:Vector<Chat> users:Vector<User> = contacts.Found;
@ -649,7 +651,7 @@ inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true message:strin
inputBotInlineMessageMediaGeo#f4a59de1 flags:# geo_point:InputGeoPoint reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
inputBotInlineMessageMediaVenue#aaafadc8 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
inputBotInlineMessageMediaContact#2daf01a7 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
inputBotInlineMessageGame#3c00f8aa reply_markup:ReplyMarkup = InputBotInlineMessage;
inputBotInlineMessageGame#4b425864 flags:# reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
inputBotInlineResult#2cbbe15a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb_url:flags.4?string content_url:flags.5?string content_type:flags.5?string w:flags.6?int h:flags.6?int duration:flags.7?int send_message:InputBotInlineMessage = InputBotInlineResult;
inputBotInlineResultPhoto#a8d864a7 id:string type:string photo:InputPhoto send_message:InputBotInlineMessage = InputBotInlineResult;

View File

@ -3896,6 +3896,14 @@ void _serialize_sendMessageChooseContactAction(MTPStringLogger &to, int32 stage,
to.add("{ sendMessageChooseContactAction }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_sendMessageGamePlayAction(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
to.add("{ sendMessageGamePlayAction }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_sendMessageGameStopAction(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
to.add("{ sendMessageGameStopAction }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_contacts_found(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
@ -5387,6 +5395,8 @@ void _serialize_inputBotInlineMessageMediaContact(MTPStringLogger &to, int32 sta
}
void _serialize_inputBotInlineMessageGame(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
MTPDinputBotInlineMessageGame::Flags flag(iflag);
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
@ -5394,7 +5404,8 @@ void _serialize_inputBotInlineMessageGame(MTPStringLogger &to, int32 stage, int3
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" reply_markup: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDinputBotInlineMessageGame::Flag::f_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -9144,6 +9155,8 @@ namespace {
_serializers.insert(mtpc_sendMessageUploadDocumentAction, _serialize_sendMessageUploadDocumentAction);
_serializers.insert(mtpc_sendMessageGeoLocationAction, _serialize_sendMessageGeoLocationAction);
_serializers.insert(mtpc_sendMessageChooseContactAction, _serialize_sendMessageChooseContactAction);
_serializers.insert(mtpc_sendMessageGamePlayAction, _serialize_sendMessageGamePlayAction);
_serializers.insert(mtpc_sendMessageGameStopAction, _serialize_sendMessageGameStopAction);
_serializers.insert(mtpc_contacts_found, _serialize_contacts_found);
_serializers.insert(mtpc_inputPrivacyKeyStatusTimestamp, _serialize_inputPrivacyKeyStatusTimestamp);
_serializers.insert(mtpc_inputPrivacyKeyChatInvite, _serialize_inputPrivacyKeyChatInvite);

View File

@ -353,6 +353,8 @@ enum {
mtpc_sendMessageUploadDocumentAction = 0xaa0cd9e4,
mtpc_sendMessageGeoLocationAction = 0x176f8ba1,
mtpc_sendMessageChooseContactAction = 0x628cbc6f,
mtpc_sendMessageGamePlayAction = 0xdd6a8f48,
mtpc_sendMessageGameStopAction = 0x15c2c99a,
mtpc_contacts_found = 0x1aa1f784,
mtpc_inputPrivacyKeyStatusTimestamp = 0x4f96cb18,
mtpc_inputPrivacyKeyChatInvite = 0xbdfb0426,
@ -474,7 +476,7 @@ enum {
mtpc_inputBotInlineMessageMediaGeo = 0xf4a59de1,
mtpc_inputBotInlineMessageMediaVenue = 0xaaafadc8,
mtpc_inputBotInlineMessageMediaContact = 0x2daf01a7,
mtpc_inputBotInlineMessageGame = 0x3c00f8aa,
mtpc_inputBotInlineMessageGame = 0x4b425864,
mtpc_inputBotInlineResult = 0x2cbbe15a,
mtpc_inputBotInlineResultPhoto = 0xa8d864a7,
mtpc_inputBotInlineResultDocument = 0xfff8fdc4,
@ -14639,11 +14641,22 @@ public:
class MTPDinputBotInlineMessageGame : public mtpDataImpl<MTPDinputBotInlineMessageGame> {
public:
enum class Flag : int32 {
f_reply_markup = (1 << 2),
MAX_FIELD = (1 << 2),
};
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool has_reply_markup() const { return vflags.v & Flag::f_reply_markup; }
MTPDinputBotInlineMessageGame() {
}
MTPDinputBotInlineMessageGame(const MTPReplyMarkup &_reply_markup) : vreply_markup(_reply_markup) {
MTPDinputBotInlineMessageGame(const MTPflags<MTPDinputBotInlineMessageGame::Flags> &_flags, const MTPReplyMarkup &_reply_markup) : vflags(_flags), vreply_markup(_reply_markup) {
}
MTPflags<MTPDinputBotInlineMessageGame::Flags> vflags;
MTPReplyMarkup vreply_markup;
};
@ -24778,6 +24791,12 @@ public:
inline static MTPsendMessageAction new_sendMessageChooseContactAction() {
return MTPsendMessageAction(mtpc_sendMessageChooseContactAction);
}
inline static MTPsendMessageAction new_sendMessageGamePlayAction() {
return MTPsendMessageAction(mtpc_sendMessageGamePlayAction);
}
inline static MTPsendMessageAction new_sendMessageGameStopAction() {
return MTPsendMessageAction(mtpc_sendMessageGameStopAction);
}
inline static MTPcontacts_found new_contacts_found(const MTPVector<MTPPeer> &_results, const MTPVector<MTPChat> &_chats, const MTPVector<MTPUser> &_users) {
return MTPcontacts_found(new MTPDcontacts_found(_results, _chats, _users));
}
@ -25141,8 +25160,8 @@ public:
inline static MTPinputBotInlineMessage new_inputBotInlineMessageMediaContact(const MTPflags<MTPDinputBotInlineMessageMediaContact::Flags> &_flags, const MTPstring &_phone_number, const MTPstring &_first_name, const MTPstring &_last_name, const MTPReplyMarkup &_reply_markup) {
return MTPinputBotInlineMessage(new MTPDinputBotInlineMessageMediaContact(_flags, _phone_number, _first_name, _last_name, _reply_markup));
}
inline static MTPinputBotInlineMessage new_inputBotInlineMessageGame(const MTPReplyMarkup &_reply_markup) {
return MTPinputBotInlineMessage(new MTPDinputBotInlineMessageGame(_reply_markup));
inline static MTPinputBotInlineMessage new_inputBotInlineMessageGame(const MTPflags<MTPDinputBotInlineMessageGame::Flags> &_flags, const MTPReplyMarkup &_reply_markup) {
return MTPinputBotInlineMessage(new MTPDinputBotInlineMessageGame(_flags, _reply_markup));
}
inline static MTPinputBotInlineResult new_inputBotInlineResult(const MTPflags<MTPDinputBotInlineResult::Flags> &_flags, const MTPstring &_id, const MTPstring &_type, const MTPstring &_title, const MTPstring &_description, const MTPstring &_url, const MTPstring &_thumb_url, const MTPstring &_content_url, const MTPstring &_content_type, MTPint _w, MTPint _h, MTPint _duration, const MTPInputBotInlineMessage &_send_message) {
return MTPinputBotInlineResult(new MTPDinputBotInlineResult(_flags, _id, _type, _title, _description, _url, _thumb_url, _content_url, _content_type, _w, _h, _duration, _send_message));
@ -32738,6 +32757,8 @@ inline void MTPsendMessageAction::read(const mtpPrime *&from, const mtpPrime *en
} break;
case mtpc_sendMessageGeoLocationAction: _type = cons; break;
case mtpc_sendMessageChooseContactAction: _type = cons; break;
case mtpc_sendMessageGamePlayAction: _type = cons; break;
case mtpc_sendMessageGameStopAction: _type = cons; break;
default: throw mtpErrorUnexpected(cons, "MTPsendMessageAction");
}
}
@ -32773,6 +32794,8 @@ inline MTPsendMessageAction::MTPsendMessageAction(mtpTypeId type) : mtpDataOwner
case mtpc_sendMessageUploadDocumentAction: setData(new MTPDsendMessageUploadDocumentAction()); break;
case mtpc_sendMessageGeoLocationAction: break;
case mtpc_sendMessageChooseContactAction: break;
case mtpc_sendMessageGamePlayAction: break;
case mtpc_sendMessageGameStopAction: break;
default: throw mtpErrorBadTypeId(type, "MTPsendMessageAction");
}
}
@ -32814,6 +32837,12 @@ inline MTPsendMessageAction MTP_sendMessageGeoLocationAction() {
inline MTPsendMessageAction MTP_sendMessageChooseContactAction() {
return MTP::internal::TypeCreator::new_sendMessageChooseContactAction();
}
inline MTPsendMessageAction MTP_sendMessageGamePlayAction() {
return MTP::internal::TypeCreator::new_sendMessageGamePlayAction();
}
inline MTPsendMessageAction MTP_sendMessageGameStopAction() {
return MTP::internal::TypeCreator::new_sendMessageGameStopAction();
}
inline MTPcontacts_found::MTPcontacts_found() : mtpDataOwner(new MTPDcontacts_found()) {
}
@ -35653,7 +35682,7 @@ inline uint32 MTPinputBotInlineMessage::innerLength() const {
}
case mtpc_inputBotInlineMessageGame: {
const MTPDinputBotInlineMessageGame &v(c_inputBotInlineMessageGame());
return v.vreply_markup.innerLength();
return v.vflags.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0);
}
}
return 0;
@ -35710,7 +35739,8 @@ inline void MTPinputBotInlineMessage::read(const mtpPrime *&from, const mtpPrime
case mtpc_inputBotInlineMessageGame: _type = cons; {
if (!data) setData(new MTPDinputBotInlineMessageGame());
MTPDinputBotInlineMessageGame &v(_inputBotInlineMessageGame());
v.vreply_markup.read(from, end);
v.vflags.read(from, end);
if (v.has_reply_markup()) { v.vreply_markup.read(from, end); } else { v.vreply_markup = MTPReplyMarkup(); }
} break;
default: throw mtpErrorUnexpected(cons, "MTPinputBotInlineMessage");
}
@ -35756,7 +35786,8 @@ inline void MTPinputBotInlineMessage::write(mtpBuffer &to) const {
} break;
case mtpc_inputBotInlineMessageGame: {
const MTPDinputBotInlineMessageGame &v(c_inputBotInlineMessageGame());
v.vreply_markup.write(to);
v.vflags.write(to);
if (v.has_reply_markup()) v.vreply_markup.write(to);
} break;
}
}
@ -35803,8 +35834,9 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(MTPDinputBotInlineMessageMediaContact::Flags)
inline MTPinputBotInlineMessage MTP_inputBotInlineMessageMediaContact(const MTPflags<MTPDinputBotInlineMessageMediaContact::Flags> &_flags, const MTPstring &_phone_number, const MTPstring &_first_name, const MTPstring &_last_name, const MTPReplyMarkup &_reply_markup) {
return MTP::internal::TypeCreator::new_inputBotInlineMessageMediaContact(_flags, _phone_number, _first_name, _last_name, _reply_markup);
}
inline MTPinputBotInlineMessage MTP_inputBotInlineMessageGame(const MTPReplyMarkup &_reply_markup) {
return MTP::internal::TypeCreator::new_inputBotInlineMessageGame(_reply_markup);
Q_DECLARE_OPERATORS_FOR_FLAGS(MTPDinputBotInlineMessageGame::Flags)
inline MTPinputBotInlineMessage MTP_inputBotInlineMessageGame(const MTPflags<MTPDinputBotInlineMessageGame::Flags> &_flags, const MTPReplyMarkup &_reply_markup) {
return MTP::internal::TypeCreator::new_inputBotInlineMessageGame(_flags, _reply_markup);
}
inline uint32 MTPinputBotInlineResult::innerLength() const {