+void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &msg) {
+ Q_UNUSED(bufferInfo)
+
+ QString awayMsg = msg;
+ IrcUser *me = network()->me();
+
+ // if there is no message supplied we have to check if we are already away or not
+ if(msg.isEmpty()) {
+ if(me && !me->isAway())
+ awayMsg = network()->identityPtr()->awayReason();
+ }
+ if(me)
+ me->setAwayMessage(awayMsg);
+
+ putCmd("AWAY", serverEncode(awayMsg));
+}
+
+void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) {
+ banOrUnban(bufferInfo, msg, true);
+}
+
+void UserInputHandler::handleUnban(const BufferInfo &bufferInfo, const QString &msg) {
+ banOrUnban(bufferInfo, msg, false);
+}
+
+void UserInputHandler::banOrUnban(const BufferInfo &bufferInfo, const QString &msg, bool ban) {
+ 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;
+ }
+
+ 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;
+ }