Chatterino
TwitchIrcServer.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "common/Atomic.hpp"
4 #include "common/Channel.hpp"
5 #include "common/Singleton.hpp"
6 #include "pajlada/signals/signalholder.hpp"
11 
12 #include <chrono>
13 #include <memory>
14 #include <queue>
15 
16 namespace chatterino {
17 
18 class Settings;
19 class Paths;
20 class PubSub;
21 class TwitchChannel;
22 class SeventvEventAPI;
23 
24 class TwitchIrcServer final : public AbstractIrcServer, public Singleton
25 {
26 public:
28  virtual ~TwitchIrcServer() override = default;
29 
30  virtual void initialize(Settings &settings, Paths &paths) override;
31 
32  void forEachChannelAndSpecialChannels(std::function<void(ChannelPtr)> func);
33 
34  std::shared_ptr<Channel> getChannelOrEmptyByID(const QString &channelID);
35 
36  void bulkRefreshLiveStatus();
37 
40  void reloadFFZGlobalEmotes();
44 
46  void forEachSeventvEmoteSet(const QString &emoteSetId,
47  std::function<void(TwitchChannel &)> func);
49  void forEachSeventvUser(const QString &userId,
50  std::function<void(TwitchChannel &)> func);
58  void dropSeventvChannel(const QString &userID, const QString &emoteSetID);
59 
61 
66 
68  std::unique_ptr<SeventvEventAPI> seventvEventAPI;
69 
70  const BttvEmotes &getBttvEmotes() const;
71  const FfzEmotes &getFfzEmotes() const;
72  const SeventvEmotes &getSeventvEmotes() const;
73 
74 protected:
75  virtual void initializeConnection(IrcConnection *connection,
76  ConnectionType type) override;
77  virtual std::shared_ptr<Channel> createChannel(
78  const QString &channelName) override;
79 
80  virtual void privateMessageReceived(
81  Communi::IrcPrivateMessage *message) override;
82  virtual void readConnectionMessageReceived(
83  Communi::IrcMessage *message) override;
84  virtual void writeConnectionMessageReceived(
85  Communi::IrcMessage *message) override;
86 
87  virtual std::shared_ptr<Channel> getCustomChannel(
88  const QString &channelname) override;
89 
90  virtual QString cleanChannelName(const QString &dirtyChannelName) override;
91  virtual bool hasSeparateWriteConnection() const override;
92 
93 private:
94  void onMessageSendRequested(TwitchChannel *channel, const QString &message,
95  bool &sent);
96  void onReplySendRequested(TwitchChannel *channel, const QString &message,
97  const QString &replyId, bool &sent);
98 
99  bool prepareToSend(TwitchChannel *channel);
100 
101  std::mutex lastMessageMutex_;
102  std::queue<std::chrono::steady_clock::time_point> lastMessagePleb_;
103  std::queue<std::chrono::steady_clock::time_point> lastMessageMod_;
104  std::chrono::steady_clock::time_point lastErrorTimeSpeed_;
105  std::chrono::steady_clock::time_point lastErrorTimeAmount_;
106 
107  BttvEmotes bttv;
108  FfzEmotes ffz;
109  SeventvEmotes seventv_;
110  QTimer bulkLiveStatusTimer_;
111 
112  pajlada::Signals::SignalHolder signalHolder_;
113 };
114 
115 } // namespace chatterino
Definition: BttvEmotes.hpp:15
TwitchIrcServer()
Definition: TwitchIrcServer.cpp:38
PubSub * pubsub
Definition: TwitchIrcServer.hpp:67
void forEachSeventvEmoteSet(const QString &emoteSetId, std::function< void(TwitchChannel &)> func)
Definition: TwitchIrcServer.cpp:535
Definition: TwitchChannel.hpp:60
Definition: AbstractIrcServer.hpp:18
ConnectionType
Definition: AbstractIrcServer.hpp:21
IndirectChannel watchingChannel
Definition: TwitchIrcServer.hpp:65
void reloadAllBTTVChannelEmotes()
Definition: TwitchIrcServer.cpp:495
Atomic< QString > lastUserThatWhisperedMe
Definition: TwitchIrcServer.hpp:60
void reloadSevenTVGlobalEmotes()
Definition: TwitchIrcServer.cpp:520
const BttvEmotes & getBttvEmotes() const
Definition: TwitchIrcServer.cpp:477
void bulkRefreshLiveStatus()
Definition: TwitchIrcServer.cpp:326
Definition: Singleton.hpp:10
std::unique_ptr< SeventvEventAPI > seventvEventAPI
Definition: TwitchIrcServer.hpp:68
virtual std::shared_ptr< Channel > getCustomChannel(const QString &channelname) override
Definition: TwitchIrcServer.cpp:248
void forEachChannelAndSpecialChannels(std::function< void(ChannelPtr)> func)
Definition: TwitchIrcServer.cpp:291
void dropSeventvChannel(const QString &userID, const QString &emoteSetID)
Definition: TwitchIrcServer.cpp:558
const SeventvEmotes & getSeventvEmotes() const
Definition: TwitchIrcServer.cpp:485
virtual void readConnectionMessageReceived(Communi::IrcMessage *message) override
Definition: TwitchIrcServer.cpp:154
void reloadAllFFZChannelEmotes()
Definition: TwitchIrcServer.cpp:510
const ChannelPtr whispersChannel
Definition: TwitchIrcServer.hpp:62
Definition: Application.cpp:48
virtual void writeConnectionMessageReceived(Communi::IrcMessage *message) override
Definition: TwitchIrcServer.cpp:221
Definition: SeventvEmotes.hpp:57
virtual QString cleanChannelName(const QString &dirtyChannelName) override
Definition: TwitchIrcServer.cpp:379
void reloadAllSevenTVChannelEmotes()
Definition: TwitchIrcServer.cpp:525
Definition: PubSubManager.hpp:27
virtual void initialize(Settings &settings, Paths &paths) override
Definition: TwitchIrcServer.cpp:60
Definition: FfzEmotes.hpp:15
virtual bool hasSeparateWriteConnection() const override
Definition: TwitchIrcServer.cpp:387
const FfzEmotes & getFfzEmotes() const
Definition: TwitchIrcServer.cpp:481
void reloadFFZGlobalEmotes()
Definition: TwitchIrcServer.cpp:505
Settings which are availlable for reading and writing on the gui thread.
Definition: Settings.hpp:78
Definition: Paths.hpp:8
Definition: IrcConnection2.hpp:12
void reloadBTTVGlobalEmotes()
Definition: TwitchIrcServer.cpp:490
virtual ~TwitchIrcServer() override=default
const ChannelPtr mentionsChannel
Definition: TwitchIrcServer.hpp:63
Definition: TwitchIrcServer.hpp:24
virtual void initializeConnection(IrcConnection *connection, ConnectionType type) override
Definition: TwitchIrcServer.cpp:80
const ChannelPtr liveChannel
Definition: TwitchIrcServer.hpp:64
Definition: Channel.hpp:127
std::shared_ptr< Channel > ChannelPtr
Definition: Channel.hpp:125
void forEachSeventvUser(const QString &userId, std::function< void(TwitchChannel &)> func)
Definition: TwitchIrcServer.cpp:546
std::shared_ptr< Channel > getChannelOrEmptyByID(const QString &channelID)
Definition: TwitchIrcServer.cpp:301
virtual std::shared_ptr< Channel > createChannel(const QString &channelName) override
Definition: TwitchIrcServer.cpp:128
virtual void privateMessageReceived(Communi::IrcPrivateMessage *message) override
Definition: TwitchIrcServer.cpp:148