1 // 2 // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 #pragma once 8 9 #include "td/telegram/MessageContentType.h" 10 #include "td/telegram/secret_api.h" 11 #include "td/telegram/td_api.h" 12 #include "td/telegram/telegram_api.h" 13 14 #include "td/utils/common.h" 15 #include "td/utils/StringBuilder.h" 16 17 namespace td { 18 19 class DialogAction { 20 enum class Type : int32 { 21 Cancel, 22 Typing, 23 RecordingVideo, 24 UploadingVideo, 25 RecordingVoiceNote, 26 UploadingVoiceNote, 27 UploadingPhoto, 28 UploadingDocument, 29 ChoosingLocation, 30 ChoosingContact, 31 StartPlayingGame, 32 RecordingVideoNote, 33 UploadingVideoNote, 34 SpeakingInVoiceChat, 35 ImportingMessages, 36 ChoosingSticker, 37 WatchingAnimations, 38 ClickingAnimatedEmoji 39 }; 40 Type type_ = Type::Cancel; 41 int32 progress_ = 0; 42 string emoji_; 43 44 DialogAction(Type type, int32 progress); 45 46 void init(Type type); 47 48 void init(Type type, int32 progress); 49 50 void init(Type type, string emoji); 51 52 void init(Type type, int32 message_id, string emoji, const string &data); 53 54 static bool is_valid_emoji(string &emoji); 55 56 public: 57 DialogAction() = default; 58 59 explicit DialogAction(td_api::object_ptr<td_api::ChatAction> &&action); 60 61 explicit DialogAction(telegram_api::object_ptr<telegram_api::SendMessageAction> &&action); 62 63 tl_object_ptr<telegram_api::SendMessageAction> get_input_send_message_action() const; 64 65 tl_object_ptr<secret_api::SendMessageAction> get_secret_input_send_message_action() const; 66 67 td_api::object_ptr<td_api::ChatAction> get_chat_action_object() const; 68 69 bool is_canceled_by_message_of_type(MessageContentType message_content_type) const; 70 71 static DialogAction get_uploading_action(MessageContentType message_content_type, int32 progress); 72 73 static DialogAction get_typing_action(); 74 75 static DialogAction get_speaking_action(); 76 77 int32 get_importing_messages_action_progress() const; 78 79 string get_watching_animations_emoji() const; 80 81 struct ClickingAnimateEmojiInfo { 82 int32 message_id = 0; 83 string emoji; 84 string data; 85 }; 86 ClickingAnimateEmojiInfo get_clicking_animated_emoji_action_info() const; 87 88 friend bool operator==(const DialogAction &lhs, const DialogAction &rhs) { 89 return lhs.type_ == rhs.type_ && lhs.progress_ == rhs.progress_ && lhs.emoji_ == rhs.emoji_; 90 } 91 92 friend StringBuilder &operator<<(StringBuilder &string_builder, const DialogAction &action); 93 }; 94 95 inline bool operator!=(const DialogAction &lhs, const DialogAction &rhs) { 96 return !(lhs == rhs); 97 } 98 99 StringBuilder &operator<<(StringBuilder &string_builder, const DialogAction &action); 100 101 } // namespace td 102