#pragma once #include #include "channel.hpp" #include "common.hpp" #include "singletons/emotemanager.hpp" #include "singletons/ircmanager.hpp" #include "util/concurrentmap.hpp" namespace chatterino { namespace providers { namespace twitch { class TwitchServer; class TwitchChannel final : public Channel { QTimer *liveStatusTimer; public: ~TwitchChannel(); void reloadChannelEmotes(); bool isEmpty() const override; bool canSendMessage() const override; void sendMessage(const QString &message) override; bool isMod() const override; void setMod(bool value); bool isBroadcaster(); bool hasModRights(); const std::shared_ptr bttvChannelEmotes; const std::shared_ptr ffzChannelEmotes; const QString subscriptionURL; const QString channelURL; const QString popoutPlayerURL; void setRoomID(const QString &_roomID); boost::signals2::signal roomIDchanged; boost::signals2::signal onlineStatusChanged; pajlada::Signals::NoArgBoltSignal fetchMessages; boost::signals2::signal userStateChanged; QString roomID; bool isLive; QString streamViewerCount; QString streamStatus; QString streamGame; QString streamUptime; private: explicit TwitchChannel(const QString &channelName, Communi::IrcConnection *readConnection); void setLive(bool newLiveStatus); void refreshLiveStatus(); void fetchRecentMessages(); boost::signals2::connection connectedConnection; bool mod; QByteArray messageSuffix; QString lastSentMessage; Communi::IrcConnection *readConnecetion; friend class TwitchServer; }; } // namespace twitch } // namespace providers } // namespace chatterino