This commit is contained in:
fourtf
2018-06-06 18:57:22 +02:00
parent 62cf45a7bb
commit 6000b7626e
8 changed files with 153 additions and 101 deletions
+46 -2
View File
@@ -71,8 +71,52 @@ std::shared_ptr<Channel> TwitchServer::createChannel(const QString &channelName)
{
TwitchChannel *channel = new TwitchChannel(channelName, this->getReadConnection());
channel->sendMessageSignal.connect(
[this](auto chan, auto msg) { this->sendMessage(chan, msg); });
channel->sendMessageSignal.connect([this, channel](auto chan, auto msg, bool &sent) {
{
std::lock_guard<std::mutex> guard(this->lastMessageMutex);
std::queue<QTime> &lastMessage =
channel->hasModRights() ? this->lastMessageMod : this->lastMessagePleb;
size_t maxMessageCount = channel->hasModRights() ? 99 : 19;
QTime now = QTime::currentTime();
if (lastMessage.size() > 0 &&
lastMessage.back().addMSecs(channel->hasModRights() ? 100 : 1100) > now) {
if (lastErrorTimeSpeed.addSecs(30) < now) {
auto errorMessage =
messages::Message::createSystemMessage("sending messages too fast");
channel->addMessage(errorMessage);
lastErrorTimeSpeed = now;
}
return;
}
while (lastMessage.size() > 0 && lastMessage.front().addSecs(32) < now) {
lastMessage.pop();
}
if (lastMessage.size() >= maxMessageCount) {
if (lastErrorTimeAmount.addSecs(30) < now) {
auto errorMessage =
messages::Message::createSystemMessage("sending too many messages");
channel->addMessage(errorMessage);
lastErrorTimeAmount = now;
}
return;
}
lastMessage.push(now);
}
this->sendMessage(chan, msg);
sent = true;
});
return std::shared_ptr<Channel>(channel);
}