void MyIrcSession::on_messageReceived(IrcMessage *message) { IrcPrivateMessage *m = (IrcPrivateMessage *) message; if (m->isRequest()) { QString request = m->message().split(" ", QString::SkipEmptyParts).value(0).toUpper(); if (request == "PING" || request == "TIME" || request == "VERSION") { LOG4CXX_INFO(logger, user << ": " << TO_UTF8(request) << " received and has been answered"); return; } } QString msg = m->message(); if (m->isAction()) { msg = QString("/me ") + msg; } std::string target = TO_UTF8(m->target()); LOG4CXX_INFO(logger, user << ": Message from " << target); if (target.find("#") == 0) { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); np->handleMessage(user, target + suffix, TO_UTF8(msg), nickname); } else { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); LOG4CXX_INFO(logger, nickname + suffix); np->handleMessage(user, nickname + suffix, TO_UTF8(msg)); } }
void MyIrcSession::on_messageReceived(IrcMessage *message) { IrcPrivateMessage *m = (IrcPrivateMessage *) message; if (m->isRequest()) { QString request = m->message().split(" ", QString::SkipEmptyParts).value(0).toUpper(); if (request == "PING" || request == "TIME" || request == "VERSION") { LOG4CXX_INFO(logger, user << ": " << TO_UTF8(request) << " received and has been answered"); return; } } QString msg = m->message(); if (m->isAction()) { msg = QString("/me ") + msg; } QString html = "";//msg; CommuniBackport::toPlainText(msg); // TODO: Communi produces invalid html now... // if (html == msg) { // html = ""; // } // else { // html = IrcUtil::messageToHtml(html); // } std::string target = TO_UTF8(m->target().toLower()); LOG4CXX_INFO(logger, user << ": Message from " << target); if (target.find("#") == 0) { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); np->handleMessage(user, target + suffix, TO_UTF8(msg), nickname, TO_UTF8(html)); } else { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); if (m_pms.find(nickname) != m_pms.end()) { if (hasIRCBuddy(m_pms[nickname], nickname)) { LOG4CXX_INFO(logger, nickname); np->handleMessage(user, m_pms[nickname] + suffix, TO_UTF8(msg), nickname, TO_UTF8(html), "", false, true); return; } else { nickname = nickname + suffix; } } else { nickname = nickname + suffix; } LOG4CXX_INFO(logger, nickname); np->handleMessage(user, nickname, TO_UTF8(msg), "", TO_UTF8(html)); } }
void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { QString channel; QStringList members; IrcNumericMessage *m = (IrcNumericMessage *) message; switch (m->code()) { case 332: m_topicData = TO_UTF8(m->parameters().value(2)); break; case 333: np->handleSubject(user, TO_UTF8(m->parameters().value(1)) + suffix, m_topicData, TO_UTF8(m->parameters().value(2))); break; case 353: channel = m->parameters().value(2); members = m->parameters().value(3).split(" "); for (int i = 0; i < members.size(); i++) { bool flags = 0; std::string nickname = TO_UTF8(members.at(i)); flags = correctNickname(nickname); m_modes[TO_UTF8(channel) + nickname] = flags; np->handleParticipantChanged(user, nickname, TO_UTF8(channel) + suffix,(int) flags, pbnetwork::STATUS_ONLINE); } break; case 432: if (m_connected) { np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname"); } break; default: break; } //qDebug() << "numeric message received:" << receiver() << origin << code << params; }
void MyIrcSession::on_modeChanged(IrcMessage *message) { IrcModeMessage *m = (IrcModeMessage *) message; // mode changed: "#testik" "HanzZ" "+o" "hanzz_k" std::string nickname = TO_UTF8(m->argument()); std::string mode = TO_UTF8(m->mode()); if (nickname.empty()) return; correctNickname(nickname); if (!hasIRCBuddy(TO_UTF8(m->target().toLower()), nickname)) { return; } IRCBuddy &buddy = getIRCBuddy(TO_UTF8(m->target().toLower()), nickname); if (mode == "+o") { buddy.setOp(true); } else { buddy.setOp(false); } np->handleParticipantChanged(user, nickname, TO_UTF8(m->target().toLower()) + suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, ""); LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode << " in " << TO_UTF8(m->target().toLower())); }
void MyIrcSession::on_parted(IrcMessage *message) { IrcPartMessage *m = (IrcPartMessage *) message; bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); LOG4CXX_INFO(logger, user << ": " << nickname << " parted " << TO_UTF8(m->channel()) + suffix); np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()) + suffix,(int) flags, pbnetwork::STATUS_NONE, TO_UTF8(m->reason())); }
void MyIrcSession::on_joined(IrcMessage *message) { IrcJoinMessage *m = (IrcJoinMessage *) message; bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()), (int) flags, pbnetwork::STATUS_ONLINE); LOG4CXX_INFO(logger, user << ": Joined " << TO_UTF8(m->parameters()[0])); }
void MyIrcSession::on_joined(IrcMessage *message) { IrcJoinMessage *m = (IrcJoinMessage *) message; std::string nickname = TO_UTF8(m->sender().name()); bool op = correctNickname(nickname); getIRCBuddy(TO_UTF8(m->channel().toLower()), nickname).setOp(op); np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel().toLower()) + suffix, op, pbnetwork::STATUS_ONLINE); LOG4CXX_INFO(logger, user << ": " << nickname << " joined " << TO_UTF8(m->channel().toLower()) + suffix); }
void MyIrcSession::on_messageReceived(IrcMessage *message) { IrcPrivateMessage *m = (IrcPrivateMessage *) message; std::string target = TO_UTF8(m->target()); LOG4CXX_INFO(logger, user << ": Message from " << target); if (target.find("#") == 0) { bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); np->handleMessage(user, target + suffix, TO_UTF8(m->message()), nickname); } else { bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); np->handleMessage(user, nickname, TO_UTF8(m->message())); } }
void MyIrcSession::on_topicChanged(IrcMessage *message) { IrcTopicMessage *m = (IrcTopicMessage *) message; std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); LOG4CXX_INFO(logger, user << ": " << nickname << " topic changed to " << TO_UTF8(m->topic())); np->handleSubject(user, TO_UTF8(m->channel().toLower()) + suffix, TO_UTF8(m->topic()), nickname); }
void MyIrcSession::on_quit(IrcMessage *message) { IrcQuitMessage *m = (IrcQuitMessage *) message; for(std::list<std::string>::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << (*it) + suffix); np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_NONE, TO_UTF8(m->reason())); } }
void MyIrcSession::on_nickChanged(IrcMessage *message) { IrcNickMessage *m = (IrcNickMessage *) message; std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { if (!hasIRCBuddy(it->second->getChannel(), nickname)) { continue; } IRCBuddy &buddy = getIRCBuddy(it->second->getChannel(), nickname); LOG4CXX_INFO(logger, user << ": " << nickname << " changed nickname to " << TO_UTF8(m->nick())); np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, "", TO_UTF8(m->nick())); } }
void MyIrcSession::on_quit(IrcMessage *message) { IrcQuitMessage *m = (IrcQuitMessage *) message; std::string nickname = TO_UTF8(m->sender().name()); bool op = correctNickname(nickname); for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { if (!hasIRCBuddy(it->second->getChannel(), nickname)) { continue; } removeIRCBuddy(it->second->getChannel(), nickname); LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << it->second->getChannel() + suffix); np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason())); } }
void MyIrcSession::on_noticeMessageReceived(IrcMessage *message) { IrcNoticeMessage *m = (IrcNoticeMessage *) message; LOG4CXX_INFO(logger, user << ": NOTICE " << TO_UTF8(m->message())); QString msg = m->message(); CommuniBackport::toPlainText(msg); std::string target = TO_UTF8(m->target().toLower()); if (target.find("#") == 0) { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); np->handleMessage(user, target + suffix, TO_UTF8(msg), nickname); } else { std::string nickname = TO_UTF8(m->sender().name()); correctNickname(nickname); if (nickname.find(".") != std::string::npos) { return; } if (m_pms.find(nickname) != m_pms.end()) { if (hasIRCBuddy(m_pms[nickname], nickname)) { LOG4CXX_INFO(logger, nickname); np->handleMessage(user, m_pms[nickname] + suffix, TO_UTF8(msg), nickname, "", "", false, true); return; } else { nickname = nickname + suffix; } } else { nickname = nickname + suffix; } LOG4CXX_INFO(logger, nickname); np->handleMessage(user, nickname, TO_UTF8(msg), ""); } }
void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { QString channel; QStringList members; std::string nick; IrcNumericMessage *m = (IrcNumericMessage *) message; QStringList parameters = m->parameters(); switch (m->code()) { case 301: break; case 315: LOG4CXX_INFO(logger, "End of /who request " << TO_UTF8(parameters[1])); break; case 332: m_topicData = TO_UTF8(parameters[2]); break; case 333: nick = TO_UTF8(parameters[2]); if (nick.find("!") != std::string::npos) { nick = nick.substr(0, nick.find("!")); } if (nick.find("/") != std::string::npos) { nick = nick.substr(0, nick.find("/")); } np->handleSubject(user, TO_UTF8(parameters[1].toLower()) + suffix, m_topicData, nick); break; case 352: { channel = parameters[1].toLower(); nick = TO_UTF8(parameters[5]); IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nick); if (parameters[6].toUpper().startsWith("G")) { if (!buddy.isAway()) { buddy.setAway(true); np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_AWAY); } } else if (buddy.isAway()) { buddy.setAway(false); np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE); } break; } case 353: channel = parameters[2].toLower(); members = parameters[3].split(" "); LOG4CXX_INFO(logger, user << ": Received members for " << TO_UTF8(channel) << suffix); for (int i = 0; i < members.size(); i++) { bool op = 0; std::string nickname = TO_UTF8(members.at(i)); op = correctNickname(nickname); IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nickname); buddy.setOp(op); np->handleParticipantChanged(user, nickname, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE); } break; case 366: // ask /who to get away states channel = parameters[1].toLower(); LOG4CXX_INFO(logger, user << "Asking /who for channel " << TO_UTF8(channel)); sendCommand(IrcCommand::createWho(channel)); break; case 432: np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname"); break; case 433: for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT); } if (suffix.empty()) { np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname is already in use"); } break; case 436: for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT); } np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname collision KILL"); case 464: for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_NOT_AUTHORIZED); } if (suffix.empty()) { np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Password incorrect"); } case 321: m_rooms.clear(); m_names.clear(); break; case 322: m_rooms.push_back(TO_UTF8(parameters[1])); m_names.push_back(TO_UTF8(parameters[1])); break; case 323: np->handleRoomList("", m_rooms, m_names); break; default: break; } if (m->code() >= 400 && m->code() < 500) { LOG4CXX_INFO(logger, user << ": Error message received: " << message->toData().data()); } }
void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { QString channel; QStringList members; std::string nick; IrcNumericMessage *m = (IrcNumericMessage *) message; QStringList parameters = m->parameters(); switch (m->code()) { case 301: break; case 315: LOG4CXX_INFO(logger, "End of /who request " << TO_UTF8(parameters[1])); break; case 332: m_topicData = TO_UTF8(parameters[2]); break; case 333: nick = TO_UTF8(parameters[2]); if (nick.find("!") != std::string::npos) { nick = nick.substr(0, nick.find("!")); } if (nick.find("/") != std::string::npos) { nick = nick.substr(0, nick.find("/")); } np->handleSubject(user, TO_UTF8(parameters[1]) + suffix, m_topicData, nick); break; case 352: { channel = parameters[1]; nick = TO_UTF8(parameters[5]); IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nick); if (parameters[6].toUpper().startsWith("G")) { if (!buddy.isAway()) { buddy.setAway(true); np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_AWAY); } } else if (buddy.isAway()) { buddy.setAway(false); np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE); } break; } case 353: channel = parameters[2]; members = parameters[3].split(" "); LOG4CXX_INFO(logger, user << ": Received members for " << TO_UTF8(channel) << suffix); for (int i = 0; i < members.size(); i++) { bool op = 0; std::string nickname = TO_UTF8(members.at(i)); op = correctNickname(nickname); IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nickname); buddy.setOp(op); np->handleParticipantChanged(user, nickname, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE); } break; case 366: // ask /who to get away states channel = parameters[1]; LOG4CXX_INFO(logger, user << "Asking /who for channel " << TO_UTF8(channel)); sendCommand(IrcCommand::createWho(channel)); break; case 432: np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname"); break; case 321: m_rooms.clear(); m_names.clear(); break; case 322: m_rooms.push_back(TO_UTF8(parameters[1])); m_names.push_back(TO_UTF8(parameters[1])); break; case 323: np->handleRoomList("", m_rooms, m_names); break; default: break; } //qDebug() << "numeric message received:" << receiver() << origin << code << params; }