#pragma once #include "messages/MessageBuilder.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "twitch-eventsub-ws/payloads/automod-message-hold-v2.hpp" #include "twitch-eventsub-ws/payloads/channel-moderate-v2.hpp" #include "twitch-eventsub-ws/payloads/channel-suspicious-user-message-v1.hpp" #include #include namespace chatterino::eventsub::detail { template concept AnyOf = (std::same_as || ...); } // namespace chatterino::eventsub::detail namespace chatterino::eventsub { class EventSubMessageBuilder : public MessageBuilder { public: // builds a system message and adds a timestamp element EventSubMessageBuilder(TwitchChannel *channel, const QDateTime &time); EventSubMessageBuilder(TwitchChannel *channel); ~EventSubMessageBuilder(); EventSubMessageBuilder(const EventSubMessageBuilder &) = delete; EventSubMessageBuilder(EventSubMessageBuilder &&) = delete; EventSubMessageBuilder &operator=(const EventSubMessageBuilder &) = delete; EventSubMessageBuilder &operator=(EventSubMessageBuilder &&) = delete; void appendUser(const lib::String &userName, const lib::String &userLogin, QString &text, bool trailingSpace = true); private: TwitchChannel *channel; }; /// has added as a VIP of this channel. void makeModerateMessage(EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Vip &action); /// has removed as a VIP of this channel. void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Unvip &action); /// has warned : void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Warn &action); /// banned [ in ]: void makeModerateMessage(EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Ban &action); /// unbanned [ in ]. void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Unban &action); /// deleted message from [ in ] saying: void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Delete &action); // mode changes void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Followers &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::FollowersOff &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::EmoteOnly &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::EmoteOnlyOff &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Slow &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::SlowOff &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Subscribers &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::SubscribersOff &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Uniquechat &action); void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::UniquechatOff &action); /// {added/removed} as (a) {blocked/permitted} term(s) on AutoMod. void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::AutomodTerms &action); /// modded . void makeModerateMessage(EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Mod &action); /// unmodded . void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Unmod &action); /// initiated a raid to . void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Raid &action); /// canceled the raid to . void makeModerateMessage( EventSubMessageBuilder &builder, const lib::payload::channel_moderate::v2::Event &event, const lib::payload::channel_moderate::v2::Unraid &action); MessagePtr makeAutomodHoldMessageHeader( TwitchChannel *channel, const QDateTime &time, const lib::payload::automod_message_hold::v2::Event &event); MessagePtr makeAutomodHoldMessageBody( TwitchChannel *channel, const QDateTime &time, const lib::payload::automod_message_hold::v2::Event &event); MessagePtr makeSuspiciousUserMessageHeader( TwitchChannel *channel, const QDateTime &time, const lib::payload::channel_suspicious_user_message::v1::Event &event); MessagePtr makeSuspiciousUserMessageBody( TwitchChannel *channel, const QDateTime &time, const lib::payload::channel_suspicious_user_message::v1::Event &event); } // namespace chatterino::eventsub