From 1523bf7795cf9424859c2147e3004e175d4844fd Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Thu, 8 Jun 2017 00:07:02 +0200 Subject: Allow option to greet via notice on IRC --- src/GreetingSetting.hpp | 26 +++++++++++++++++--------- src/crsm.cpp | 37 +++++++++++++++++++------------------ src/crsm.hpp | 2 +- 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); -- cgit v1.2.3-54-g00ecf