Files
chatterino2/src/providers/twitch/eventsub/MessageBuilder.hpp

169 lines
6.5 KiB
C++

#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 <QDateTime>
#include <concepts>
namespace chatterino::eventsub::detail {
template <typename T, typename... Types>
concept AnyOf = (std::same_as<T, Types> || ...);
} // 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;
};
/// <BROADCASTER> has added <USER> 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);
/// <BROADCASTER> has removed <USER> 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);
/// <MODERATOR> has warned <USER>: <REASON>
void makeModerateMessage(
EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Warn &action);
/// <MODERATOR> banned <USER>[ in <CHANNEL>]: <REASON>
void makeModerateMessage(EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Ban &action);
/// <MODERATOR> unbanned <USER>[ in <CHANNEL>].
void makeModerateMessage(
EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Unban &action);
/// <MODERATOR> deleted message from <USER>[ in <CHANNEL>] saying: <MESSAGE>
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);
/// <MODERATOR> {added/removed} <TERMS...> 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);
/// <BROADCASTER> modded <MODERATOR>.
void makeModerateMessage(EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Mod &action);
/// <BROADCASTER> unmodded <MODERATOR>.
void makeModerateMessage(
EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Unmod &action);
/// <MODERATOR> initiated a raid to <CHANNEL>.
void makeModerateMessage(
EventSubMessageBuilder &builder,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Raid &action);
/// <MODERATOR> canceled the raid to <CHANNEL>.
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