summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/GreetingSetting.hpp26
-rw-r--r--src/crsm.cpp37
-rw-r--r--src/crsm.hpp2
3 files changed, 37 insertions, 28 deletions
diff --git a/src/GreetingSetting.hpp b/src/GreetingSetting.hpp
index 933d4c5..20fce0b 100644
--- a/src/GreetingSetting.hpp
+++ b/src/GreetingSetting.hpp
@@ -7,14 +7,14 @@
class GreetingSetting {
public:
+ enum Mode {Normal, Notice, Disabled, Unset} mode = Normal;
ClientInterface interface;
- bool negative = false;
QString target = "";
GreetingSetting() { }
inline bool operator==(const GreetingSetting& other)
{
- return other.interface == interface && other.negative == negative && other.target == target;
+ return other.interface == interface && other.mode == mode && other.target == target;
}
inline bool operator!=(const GreetingSetting& other)
{
@@ -23,7 +23,7 @@ public:
inline GreetingSetting& invert()
{
- negative = !negative;
+ mode = (mode == Disabled) ? Normal : Disabled;
return *this;
}
@@ -52,8 +52,8 @@ public:
void setValue(const QString& value)
{
QString val = value;
- bool negative = (value.at(0) == '!');
- if(negative)
+ GreetingSetting::Mode mode = (value.at(0) == '!') ? GreetingSetting::Disabled : (value.at(0) == '-') ? GreetingSetting::Notice : GreetingSetting::Normal;
+ if(mode != GreetingSetting::Normal)
{
val.remove(0, 1);
}
@@ -62,6 +62,7 @@ public:
if(parts.first() == "Clonk" && parts.length() == 1)
{
conf.interface = Clonk;
+ conf.mode = mode == GreetingSetting::Disabled ? GreetingSetting::Disabled : GreetingSetting::Normal;
conf.target.clear();
}
else if(parts.first() == "IRC" && parts.length() <= 2)
@@ -75,22 +76,29 @@ public:
{
conf.target.clear();
}
+ conf.mode = mode;
}
else
{
throw ConfigException("Can not parse corrupt GreetingSetting");
}
-
- conf.negative = negative;
}
QString value()
{
QString ret;
- if(conf.negative)
+ switch(conf.mode)
{
- ret = "!";
+ case GreetingSetting::Disabled:
+ ret = "!";
+ break;
+ case GreetingSetting::Notice:
+ ret = "-";
+ break;
+ case GreetingSetting::Normal: case GreetingSetting::Unset:
+ break;
}
+
QStringList parts = {(conf.interface == Clonk ? "Clonk" : "IRC")};
if(!conf.target.isEmpty())
{
diff --git a/src/crsm.cpp b/src/crsm.cpp
index e187123..be71967 100644
--- a/src/crsm.cpp
+++ b/src/crsm.cpp
@@ -569,9 +569,10 @@ void CRSM::ircMessageReceived(IrcMessage *message)
IrcJoinMessage* joinMessage = (IrcJoinMessage*)message;
QString joinChannel = joinMessage->channel();
- if(greetAllowed(ClientInfo::ircClient(joinMessage->nick(), joinMessage->channel())))
+ auto setting = greetingSetting(ClientInfo::ircClient(joinMessage->nick(), joinMessage->channel()));
+ if(setting != GreetingSetting::Disabled)
{
- sendIrcMessage("Hallo, " + message->nick() + "!", joinChannel, false, false);
+ sendIrcMessage("Hallo, " + message->nick() + "!", joinChannel, false, setting == GreetingSetting::Notice);
}
if(joinChannel == Config.IRC.IngameChannel && Session.IRC.UseIngameChat)
@@ -650,7 +651,7 @@ void CRSM::greet(QString pcName)
const ClientInfo &info = Session.Clonk.Clients.value(pcName);
- if(!greetAllowed(info))
+ if(greetingSetting(info) == GreetingSetting::Disabled)
{
return;
}
@@ -2293,52 +2294,52 @@ void CRSM::sendIrcMessage(const QString& message, const QString& target, bool ac
}
}
-bool CRSM::greetAllowed(const ClientInfo &client)
+GreetingSetting::Mode CRSM::greetingSetting(const ClientInfo &client)
{
if(client.interface == Clonk && Config.CRSM.Greeting.contains(GreetingSetting::clonk()) && !Config.CRSM.Greeting.contains(GreetingSetting::clonk().invert()))
{
- return true;
+ return GreetingSetting::Normal;
}
else if(client.interface == IRC)
{
- int nickSetting = -1;
- int chanSetting = -1;
- int ircSetting = -1;
+ GreetingSetting::Mode nickSetting = GreetingSetting::Unset;
+ GreetingSetting::Mode chanSetting = GreetingSetting::Unset;
+ GreetingSetting::Mode ircSetting = GreetingSetting::Unset;
foreach(const GreetingSetting& setting, Config.CRSM.Greeting)
{
if(setting.interface == IRC)
{
if(setting.target == client.nick)
{
- nickSetting = !setting.negative;
+ nickSetting = setting.mode;
}
else if(setting.target == client.target)
{
- chanSetting = !setting.negative;
+ chanSetting = setting.mode;
}
else if(setting.target.isEmpty())
{
- ircSetting = !setting.negative;
+ ircSetting = setting.mode;
}
}
}
- if(nickSetting != -1)
+ if(nickSetting != GreetingSetting::Unset)
{
- return nickSetting != 0;
+ return nickSetting;
}
- if(chanSetting != -1)
+ if(chanSetting != GreetingSetting::Unset)
{
- return chanSetting != 0;
+ return chanSetting;
}
- if(ircSetting != -1)
+ if(ircSetting != GreetingSetting::Unset)
{
- return ircSetting != 0;
+ return ircSetting;
}
}
- return false;
+ return GreetingSetting::Disabled;
}
void CRSM::handleIrcMessage(const ClientInfo &client, QString message, const QString &target, bool privateMessage, bool action, bool own)
diff --git a/src/crsm.hpp b/src/crsm.hpp
index c4c8482..b7633dd 100644
--- a/src/crsm.hpp
+++ b/src/crsm.hpp
@@ -284,7 +284,7 @@ private:
void removeCommandSuffixes(QString& command);
void substituteCommandAlias(QString& command);
QString clientModName(const ClientInfo& client);
- bool greetAllowed(const ClientInfo& client);
+ GreetingSetting::Mode greetingSetting(const ClientInfo& client);
void handleIrcMessage(const ClientInfo& client, QString message, const QString& target, bool privateMessage, bool action, bool own = false);
CMD_FUNCTION(help);