X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fuserinputhandler.cpp;h=5b5eb53a3cf366c802ee173db1e184cfe3dca257;hp=679eb9875a64caf470ee3e647e484f104dbadb05;hb=1d3902f7006b2585479561d99e794285471a0329;hpb=ef450b6502abfcad52fec7581a3d807a5386512f diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index 679eb987..5b5eb53a 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -24,6 +24,7 @@ #include "networkconnection.h" #include "network.h" #include "ctcphandler.h" +#include "ircuser.h" #include @@ -58,13 +59,41 @@ void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &m } void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) { - if(bufferInfo.type() != BufferInfo::ChannelBuffer) + QString banChannel; + QString banUser; + + QStringList params = msg.split(" "); + + if(!params.isEmpty() && isChannelName(params[0])) { + banChannel = params.takeFirst(); + } else if(bufferInfo.type() == BufferInfo::ChannelBuffer) { + banChannel = bufferInfo.bufferName(); + } else { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: channel unknown in command: /BAN %1").arg(msg)); return; - - //TODO: find suitable default hostmask if msg gives only nickname - // Example: MODE &oulu +b *!*@* - QByteArray banMsg = serverEncode(bufferInfo.bufferName()) + " +b " + channelEncode(bufferInfo.bufferName(), msg); - emit putCmd("MODE", banMsg); + } + + if(!params.isEmpty() && !params.contains("!") && network()->ircUser(params[0])) { + IrcUser *ircuser = network()->ircUser(params[0]); + // generalizedHost changes to *!ident@*.sld.tld. + QString generalizedHost = ircuser->host(); + if(generalizedHost.isEmpty()) { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: host unknown in command: /BAN %1").arg(msg)); + return; + } + + if(generalizedHost.lastIndexOf(".") != -1 && generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1) != -1) { + int secondLastPeriodPosition = generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1); + generalizedHost.replace(0, secondLastPeriodPosition, "*"); + } + banUser = QString("*!%1@%2").arg(ircuser->user()).arg(generalizedHost); + } else { + banUser = params.join(" "); + } + + QString banMsg = QString("MODE %1 +b %2").arg(banChannel).arg(banUser); + qDebug() << banMsg; + emit putRawLine(serverEncode(banMsg)); } void UserInputHandler::handleCtcp(const BufferInfo &bufferInfo, const QString &msg) {