#pragma once #include "messages/messagebuilder.hpp" #include "messages/messageparseargs.hpp" #include "singletons/emotemanager.hpp" #include #include #include namespace chatterino { class Channel; namespace twitch { class TwitchChannel; class TwitchMessageBuilder : public messages::MessageBuilder { public: enum UsernameDisplayMode : int { Username = 1, // Username LocalizedName = 2, // Localized name UsernameAndLocalizedName = 3, // Username (Localized name) }; TwitchMessageBuilder() = delete; explicit TwitchMessageBuilder(Channel *_channel, const Communi::IrcPrivateMessage *_ircMessage, const messages::MessageParseArgs &_args); Channel *channel; TwitchChannel *twitchChannel; const Communi::IrcPrivateMessage *ircMessage; messages::MessageParseArgs args; const QVariantMap tags; QString messageID; QString userName; messages::MessagePtr parse(); // static bool sortTwitchEmotes( // const std::pair &a, // const std::pair &b); private: QString roomID; QColor usernameColor; void parseMessageID(); void parseRoomID(); void parseChannelName(); void parseUsername(); void appendUsername(); void parseHighlights(); void appendTwitchEmote(const Communi::IrcPrivateMessage *ircMessage, const QString &emote, std::vector> &vec); bool tryAppendEmote(QString &emoteString); bool appendEmote(const util::EmoteData &emoteData); void parseTwitchBadges(); void addChatterinoBadges(); }; } // namespace twitch } // namespace chatterino