#pragma once #include "providers/irc/abstractircserver.hpp" #include "providers/twitch/twitchaccount.hpp" #include "providers/twitch/twitchchannel.hpp" #include "util/mutexvalue.hpp" #include #include #include namespace chatterino { namespace providers { namespace twitch { class TwitchServer final : public irc::AbstractIrcServer { public: TwitchServer(); void initialize(); // fourtf: ugh void forEachChannelAndSpecialChannels(std::function func); std::shared_ptr getChannelOrEmptyByID(const QString &channelID); util::MutexValue lastUserThatWhisperedMe; const ChannelPtr whispersChannel; const ChannelPtr mentionsChannel; IndirectChannel watchingChannel; protected: void initializeConnection(providers::irc::IrcConnection *connection, bool isRead, bool isWrite) override; std::shared_ptr createChannel(const QString &channelName) override; void privateMessageReceived(Communi::IrcPrivateMessage *message) override; void messageReceived(Communi::IrcMessage *message) override; void writeConnectionMessageReceived(Communi::IrcMessage *message) override; std::shared_ptr getCustomChannel(const QString &channelname) override; QString cleanChannelName(const QString &dirtyChannelName) override; private: std::mutex lastMessageMutex; std::queue lastMessagePleb; std::queue lastMessageMod; std::chrono::steady_clock::time_point lastErrorTimeSpeed; std::chrono::steady_clock::time_point lastErrorTimeAmount; void onMessageSendRequested(TwitchChannel *channel, const QString &message, bool &sent); }; } // namespace twitch } // namespace providers } // namespace chatterino