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
+6 -4
View File
@@ -162,14 +162,16 @@ void TwitchChannel::sendMessage(const QString &message)
if (app->settings->allowDuplicateMessages) {
if (parsedMessage == this->lastSentMessage) {
parsedMessage.append(this->messageSuffix);
this->lastSentMessage = "";
}
}
this->lastSentMessage = parsedMessage;
bool messageSent = false;
this->sendMessageSignal.invoke(this->name, parsedMessage, messageSent);
this->sendMessageSignal.invoke(this->name, parsedMessage);
if (messageSent) {
qDebug() << "sent";
this->lastSentMessage = parsedMessage;
}
}
bool TwitchChannel::isMod() const
+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);
}
+6 -2
View File
@@ -6,6 +6,7 @@
#include "util/mutexvalue.hpp"
#include <memory>
#include <queue>
namespace chatterino {
namespace providers {
@@ -46,8 +47,11 @@ protected:
QString cleanChannelName(const QString &dirtyChannelName) override;
private:
// mutable std::mutex lastWhisperedPersonMutex;
// QString lastWhisperedPerson;
std::mutex lastMessageMutex;
std::queue<QTime> lastMessagePleb;
std::queue<QTime> lastMessageMod;
QTime lastErrorTimeSpeed;
QTime lastErrorTimeAmount;
};
} // namespace twitch