timeout between trigger messages answering (1.1 secs by default)

master
const an teen 2021-12-24 15:17:02 -05:00
parent 2d6a6e4fd1
commit 100483a9a4
3 changed files with 18 additions and 1 deletions

View File

@ -147,6 +147,10 @@ body {
.main_header__search_checkbox {
color: #6493bc;
display: flex;
flex-flow: row nowrap;
align-items: center;
justify-content: flex-start;
}
.main_middle {

View File

@ -11,6 +11,8 @@
const int NICK_RECOVER_TIMER = 60000; // 1 minute
const int THREAD_SLEEP_ON_RECONNECT = 3; // seconds
const int USER_LIST_ACTIALIZE = 1800000; // 30 minutes
const int WRITING_STOP_TIMER = 1100; // 1.1 second
const int PING_TIMEOUT = 361000; // 361 seconds
IrcClient::IrcClient(const ConnectionData& config, QObject *parent) :
QObject(parent),
@ -18,6 +20,7 @@ IrcClient::IrcClient(const ConnectionData& config, QObject *parent) :
m_connectionData(config),
m_reconnectReport(false),
m_connected(false),
m_triggersIsStopped(false),
m_shouldAppendMessage(false)
{
if (m_connectionData.address.isEmpty()) {
@ -41,6 +44,8 @@ IrcClient::IrcClient(const ConnectionData& config, QObject *parent) :
connect (&m_usersActualize, &QTimer::timeout, this, &IrcClient::actualizeUsersList);
connect (&m_nickRecover, &QTimer::timeout, this, &IrcClient::nickRecover);
connect (&m_timerToJoin, &QTimer::timeout, this, &IrcClient::onLogin);
connect (&m_stopWriting, &QTimer::timeout, this, [&](){m_triggersIsStopped = false;});
m_stopWriting.setSingleShot(true);
}
IrcClient::~IrcClient()
@ -167,6 +172,12 @@ QString IrcClient::getNickname(const QString &message)
void IrcClient::toTrigger(const QString& channel, const QString &nickname, const QString &message)
{
if (m_connectionData.triggers.isEmpty()) return;
if (m_triggersIsStopped) {
consoleLog("IrcClient::toTrigger() Trigger request is ignored (anti DDoS)");
return;
}
m_triggersIsStopped = true;
m_stopWriting.start(WRITING_STOP_TIMER);
for (auto trigger: m_connectionData.triggers) {
if (message.contains(m_connectionData.triggers.key(trigger), Qt::CaseInsensitive)) {
@ -270,7 +281,7 @@ void IrcClient::onRead()
m_connected = true;
emit myOnline(m_connectionData.displayName, m_connected);
}
m_pingTimeout.start(361000); // 361 secs
m_pingTimeout.start(PING_TIMEOUT); // 361 secs
return;
}

View File

@ -44,6 +44,7 @@ private:
QTimer m_nickRecover;
QTimer m_usersActualize; // to get all users status (op, owner, etc)
QTimer m_pingTimeout;
QTimer m_stopWriting; // for output messages flow control (one in second as maximum)
const QRegularExpression m_rgxPrivmsg {"^[^\\s]*\\sPRIVMSG"};
const QRegularExpression m_rgxJoin {"^[^\\s]*\\sJOIN"};
@ -56,6 +57,7 @@ private:
bool m_reconnectReport;
bool m_connected;
bool m_triggersIsStopped;
std::map<QString, QStringList> m_online; // channel, nicks
QStringList m_readNamesList; // channel in reading