1 #pragma once 2 3 #include <rapidjson/document.h> 4 #include <QColor> 5 #include <QString> 6 7 #include <chrono> 8 #include <cinttypes> 9 10 namespace chatterino { 11 12 struct ActionUser { 13 QString id; 14 QString login; 15 // displayName should be in format "login(localizedName)" for non-ascii usernames 16 QString displayName; 17 QColor color; 18 }; 19 20 struct PubSubAction { 21 PubSubAction(const rapidjson::Value &data, const QString &_roomID); 22 ActionUser source; 23 24 std::chrono::steady_clock::time_point timestamp; 25 QString roomID; 26 }; 27 28 // Used when a chat mode (i.e. slowmode, subscribers only mode) is enabled or 29 // disabled 30 struct ModeChangedAction : PubSubAction { 31 using PubSubAction::PubSubAction; 32 33 enum Mode { 34 Unknown, 35 Slow, 36 R9K, 37 SubscribersOnly, 38 EmoteOnly, 39 } mode; 40 41 // Whether the mode was turned on or off 42 enum State { 43 Off, 44 On, 45 } state; 46 47 uint32_t duration = 0; 48 getModeNamechatterino::ModeChangedAction49 const char *getModeName() const 50 { 51 switch (this->mode) 52 { 53 case Mode::Slow: 54 return "slow"; 55 case Mode::R9K: 56 return "r9k"; 57 case Mode::SubscribersOnly: 58 return "subscribers-only"; 59 case Mode::EmoteOnly: 60 return "emote-only"; 61 default: 62 return "unknown"; 63 } 64 } 65 }; 66 67 struct BanAction : PubSubAction { 68 using PubSubAction::PubSubAction; 69 70 ActionUser target; 71 72 QString reason; 73 74 uint32_t duration = 0; 75 isBanchatterino::BanAction76 bool isBan() const 77 { 78 return this->duration == 0; 79 } 80 }; 81 82 struct DeleteAction : PubSubAction { 83 using PubSubAction::PubSubAction; 84 85 ActionUser target; 86 87 QString messageId; 88 QString messageText; 89 }; 90 91 struct UnbanAction : PubSubAction { 92 using PubSubAction::PubSubAction; 93 94 ActionUser target; 95 96 enum { 97 Banned, 98 TimedOut, 99 } previousState; 100 wasBanchatterino::UnbanAction101 bool wasBan() const 102 { 103 return this->previousState == Banned; 104 } 105 }; 106 107 struct ClearChatAction : PubSubAction { 108 using PubSubAction::PubSubAction; 109 }; 110 111 struct ModerationStateAction : PubSubAction { 112 using PubSubAction::PubSubAction; 113 114 ActionUser target; 115 116 // true = modded 117 // false = unmodded 118 bool modded; 119 }; 120 121 struct AutomodAction : PubSubAction { 122 using PubSubAction::PubSubAction; 123 124 ActionUser target; 125 126 QString message; 127 128 QString reason; 129 130 QString msgID; 131 }; 132 133 struct AutomodUserAction : PubSubAction { 134 using PubSubAction::PubSubAction; 135 136 ActionUser target; 137 138 enum { 139 AddPermitted, 140 RemovePermitted, 141 AddBlocked, 142 RemoveBlocked, 143 Properties, 144 } type; 145 146 QString message; 147 }; 148 149 struct AutomodInfoAction : PubSubAction { 150 using PubSubAction::PubSubAction; 151 enum { 152 OnHold, 153 Denied, 154 Approved, 155 } type; 156 }; 157 158 } // namespace chatterino 159