diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-10-14 14:44:27 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-10-14 14:44:27 +0200 |
| commit | e7485b051ef4fe01330d5f51759177027d2678b6 (patch) | |
| tree | bd1883dcb4048b4571ce04efebb27c394870710d | |
| parent | 6eff9ce662873553a4511920577e37aaff5893f0 (diff) | |
| download | manager-e7485b051ef4fe01330d5f51759177027d2678b6.tar.gz manager-e7485b051ef4fe01330d5f51759177027d2678b6.zip | |
Cleanup CRSM::ircMessageReceived and fix forwarding of /me-messages from
IngameChannel
| -rw-r--r-- | src/crsm.cpp | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index 08edc4a..da8c70c 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -418,7 +418,7 @@ void CRSM::scenarioFinished() } } -void CRSM::ircMessageReceived(IrcMessage *message) +void CRSM::ircMessageReceived(IrcMessage *message) // TODO: cleanup and fix ACTION messages { if(message->isOwn()) return; @@ -449,15 +449,23 @@ void CRSM::ircMessageReceived(IrcMessage *message) } else if(message->type() == IrcMessage::Private) { - QString target = message->parameters().at(0); - if(message->parameters().at(0) == connection->nickName()) + IrcPrivateMessage* privMessage = (IrcPrivateMessage*)message; + QString target = privMessage->target(); + if(target == connection->nickName()) target = message->nick(); - QString mess = message->parameters().at(1).trimmed(); + QString mess = privMessage->content(); if(target == Config.IRC.IngameChannel && Session.IRC.UseIngameChat) { - writeToServer("[IRC]<" + message->nick() + "> " + mess + "\n"); + if(privMessage->isAction()) + { + writeToServer("/me [IRC] " + message->nick() + " " + mess + "\n"); + } + else + { + writeToServer("[IRC]<" + message->nick() + "> " + mess + "\n"); + } } - else if(mess.length() > Config.CRSM.CommandSign.length() && mess.left(Config.CRSM.CommandSign.length()) == Config.CRSM.CommandSign) + else if(!privMessage->isAction() && (mess.length() > Config.CRSM.CommandSign.length() && mess.left(Config.CRSM.CommandSign.length()) == Config.CRSM.CommandSign)) { QString command = mess.mid(Config.CRSM.CommandSign.length()).trimmed(); const ClientInfo& client = ClientInfo::ircClient(message->nick(), target); @@ -466,7 +474,7 @@ void CRSM::ircMessageReceived(IrcMessage *message) respond(client, "Unbekannter Befehl: \"" + command + "\"!"); } } - else if(message->nick() == target && ircMods.contains(target)) + else if(privMessage->isPrivate() && ircMods.contains(target)) { if(aliasWishEditor == target) { @@ -475,7 +483,7 @@ void CRSM::ircMessageReceived(IrcMessage *message) else if(ircModIOList.contains(message->nick())) { QString writeMessage; - if(mess.at(0) == '\\') + if(mess.at(0) == '\\' || mess.at(0) == '/') { mess[0] = '/'; } @@ -491,7 +499,7 @@ void CRSM::ircMessageReceived(IrcMessage *message) if(ircModWatchList.length() > 0) { QString watchMsg = "<"; - if(target != message->nick()) + if(!privMessage->isPrivate()) { watchMsg += target + ":"; } @@ -505,7 +513,8 @@ void CRSM::ircMessageReceived(IrcMessage *message) } else if(message->type() == IrcMessage::Join) { - QString joinChannel = message->parameters().at(0); + IrcJoinMessage* joinMessage = (IrcJoinMessage*) message; + QString joinChannel = joinMessage->channel(); connection->sendCommand(IrcCommand::createMessage(joinChannel, "Hallo " + message->nick() + "!")); if(joinChannel == Config.IRC.IngameChannel) { @@ -531,14 +540,16 @@ void CRSM::ircMessageReceived(IrcMessage *message) } else if(message->type() == IrcMessage::Kick) { - if(message->parameters().at(1) == connection->nickName()) + IrcKickMessage* kickMessage = (IrcKickMessage*)message; + if(kickMessage->user() == connection->nickName()) { - connection->sendCommand(IrcCommand::createJoin(message->parameters().at(0))); + connection->sendCommand(IrcCommand::createJoin(kickMessage->channel())); } } else if(message->type() == IrcMessage::Part) { - QString leaveChannel = message->parameters().at(0); + IrcPartMessage* partMessage = (IrcPartMessage*)message; + QString leaveChannel = partMessage->channel(); if(leaveChannel == Config.IRC.IngameChannel) { writeToServer("[IRC] " + message->nick() + " hat den Channel verlassen." + "\n"); @@ -546,8 +557,9 @@ void CRSM::ircMessageReceived(IrcMessage *message) } else if(message->type() == IrcMessage::Mode) { + IrcModeMessage* modeMessage = (IrcModeMessage*)message; QRegExp modeExp("^\\+[a-zA-Z]*(a|o)"); - if(message->parameters().size() >= 3 && message->parameters().at(0) == Config.IRC.IngameChannel && modeExp.exactMatch(message->parameters().at(1)) && message->parameters().at(2) == Config.IRC.Nick) + if(message->parameters().size() >= 3 && modeMessage->target() == Config.IRC.IngameChannel && modeExp.exactMatch(modeMessage->mode()) && modeMessage->argument() == Config.IRC.Nick) { ircSetIngameChannelTopic(); } |
