diff --git a/src/adminircpanel.cpp b/src/adminircpanel.cpp index 5c788fd..2bf61bb 100644 --- a/src/adminircpanel.cpp +++ b/src/adminircpanel.cpp @@ -65,7 +65,7 @@ bool AdminIRCPanel::parse(const QString& networkName, const QString &input, QStr { // https://modern.ircdocs.horse/formatting.html#bold answer = QStringList() << QString(QString("Add channel to my list or remove one: ")+0x02+ QString("!channel CHANNEL_NAME")) << QString(QString("After deleting or adding channels, reload connections: ")+0x02+ QString("!reload channels")) << - QString(QString("Captcha gate in channels where I have the privilege to do +v: ")+0x02+QString("!voiceGate set ")) << + QString(QString("Captcha gate in this network: ")+0x02+QString("!voiceGate set ")) << QString(QString("Global voice gate option: ")+0x02+ QString("!voiceGate set case sensitive ")) << QString(QString("Global voice gate option: ")+0x02+ QString("!voiceGate set only numbers ")) << QString(QString("Global voice gate option: ")+0x02+ QString("!voiceGate set captcha cache size ")) << @@ -114,12 +114,13 @@ bool AdminIRCPanel::parse(const QString& networkName, const QString &input, QStr else if (input.contains(rgx_reloadChannels)) { + uint changeCounter = 0; auto configs = Config::networksAccess(); for (auto iter = configs.begin(); iter != configs.end(); ++iter) { - (*iter)->instance->reloadChannelList(); + changeCounter = (*iter)->instance->reloadChannelList(); } - answer.push_back("Success. Reloaded."); + answer.push_back("Success. Reloaded: " + QString::number(changeCounter) + " changes."); } else if (input.contains(rgx_voiceGate)) diff --git a/src/ircnetworkclient.cpp b/src/ircnetworkclient.cpp index d684dd6..5ee7725 100644 --- a/src/ircnetworkclient.cpp +++ b/src/ircnetworkclient.cpp @@ -26,6 +26,7 @@ along with this program. If not, see . #include #include +#include #include #define LOG_WARN qWarning().noquote() << "[" + m_config->networkName + "]" @@ -49,8 +50,9 @@ void IRCNetworkClient::setConfig(Config::Network *&config) m_config = config; } -void IRCNetworkClient::reloadChannelList() +uint IRCNetworkClient::reloadChannelList() { + uint changeCounter = 0; QMutexLocker lock (&m_mtxNetworkChannelsIteration); QStringList connectedChannelsTotalList; @@ -64,6 +66,7 @@ void IRCNetworkClient::reloadChannelList() if (not m_config->channels.contains(connectedChan->GetName())) { channelsToPart.push_back(connectedChan->GetName()); + changeCounter++; } connectedChannelsTotalList.push_back(connectedChan->GetName()); } @@ -85,6 +88,7 @@ void IRCNetworkClient::reloadChannelList() if (not connectedChannelsTotalList.contains(newChannel)) { channelsToJoin.push_back(newChannel); + changeCounter++; } } @@ -95,6 +99,8 @@ void IRCNetworkClient::reloadChannelList() m_network->RequestJoin(chanName); QThread::msleep(500); } + + return changeCounter; } void IRCNetworkClient::start() @@ -136,7 +142,13 @@ void IRCNetworkClient::Slot_privMsg(libircclient::Parser *p) { const QString receiver = p->GetParameterLine(); const QString sender = p->GetSourceUserInfo()->GetNick(); - const QString text = p->GetText(); + QString text = p->GetText(); + static const QRegularExpression leadingSpaces("^\\s*"); + static const QRegularExpression trailingSpaces("\\s*$"); + text.remove(leadingSpaces); + text.remove(trailingSpaces); + + if (text.isEmpty()) return; if (receiver == m_network->GetLocalUserInfo()->GetNick()) { @@ -148,27 +160,6 @@ void IRCNetworkClient::Slot_privMsg(libircclient::Parser *p) } } -void IRCNetworkClient::Slot_adminIdentified(libircclient::Parser* p) -{ - auto params = p->GetParameters(); - if (params.size() < 2) - { - LOG_WARN << "Event_WhoisRegNick failure: params.size() < 2, expected 2"; - return; - } - if (p->GetParameters().at(1) != m_config->ircabotAdmin) - { - LOG_WARN << "Event_WhoisRegNick failure: requested, but admin changed"; - return; - } - - AdminIRCPanel::identifiedTimestampUpdate(m_config->networkName); - m_network->SendNotice("You have been identified as an IRCaBot administrator.", m_config->ircabotAdmin, libircclient::Priority_RealTime); - - processAdminCommand(m_adminCommandBuffer); - m_adminCommandBuffer.clear(); -} - void IRCNetworkClient::Slot_onDirectMessage(QString sender, QString text) { if (sender == m_config->ircabotAdmin and text.startsWith("!")) @@ -252,6 +243,26 @@ void IRCNetworkClient::processVoiceRequest(const QString& sender) m_network->SendMessage(message, sender); } +void IRCNetworkClient::Slot_adminIdentified(libircclient::Parser* p) +{ + auto params = p->GetParameters(); + if (params.size() < 2) + { + LOG_WARN << "Event_WhoisRegNick failure: params.size() < 2, expected 2"; + return; + } + if (p->GetParameters().at(1) != m_config->ircabotAdmin) + { + LOG_WARN << "Event_WhoisRegNick failure: requested, but admin changed"; + return; + } + + AdminIRCPanel::identifiedTimestampUpdate(m_config->networkName); + + processAdminCommand(m_adminCommandBuffer); + m_adminCommandBuffer.clear(); +} + void IRCNetworkClient::processAdminCommand(const QString &text) { QStringList answer; diff --git a/src/ircnetworkclient.h b/src/ircnetworkclient.h index fafd849..0788432 100644 --- a/src/ircnetworkclient.h +++ b/src/ircnetworkclient.h @@ -34,7 +34,7 @@ public: IRCNetworkClient(QObject* parent = nullptr); void setConfig(Config::Network*& config); // after config change; voiceGate have effect in run-time automatically - void reloadChannelList(); + uint reloadChannelList(); void start(); void addNicknameToVoicedGroup(const QString& nickname);