refactor(eventsub): use variants for sum types (#5930)
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include <string_view>
|
||||
|
||||
namespace chatterino::eventsub::lib::detail {
|
||||
|
||||
template <typename T>
|
||||
consteval std::string_view fieldFor()
|
||||
{
|
||||
return T::TAG;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
consteval std::string_view fieldFor()
|
||||
requires requires { T::FIELD; }
|
||||
{
|
||||
return T::FIELD;
|
||||
}
|
||||
|
||||
} // namespace chatterino::eventsub::lib::detail
|
||||
@@ -13,7 +13,8 @@ enum class Kind : int {
|
||||
ExpectedString,
|
||||
UnknownEnumValue,
|
||||
InnerRootMissing,
|
||||
NoMessageHandler
|
||||
NoMessageHandler,
|
||||
UnknownVariant,
|
||||
};
|
||||
|
||||
class ApplicationErrorCategory final : public boost::system::error_category
|
||||
|
||||
+41
-13
@@ -44,12 +44,16 @@ struct MessageFragment {
|
||||
};
|
||||
|
||||
struct Subcription {
|
||||
static constexpr std::string_view TAG = "sub";
|
||||
|
||||
std::string subTier;
|
||||
bool isPrime;
|
||||
int durationMonths;
|
||||
};
|
||||
|
||||
struct Resubscription {
|
||||
static constexpr std::string_view TAG = "resub";
|
||||
|
||||
int cumulativeMonths;
|
||||
int durationMonths;
|
||||
std::optional<int> streakMonths;
|
||||
@@ -63,6 +67,8 @@ struct Resubscription {
|
||||
};
|
||||
|
||||
struct GiftSubscription {
|
||||
static constexpr std::string_view TAG = "sub_gift";
|
||||
|
||||
int durationMonths;
|
||||
std::optional<int> cumulativeTotal;
|
||||
std::optional<int> streakMonths;
|
||||
@@ -74,6 +80,8 @@ struct GiftSubscription {
|
||||
};
|
||||
|
||||
struct CommunityGiftSubscription {
|
||||
static constexpr std::string_view TAG = "community_sub_gift";
|
||||
|
||||
std::string id;
|
||||
int total;
|
||||
std::string subTier;
|
||||
@@ -81,6 +89,8 @@ struct CommunityGiftSubscription {
|
||||
};
|
||||
|
||||
struct GiftPaidUpgrade {
|
||||
static constexpr std::string_view TAG = "gift_paid_upgrade";
|
||||
|
||||
bool gifterIsAnonymous;
|
||||
std::optional<std::string> gifterUserID;
|
||||
std::optional<std::string> gifterUserName;
|
||||
@@ -88,10 +98,14 @@ struct GiftPaidUpgrade {
|
||||
};
|
||||
|
||||
struct PrimePaidUpgrade {
|
||||
static constexpr std::string_view TAG = "prime_paid_upgrade";
|
||||
|
||||
std::string subTier;
|
||||
};
|
||||
|
||||
struct Raid {
|
||||
static constexpr std::string_view TAG = "raid";
|
||||
|
||||
std::string userID;
|
||||
std::string userName;
|
||||
std::string userLogin;
|
||||
@@ -100,9 +114,12 @@ struct Raid {
|
||||
};
|
||||
|
||||
struct Unraid {
|
||||
static constexpr std::string_view TAG = "unraid";
|
||||
};
|
||||
|
||||
struct PayItForward {
|
||||
static constexpr std::string_view TAG = "pay_it_forward";
|
||||
|
||||
bool gifterIsAnonymous;
|
||||
std::optional<std::string> gifterUserID;
|
||||
std::optional<std::string> gifterUserName;
|
||||
@@ -110,21 +127,29 @@ struct PayItForward {
|
||||
};
|
||||
|
||||
struct Announcement {
|
||||
static constexpr std::string_view TAG = "announcement";
|
||||
|
||||
std::string color;
|
||||
};
|
||||
|
||||
struct CharityDonationAmount {
|
||||
static constexpr std::string_view TAG = "charity_donation_amount";
|
||||
|
||||
int value;
|
||||
int decimalPlaces;
|
||||
std::string currency;
|
||||
};
|
||||
|
||||
struct CharityDonation {
|
||||
static constexpr std::string_view TAG = "charity_donation";
|
||||
|
||||
std::string charityName;
|
||||
CharityDonationAmount amount;
|
||||
};
|
||||
|
||||
struct BitsBadgeTier {
|
||||
static constexpr std::string_view TAG = "bits_badge_tier";
|
||||
|
||||
int tier;
|
||||
};
|
||||
|
||||
@@ -146,19 +171,22 @@ struct Event {
|
||||
std::string systemMessage;
|
||||
std::string messageID;
|
||||
Message message;
|
||||
std::string noticeType;
|
||||
std::optional<Subcription> sub;
|
||||
std::optional<Resubscription> resub;
|
||||
std::optional<GiftSubscription> subGift;
|
||||
std::optional<CommunityGiftSubscription> communitySubGift;
|
||||
std::optional<GiftPaidUpgrade> giftPaidUpgrade;
|
||||
std::optional<PrimePaidUpgrade> primePaidUpgrade;
|
||||
std::optional<Raid> raid;
|
||||
std::optional<Unraid> unraid;
|
||||
std::optional<PayItForward> payItForward;
|
||||
std::optional<Announcement> announcement;
|
||||
std::optional<CharityDonation> charityDonation;
|
||||
std::optional<BitsBadgeTier> bitsBadgeTier;
|
||||
/// json_tag=notice_type
|
||||
std::variant<Subcription, //
|
||||
Resubscription, //
|
||||
GiftSubscription, //
|
||||
CommunityGiftSubscription, //
|
||||
GiftPaidUpgrade, //
|
||||
PrimePaidUpgrade, //
|
||||
Raid, //
|
||||
Unraid, //
|
||||
PayItForward, //
|
||||
Announcement, //
|
||||
CharityDonation, //
|
||||
BitsBadgeTier, //
|
||||
std::string //
|
||||
>
|
||||
inner;
|
||||
};
|
||||
|
||||
struct Payload {
|
||||
|
||||
+140
-63
@@ -22,9 +22,15 @@ namespace chatterino::eventsub::lib::payload::channel_moderate::v2 {
|
||||
*/
|
||||
|
||||
struct Followers {
|
||||
static constexpr std::string_view TAG = "followers";
|
||||
|
||||
int followDurationMinutes;
|
||||
};
|
||||
|
||||
struct FollowersOff {
|
||||
static constexpr std::string_view TAG = "followersoff";
|
||||
};
|
||||
|
||||
/* slow mode set to 30s
|
||||
{"subscription":{"id":"86d99e53-2837-40cf-bc6e-c6e00698919c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQZgfnyKxXQ32hpzCWF4aCGBIGY2VsbC1j"},"created_at":"2025-02-01T12:02:16.005321321Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"slow","followers":null,"slow":{"wait_time_seconds":30},"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
@@ -34,9 +40,15 @@ struct Followers {
|
||||
*/
|
||||
|
||||
struct Slow {
|
||||
static constexpr std::string_view TAG = "slow";
|
||||
|
||||
int waitTimeSeconds;
|
||||
};
|
||||
|
||||
struct SlowOff {
|
||||
static constexpr std::string_view TAG = "slowoff";
|
||||
};
|
||||
|
||||
/* User is VIP'ed
|
||||
{
|
||||
"subscription": {
|
||||
@@ -96,6 +108,8 @@ struct Slow {
|
||||
*/
|
||||
|
||||
struct Vip {
|
||||
static constexpr std::string_view TAG = "vip";
|
||||
|
||||
String userID;
|
||||
String userLogin;
|
||||
String userName;
|
||||
@@ -106,6 +120,8 @@ struct Vip {
|
||||
*/
|
||||
|
||||
struct Unvip {
|
||||
static constexpr std::string_view TAG = "unvip";
|
||||
|
||||
String userID;
|
||||
String userLogin;
|
||||
String userName;
|
||||
@@ -116,6 +132,8 @@ struct Unvip {
|
||||
*/
|
||||
|
||||
struct Mod {
|
||||
static constexpr std::string_view TAG = "mod";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -126,6 +144,8 @@ struct Mod {
|
||||
*/
|
||||
|
||||
struct Unmod {
|
||||
static constexpr std::string_view TAG = "unmod";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -140,22 +160,34 @@ struct Unmod {
|
||||
*/
|
||||
|
||||
struct Ban {
|
||||
static constexpr std::string_view TAG = "ban";
|
||||
static constexpr std::string_view FIELD = "ban";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
// TODO: Verify that we handle null here
|
||||
std::string reason;
|
||||
};
|
||||
struct SharedChatBan : public Ban {
|
||||
static constexpr std::string_view TAG = "shared_chat_ban";
|
||||
};
|
||||
|
||||
/* user is unbanned
|
||||
{"subscription":{"id":"86d99e53-2837-40cf-bc6e-c6e00698919c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQZgfnyKxXQ32hpzCWF4aCGBIGY2VsbC1j"},"created_at":"2025-02-01T12:02:16.005321321Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"unban","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":{"user_id":"70948394","user_login":"weeb123","user_name":"WEEB123"},"timeout":null,"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
|
||||
struct Unban {
|
||||
static constexpr std::string_view TAG = "unban";
|
||||
static constexpr std::string_view FIELD = "unban";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
};
|
||||
struct SharedChatUnban : public Ban {
|
||||
static constexpr std::string_view TAG = "shared_chat_unban";
|
||||
};
|
||||
|
||||
/* user is timed out without reason
|
||||
{"subscription":{"id":"86d99e53-2837-40cf-bc6e-c6e00698919c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQZgfnyKxXQ32hpzCWF4aCGBIGY2VsbC1j"},"created_at":"2025-02-01T12:02:16.005321321Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"timeout","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":{"user_id":"70948394","user_login":"weeb123","user_name":"WEEB123","reason":"","expires_at":"2025-02-01T12:11:02.684499409Z"},"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
@@ -166,6 +198,9 @@ struct Unban {
|
||||
*/
|
||||
|
||||
struct Timeout {
|
||||
static constexpr std::string_view TAG = "timeout";
|
||||
static constexpr std::string_view FIELD = "timeout";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -174,22 +209,33 @@ struct Timeout {
|
||||
// TODO: This should be a timestamp?
|
||||
std::string expiresAt;
|
||||
};
|
||||
struct SharedChatTimeout : public Ban {
|
||||
static constexpr std::string_view TAG = "shared_chat_timeout";
|
||||
};
|
||||
|
||||
/* user is untimeouted
|
||||
{"subscription":{"id":"86d99e53-2837-40cf-bc6e-c6e00698919c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQZgfnyKxXQ32hpzCWF4aCGBIGY2VsbC1j"},"created_at":"2025-02-01T12:02:16.005321321Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"untimeout","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":{"user_id":"70948394","user_login":"weeb123","user_name":"WEEB123"},"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
|
||||
struct Untimeout {
|
||||
static constexpr std::string_view TAG = "untimeout";
|
||||
static constexpr std::string_view FIELD = "untimeout";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
};
|
||||
struct SharedChatUntimeout : public Ban {
|
||||
static constexpr std::string_view TAG = "shared_chat_untimeout";
|
||||
};
|
||||
|
||||
/* channel is raided (from bajlada to pajlada)
|
||||
{"subscription":{"id":"e7b45c7a-9b4d-4101-8d7d-92e8945c26fa","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"159849156","moderator_user_id":"159849156"},"transport":{"method":"websocket","session_id":"AgoQEPRIfB3SQTCSkJM2zznvNxIGY2VsbC1j"},"created_at":"2025-02-01T12:12:45.685831769Z","cost":0},"event":{"broadcaster_user_id":"159849156","broadcaster_user_login":"bajlada","broadcaster_user_name":"BajLada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"159849156","moderator_user_login":"bajlada","moderator_user_name":"BajLada","action":"raid","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":null,"raid":{"user_id":"11148817","user_login":"pajlada","user_name":"pajlada","viewer_count":0},"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
|
||||
struct Raid {
|
||||
static constexpr std::string_view TAG = "raid";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -202,6 +248,8 @@ struct Raid {
|
||||
*/
|
||||
|
||||
struct Unraid {
|
||||
static constexpr std::string_view TAG = "unraid";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -212,12 +260,18 @@ struct Unraid {
|
||||
*/
|
||||
|
||||
struct Delete {
|
||||
static constexpr std::string_view TAG = "delete";
|
||||
static constexpr std::string_view FIELD = "delete";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
std::string messageID;
|
||||
std::string messageBody;
|
||||
};
|
||||
struct SharedChatDelete : public Ban {
|
||||
static constexpr std::string_view TAG = "shared_chat_delete";
|
||||
};
|
||||
|
||||
/* automodded message approved
|
||||
{"subscription":{"id":"0ccc8f11-7e77-40cf-84a9-25ab934c30fb","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"117166826","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQfS3RYz3MSqOophais4HEjxIGY2VsbC1j"},"created_at":"2025-02-01T12:15:13.092673205Z","cost":0},"event":{"broadcaster_user_id":"117166826","broadcaster_user_login":"testaccount_420","broadcaster_user_name":"테스트계정420","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"117166826","moderator_user_login":"testaccount_420","moderator_user_name":"테스트계정420","action":"add_permitted_term","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":{"action":"add","list":"permitted","terms":["cock cock cock penis sex cock"],"from_automod":true},"unban_request":null,"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
@@ -230,6 +284,8 @@ struct Delete {
|
||||
*/
|
||||
|
||||
struct AutomodTerms {
|
||||
static constexpr std::string_view FIELD = "automod_terms";
|
||||
|
||||
// either add or remove
|
||||
std::string action;
|
||||
// either blocked or permitted
|
||||
@@ -239,6 +295,19 @@ struct AutomodTerms {
|
||||
bool fromAutomod;
|
||||
};
|
||||
|
||||
struct AddBlockedTerm : public AutomodTerms {
|
||||
static constexpr std::string_view TAG = "add_blocked_term";
|
||||
};
|
||||
struct AddPermittedTerm : public AutomodTerms {
|
||||
static constexpr std::string_view TAG = "add_permitted_term";
|
||||
};
|
||||
struct RemoveBlockedTerm : public AutomodTerms {
|
||||
static constexpr std::string_view TAG = "remove_blocked_term";
|
||||
};
|
||||
struct RemovePermittedTerm : public AutomodTerms {
|
||||
static constexpr std::string_view TAG = "remove_permitted_term";
|
||||
};
|
||||
|
||||
/* unban request approved
|
||||
{"subscription":{"id":"4284c08c-402a-43a8-8537-1e75f38f562c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQfS3RYz3MSqOophais4HEjxIGY2VsbC1j"},"created_at":"2025-02-01T12:15:13.083098352Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"approve_unban_request","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":{"is_approved":true,"user_id":"159849156","user_login":"bajlada","user_name":"BajLada","moderator_message":"you have been granted mercy"},"warn":null,"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
@@ -248,6 +317,8 @@ struct AutomodTerms {
|
||||
*/
|
||||
|
||||
struct UnbanRequest {
|
||||
static constexpr std::string_view FIELD = "unban_request";
|
||||
|
||||
bool isApproved;
|
||||
|
||||
std::string userID;
|
||||
@@ -257,6 +328,13 @@ struct UnbanRequest {
|
||||
std::string moderatorMessage;
|
||||
};
|
||||
|
||||
struct ApproveUnbanRequest : public UnbanRequest {
|
||||
static constexpr std::string_view TAG = "approve_unban_request";
|
||||
};
|
||||
struct DenyUnbanRequest : public UnbanRequest {
|
||||
static constexpr std::string_view TAG = "deny_unban_request";
|
||||
};
|
||||
|
||||
/* freetext warn from chatterino
|
||||
{"subscription":{"id":"4284c08c-402a-43a8-8537-1e75f38f562c","status":"enabled","type":"channel.moderate","version":"2","condition":{"broadcaster_user_id":"11148817","moderator_user_id":"117166826"},"transport":{"method":"websocket","session_id":"AgoQfS3RYz3MSqOophais4HEjxIGY2VsbC1j"},"created_at":"2025-02-01T12:15:13.083098352Z","cost":0},"event":{"broadcaster_user_id":"11148817","broadcaster_user_login":"pajlada","broadcaster_user_name":"pajlada","source_broadcaster_user_id":null,"source_broadcaster_user_login":null,"source_broadcaster_user_name":null,"moderator_user_id":"11148817","moderator_user_login":"pajlada","moderator_user_name":"pajlada","action":"warn","followers":null,"slow":null,"vip":null,"unvip":null,"mod":null,"unmod":null,"ban":null,"unban":null,"timeout":null,"untimeout":null,"raid":null,"unraid":null,"delete":null,"automod_terms":null,"unban_request":null,"warn":{"user_id":"159849156","user_login":"bajlada","user_name":"BajLada","reason":"this is a test warning from chatterino","chat_rules_cited":null},"shared_chat_ban":null,"shared_chat_unban":null,"shared_chat_timeout":null,"shared_chat_untimeout":null,"shared_chat_delete":null}}
|
||||
*/
|
||||
@@ -266,6 +344,8 @@ struct UnbanRequest {
|
||||
*/
|
||||
|
||||
struct Warn {
|
||||
static constexpr std::string_view TAG = "warn";
|
||||
|
||||
std::string userID;
|
||||
std::string userLogin;
|
||||
std::string userName;
|
||||
@@ -275,44 +355,29 @@ struct Warn {
|
||||
std::vector<std::string> chatRulesCited;
|
||||
};
|
||||
|
||||
enum class Action : uint8_t {
|
||||
Ban,
|
||||
Timeout,
|
||||
Unban,
|
||||
Untimeout,
|
||||
Clear,
|
||||
Emoteonly,
|
||||
Emoteonlyoff,
|
||||
Followers,
|
||||
Followersoff,
|
||||
Uniquechat,
|
||||
Uniquechatoff,
|
||||
Slow,
|
||||
Slowoff,
|
||||
Subscribers,
|
||||
Subscribersoff,
|
||||
Unraid,
|
||||
/// json_rename=delete
|
||||
DeleteMessage,
|
||||
/// clangd currently "inherits" all future comments to all future enum constants
|
||||
/// so after using something like json_rename we need to ensure it doesn't spread
|
||||
Unvip,
|
||||
Vip,
|
||||
Raid,
|
||||
AddBlockedTerm,
|
||||
AddPermittedTerm,
|
||||
RemoveBlockedTerm,
|
||||
RemovePermittedTerm,
|
||||
Mod,
|
||||
Unmod,
|
||||
ApproveUnbanRequest,
|
||||
DenyUnbanRequest,
|
||||
Warn,
|
||||
SharedChatBan,
|
||||
SharedChatTimeout,
|
||||
SharedChatUnban,
|
||||
SharedChatUntimeout,
|
||||
SharedChatDelete,
|
||||
struct Clear {
|
||||
static constexpr std::string_view TAG = "clear";
|
||||
};
|
||||
|
||||
struct EmoteOnly {
|
||||
static constexpr std::string_view TAG = "emoteonly";
|
||||
};
|
||||
struct EmoteOnlyOff {
|
||||
static constexpr std::string_view TAG = "emoteonlyoff";
|
||||
};
|
||||
|
||||
struct Uniquechat {
|
||||
static constexpr std::string_view TAG = "uniquechat";
|
||||
};
|
||||
struct UniquechatOff {
|
||||
static constexpr std::string_view TAG = "uniquechatoff";
|
||||
};
|
||||
|
||||
struct Subscribers {
|
||||
static constexpr std::string_view TAG = "subscribers";
|
||||
};
|
||||
struct SubscribersOff {
|
||||
static constexpr std::string_view TAG = "subscribersoff";
|
||||
};
|
||||
|
||||
struct Event {
|
||||
@@ -337,31 +402,43 @@ struct Event {
|
||||
/// User Name (e.g. 테스트계정420) of the user who took the action
|
||||
String moderatorUserName;
|
||||
|
||||
// TODO: enum?
|
||||
/// The action that took place (e.g. "warn" or "ban")
|
||||
Action action;
|
||||
|
||||
std::optional<Followers> followers;
|
||||
std::optional<Slow> slow;
|
||||
std::optional<Vip> vip;
|
||||
std::optional<Unvip> unvip;
|
||||
std::optional<Unmod> unmod;
|
||||
std::optional<Ban> ban;
|
||||
std::optional<Unban> unban;
|
||||
std::optional<Timeout> timeout;
|
||||
std::optional<Untimeout> untimeout;
|
||||
std::optional<Raid> raid;
|
||||
std::optional<Unraid> unraid;
|
||||
/// json_rename=delete
|
||||
std::optional<Delete> deleteMessage;
|
||||
std::optional<AutomodTerms> automodTerms;
|
||||
std::optional<UnbanRequest> unbanRequest;
|
||||
std::optional<Warn> warn;
|
||||
std::optional<Ban> sharedChatBan;
|
||||
std::optional<Unban> sharedChatUnban;
|
||||
std::optional<Timeout> sharedChatTimeout;
|
||||
std::optional<Untimeout> sharedChatUntimeout;
|
||||
std::optional<Delete> sharedChatDelete;
|
||||
/// json_tag=action
|
||||
std::variant<Ban, //
|
||||
Timeout, //
|
||||
Unban, //
|
||||
Untimeout, //
|
||||
Clear, //
|
||||
EmoteOnly, //
|
||||
EmoteOnlyOff, //
|
||||
Followers, //
|
||||
FollowersOff, //
|
||||
Uniquechat, //
|
||||
UniquechatOff, //
|
||||
Slow, //
|
||||
SlowOff, //
|
||||
Subscribers, //
|
||||
SubscribersOff, //
|
||||
Unraid, //
|
||||
Delete, //
|
||||
Unvip, //
|
||||
Vip, //
|
||||
Raid, //
|
||||
AddBlockedTerm, //
|
||||
AddPermittedTerm, //
|
||||
RemoveBlockedTerm, //
|
||||
RemovePermittedTerm, //
|
||||
Mod, //
|
||||
Unmod, //
|
||||
ApproveUnbanRequest, //
|
||||
DenyUnbanRequest, //
|
||||
Warn, //
|
||||
SharedChatBan, //
|
||||
SharedChatTimeout, //
|
||||
SharedChatUnban, //
|
||||
SharedChatUntimeout, //
|
||||
SharedChatDelete, //
|
||||
std::string>
|
||||
action;
|
||||
};
|
||||
|
||||
struct Payload {
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
boost::json::result_for<Action, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Action>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Followers, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Followers>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<FollowersOff, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<FollowersOff>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Slow, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Slow>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SlowOff, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SlowOff>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Vip, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Vip>, const boost::json::value &jvRoot);
|
||||
|
||||
@@ -22,15 +26,31 @@ boost::json::result_for<Unmod, boost::json::value>::type tag_invoke(
|
||||
boost::json::result_for<Ban, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Ban>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SharedChatBan, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SharedChatBan>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Unban, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Unban>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SharedChatUnban, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SharedChatUnban>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Timeout, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Timeout>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SharedChatTimeout, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SharedChatTimeout>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Untimeout, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Untimeout>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SharedChatUntimeout, boost::json::value>::type
|
||||
tag_invoke(boost::json::try_value_to_tag<SharedChatUntimeout>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Raid, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Raid>, const boost::json::value &jvRoot);
|
||||
|
||||
@@ -40,17 +60,71 @@ boost::json::result_for<Unraid, boost::json::value>::type tag_invoke(
|
||||
boost::json::result_for<Delete, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Delete>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SharedChatDelete, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SharedChatDelete>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<AutomodTerms, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<AutomodTerms>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<AddBlockedTerm, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<AddBlockedTerm>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<AddPermittedTerm, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<AddPermittedTerm>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<RemoveBlockedTerm, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<RemoveBlockedTerm>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<RemovePermittedTerm, boost::json::value>::type
|
||||
tag_invoke(boost::json::try_value_to_tag<RemovePermittedTerm>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<UnbanRequest, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<UnbanRequest>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<ApproveUnbanRequest, boost::json::value>::type
|
||||
tag_invoke(boost::json::try_value_to_tag<ApproveUnbanRequest>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<DenyUnbanRequest, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<DenyUnbanRequest>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Warn, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Warn>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Clear, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Clear>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<EmoteOnly, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<EmoteOnly>, const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<EmoteOnlyOff, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<EmoteOnlyOff>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Uniquechat, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Uniquechat>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<UniquechatOff, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<UniquechatOff>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Subscribers, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Subscribers>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<SubscribersOff, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<SubscribersOff>,
|
||||
const boost::json::value &jvRoot);
|
||||
|
||||
boost::json::result_for<Event, boost::json::value>::type tag_invoke(
|
||||
boost::json::try_value_to_tag<Event>, const boost::json::value &jvRoot);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user