diff options
| -rw-r--r-- | src/crsm.cpp | 32 | ||||
| -rw-r--r-- | src/crsm.hpp | 1 |
2 files changed, 24 insertions, 9 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index 06e1cd9..8ea859c 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -413,8 +413,15 @@ void CRSM::ircMessageReceived(IrcMessage *message) { if(privMessage->content().startsWith("DCC CHAT CHAT ", Qt::CaseInsensitive)) { - const ClientInfo& client = ClientInfo::ircClient(message->nick()); - dccConnect("dcc connect", "", client, clientUserType(client)); + const QStringList& parts = privMessage->content().split(' ', QString::SkipEmptyParts); + if(parts.size() == 5) + { + dccChatRequest(ClientInfo::ircClient(message->nick())); + } + else if(parts.size() == 6 && parts.at(3) == "199" && parts.at(4) == "0") + { + dccChatRequest(ClientInfo::ircClient(message->nick()), parts.at(5)); + } } } } @@ -602,6 +609,19 @@ void CRSM::managementConnectionDisconnected() } } +void CRSM::dccChatRequest(const ClientInfo &client, QString extraArgs) +{ + if(dccNickConnections.contains(client.nick)) + { + respond(client, "Diesem Nick ist bereits eine DCC-Verbindung zugewiesen.\n"); + } + else + { + QHostInfo info = QHostInfo::fromName(Config.DCC.Address); + connection->sendCommand(IrcCommand::createCtcpRequest(client.nick, "DCC CHAT chat " + QString::number(info.addresses().first().toIPv4Address()) + " " + QString::number(Config.DCC.ListenPort) + (!extraArgs.isEmpty() ? " " + extraArgs: extraArgs))); + } +} + // modified version of http://stackoverflow.com/a/18866593 QString GetRandomString(int length = 5) { @@ -3231,13 +3251,7 @@ CMD_FUNCTION_IMPL(packsScenariosList) } CMD_FUNCTION_IMPL(dccConnect) - if(dccNickConnections.contains(client.nick)) - { - respond(client, "Diesem Nick ist bereits eine DCC-Verbindung zugewiesen.\n"); - return Success; - } - QHostInfo info = QHostInfo::fromName(Config.DCC.Address); - connection->sendCommand(IrcCommand::createCtcpRequest(client.nick, "DCC CHAT chat " + QString::number(info.addresses().first().toIPv4Address()) + " " + QString::number(Config.DCC.ListenPort))); + dccChatRequest(client); return Success; } diff --git a/src/crsm.hpp b/src/crsm.hpp index 3d482a7..6cc03ff 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -136,6 +136,7 @@ private slots: void newManagementData(); void managementConnectionDisconnected(); + void dccChatRequest(const ClientInfo &client, QString extraArgs = ""); void newDCCConnection(); void newDCCData(); void disconnectedDCCConnection(); |
