WHOWAS-Message:
Replies 314 and 369 are responses to a WHOWAS message.
- ??? BitlBee program, simulating IRC server with one channel, 374-378
*/
void IrcServerHandler::handle301(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix)
IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- ircuser->setAwayMessage(serverDecode(params.last()));
- ircuser->setAway(true);
+ if(ircuser) {
+ ircuser->setAwayMessage(serverDecode(params.last()));
+ ircuser->setAway(true);
+ }
emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
}
void IrcServerHandler::handle311(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix)
IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- ircuser->setUser(serverDecode(params[1]));
- ircuser->setHost(serverDecode(params[2]));
- ircuser->setRealName(serverDecode(params.last()));
- emit displayMsg(Message::Server, "", tr("[Whois] %1 %2 %3 (%4)")
- .arg(ircuser->nick(), ircuser->user(), ircuser->host(), ircuser->realName()));
+ if(ircuser) {
+ ircuser->setUser(serverDecode(params[1]));
+ ircuser->setHost(serverDecode(params[2]));
+ ircuser->setRealName(serverDecode(params.last()));
+ }
+ emit displayMsg(Message::Server, "", tr("[Whois] %1")
+ .arg(serverDecode(params).join(" ")));
}
/* RPL_WHOISSERVER - "<nick> <server> :<server info>" */
void IrcServerHandler::handle312(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix)
IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- ircuser->setServer(serverDecode(params[1]));
+ if(ircuser) {
+ ircuser->setServer(serverDecode(params[1]));
+ }
if(_whowas) {
emit displayMsg(Message::Server, "", tr("[Whowas] %1").arg(serverDecode(params).join(" ")));
} else {
void IrcServerHandler::handle313(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix)
IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- ircuser->setIrcOperator(params.last());
+ if(ircuser) {
+ ircuser->setIrcOperator(params.last());
+ }
emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
}
void IrcServerHandler::handle317(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix)
IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- QDateTime now = QDateTime::currentDateTime();
- int idleSecs = serverDecode(params[1]).toInt();
- idleSecs *= -1;
- ircuser->setIdleTime(now.addSecs(idleSecs));
- emit displayMsg(Message::Server, "", tr("[Whois] %1 %2").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now)));
+ if(ircuser) {
+ QDateTime now = QDateTime::currentDateTime();
+ int idleSecs = serverDecode(params[1]).toInt();
+ idleSecs *= -1;
+ ircuser->setIdleTime(now.addSecs(idleSecs));
+ emit displayMsg(Message::Server, "", tr("[Whois] %1 %2").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now)));
+ } else {
+ emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
+ }
}
/* RPL_ENDOFWHOIS - "<nick> :End of WHOIS list" */
emit putCmd("MODE", banMsg);
}
+void UserInputHandler::handleCtcp(QString bufname, QString msg) {
+ QStringList params = msg.split(" ", QString::SkipEmptyParts);
+ if (params.size() != 2) {
+ // qDebug() << "Ctcp-Request-Error: not exactly two parameters ->" << msg;
+ return;
+ }
+ params[1] = params[1].toUpper();
+ QString verboseMessage = tr("sending CTCP-%1-request").arg(params[1]);
+ if(params[1] == "PING") {
+ uint now = QDateTime::currentDateTime().toTime_t();
+ params.append(QString::number(now));
+ } else {
+ params.append("");
+ }
+ server->ctcpHandler()->query(params[0], params[1], params[2]);
+ emit displayMsg(Message::Action, "", verboseMessage, network()->myNick());
+}
+
void UserInputHandler::handleDeop(QString bufname, QString msg) {
QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'o';
QAction *whoisAction = nickContextMenu.addAction(tr("WHOIS"));
QAction *versionAction = nickContextMenu.addAction(tr("VERSION"));
- versionAction->setEnabled(false);
QAction *pingAction = nickContextMenu.addAction(tr("PING"));
- pingAction->setEnabled(false);
nickContextMenu.addSeparator();
QAction *result = nickContextMenu.exec(QCursor::pos());
- if(result == whoisAction) { Client::instance()->userInput(bufferInfo, "/WHOIS " + username + " " + username); }
- else if(result == versionAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " VERSION"); }
- else if(result == pingAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " PING"); }
+ if(result == whoisAction) { Client::instance()->userInput(bufferInfo, QString("/WHOIS %1 %1").arg(username)); }
+ else if(result == versionAction) { Client::instance()->userInput(bufferInfo, QString("/CTCP %1 VERSION").arg(username)); }
+ else if(result == pingAction) { Client::instance()->userInput(bufferInfo, QString("/CTCP %1 PING ").arg(username)); }
else if(result == opAction) { Client::instance()->userInput(bufferInfo, "/OP " + username); }
else if(result == deOpAction) { Client::instance()->userInput(bufferInfo, "/DEOP " + username); }