mirror of https://notabug.org/acetone/ircabot.git
timeout between trigger messages answering (1.1 secs by default)
parent
2d6a6e4fd1
commit
100483a9a4
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue