From cdc6091a2e02b84a48937cda287a0769ceb8726a Mon Sep 17 00:00:00 2001 From: Shane Synan Date: Thu, 13 Sep 2018 02:00:17 -0500 Subject: [PATCH] core: AutoWhoX, only search nickname by nickname When running automatic WhoX, explicitly specify "n" to search by nickname only. Don't rely on server defaults. This fixes an issue with Quassel's autoWHO causing noise in the Status Buffer uncovered by InspIRCd 3.0's implementation of WhoX that follows the spec. Fix up incorrect attempt to escape "%" as "%%". Apparently, QString::arg() doesn't need to escape this. Before: WHO %%chtsunfra, After: WHO n%chtsunfra, See https://github.com/quakenet/snircd/blob/master/doc/readme.who And https://doc.qt.io/qt-5/qstring.html#arg Thanks to @genius3000 for reporting and tracking down this issue! Fixes #1487 --- src/core/corenetwork.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 06c769c8..fcafde47 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -1375,11 +1375,23 @@ void CoreNetwork::sendAutoWho() } if (supports("WHOX")) { // Use WHO extended to poll away users and/or user accounts + // Explicitly only match on nickname ("n"), don't rely on server defaults + // + // WHO n%chtsunfra, + // // See http://faerion.sourceforge.net/doc/irc/whox.var - // And https://github.com/hexchat/hexchat/blob/c874a9525c9b66f1d5ddcf6c4107d046eba7e2c5/src/common/proto-irc.c#L750 - putRawLine(serverEncode(QString("WHO %1 %%chtsunfra,%2") - .arg(serverEncode(chanOrNick), QString::number(IrcCap::ACCOUNT_NOTIFY_WHOX_NUM)))); + // And https://github.com/quakenet/snircd/blob/master/doc/readme.who + // And https://github.com/hexchat/hexchat/blob/57478b65758e6b697b1d82ce21075e74aa475efc/src/common/proto-irc.c#L752 + putRawLine(serverEncode(QString("WHO %1 n%chtsunfra,%2") + .arg(serverEncode(chanOrNick), + QString::number(IrcCap::ACCOUNT_NOTIFY_WHOX_NUM)))); } else { + // Fall back to normal WHO + // + // Note: According to RFC 1459, "WHO " can fall back to searching realname, + // hostmask, etc. There's nothing we can do about that :( + // + // See https://tools.ietf.org/html/rfc1459#section-4.5.1 putRawLine(serverEncode(QString("WHO %1").arg(chanOrNick))); } break; -- 2.20.1