-
- //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 <nick> 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));