summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-10-14 14:44:27 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2015-10-14 14:44:27 +0200
commite7485b051ef4fe01330d5f51759177027d2678b6 (patch)
treebd1883dcb4048b4571ce04efebb27c394870710d /src
parent6eff9ce662873553a4511920577e37aaff5893f0 (diff)
downloadmanager-e7485b051ef4fe01330d5f51759177027d2678b6.tar.gz
manager-e7485b051ef4fe01330d5f51759177027d2678b6.zip
Cleanup CRSM::ircMessageReceived and fix forwarding of /me-messages from
IngameChannel
Diffstat (limited to 'src')
-rw-r--r--src/crsm.cpp40
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();
}