From 47cf880a0041c1a4cee8f25b50f05675038fea59 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Thu, 5 Nov 2015 15:17:51 +0100 Subject: Allow defining of multiple CommandSigns --- src/CRSMConfig.hpp | 4 ++-- src/crsm.cpp | 56 ++++++++++++++++++++++++++++++++++-------------------- src/crsm.hpp | 1 + 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/CRSMConfig.hpp b/src/CRSMConfig.hpp index db2c4a8..30a5c0c 100644 --- a/src/CRSMConfig.hpp +++ b/src/CRSMConfig.hpp @@ -7,7 +7,7 @@ public: struct { Port ManagementPort = 9372; String ListFolder = "ScenarioLists"; - String CommandSign = "!"; + List(String) CommandSigns = {"!"}; String StatsFile = "CrServerManager.stats"; String SessionFile = "CrServerManager.session"; String PacksFile = "CrServerManager.packs"; @@ -90,7 +90,7 @@ public: explicit CRSMConfig() : ConfigBase({ ConfigVal(CRSM.ManagementPort), ConfigVal(CRSM.ListFolder), - ConfigVal(CRSM.CommandSign), + ConfigVal(CRSM.CommandSigns), ConfigVal(CRSM.StatsFile), ConfigVal(CRSM.SessionFile), ConfigVal(CRSM.PacksFile), diff --git a/src/crsm.cpp b/src/crsm.cpp index 607fd00..03bb54b 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -154,9 +154,9 @@ void CRSM::readServerOutput() } else if(!isMeMessage) { - if(msg.length() > Config.CRSM.CommandSign.length() && msg.left(Config.CRSM.CommandSign.length()) == Config.CRSM.CommandSign) + QString command = getCommand(msg); + if(!command.isEmpty()) { - QString command = msg.mid(Config.CRSM.CommandSign.length()); if(!cmd(command, info)) { respond(info, "Unbekannter Befehl: \"" + command + "\"!\n"); @@ -407,6 +407,9 @@ void CRSM::ircMessageReceived(IrcMessage *message) { checkActivity(Session.IRC.Admin); } + + QString command; + if(target == Config.IRC.IngameChannel && Session.IRC.UseIngameChat) { if(privMessage->isAction()) @@ -418,9 +421,8 @@ void CRSM::ircMessageReceived(IrcMessage *message) writeToServer("[IRC]<" + message->nick() + "> " + mess + "\n"); } } - else if(!privMessage->isAction() && (mess.length() > Config.CRSM.CommandSign.length() && mess.left(Config.CRSM.CommandSign.length()) == Config.CRSM.CommandSign)) + else if(!privMessage->isAction() && !(command = getCommand(mess)).isEmpty()) { - QString command = mess.mid(Config.CRSM.CommandSign.length()).trimmed(); if(!cmd(command, client)) { respond(client, "Unbekannter Befehl: \"" + command + "\"!"); @@ -1040,7 +1042,7 @@ QString CRSM::addAliasWish(const QString ¶m) } else { - return "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help für mehr Informationen."; + return "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help für mehr Informationen."; } } @@ -1355,7 +1357,7 @@ void CRSM::setupCmds() addCommand("skip", &CRSM::skip, Clonk | IRC | Management, User, "Entfernt das nächste (eigene) Szenario (oder das auf [Warteschlangenposition]) aus der Wunschliste.", "[Warteschlangenposition]"); addCommand("next", &CRSM::next, Clonk | IRC | Management, Moderator, "Versucht das aktuelle Szenario zu überspringen."); - addCommand("kill", &CRSM::kill, IRC | Management, Moderator, "Tötet den Clonk-Server, vorausgesetzt es läuft einer.", "", "Tötet den Clonk-Server, vorausgesetzt es läuft einer. Bitte nur verwenden wenn " + Config.CRSM.CommandSign + "next nicht funktioniert."); + addCommand("kill", &CRSM::kill, IRC | Management, Moderator, "Tötet den Clonk-Server, vorausgesetzt es läuft einer.", "", "Tötet den Clonk-Server, vorausgesetzt es läuft einer. Bitte nur verwenden wenn " + Config.CRSM.CommandSigns.first() + "next nicht funktioniert."); addCommand("clear", &CRSM::clear, Clonk | IRC | Management, Moderator, "Löscht die Wunschliste."); addCommand("aliaswishes", &CRSM::aliaswishes, IRC | Management, Moderator, "Zum geführten Bearbeiten der Aliaswünsche."); addCommand("newalias", &CRSM::newalias, Clonk | IRC | Management, Moderator, "Trägt als Alias für ein.", " = "); @@ -1383,7 +1385,7 @@ void CRSM::setupCmds() addCommandGroup("exit", Management, UserType::Max, "Beendet den Server Mananger.", "Beendet den Server Mananger und falls ein Clonk-Server läuft auch diesen. Die Unterbefehle ermöglichen außerdem diverse Zusatzvarienten des Beendens.", &CRSM::exit); addCommand("exit detach", &CRSM::exitDetach, Management, UserType::Max, "Beendet den Server Mananger, lässt den Clonk-Server weiterlaufen.", "", "Beendet den Server Mananger und falls ein Clonk-Server läuft, läuft dieser weiter."); - addCommand("exit update", &CRSM::exitUpdate, Management, UserType::Max, "Zusätzlich zu " + Config.CRSM.CommandSign + "exit detach wird im laufenden Spiel angekündigt, dass der Server-Manager wegen eines Updates beendet wird."); + addCommand("exit update", &CRSM::exitUpdate, Management, UserType::Max, "Zusätzlich zu " + Config.CRSM.CommandSigns.first() + "exit detach wird im laufenden Spiel angekündigt, dass der Server-Manager wegen eines Updates beendet wird."); addCommand("exit after", &CRSM::exitAfter, Management, UserType::Max, "Beendet den Server-Manager, sobald das laufende Spiel vorbei ist."); addCommandGroup("config", Management, UserType::Max, "Die config-Befehlsgruppe bietet diverse Befehle zum Verwalten der Konfiguration."); @@ -1787,6 +1789,18 @@ int CRSM::findWishFromUser(const ClientInfo &client) return -1; } +QString CRSM::getCommand(const QString &message) +{ + foreach(const QString& commandSign, Config.CRSM.CommandSigns) + { + if(message.length() > commandSign.length() && message.leftRef(commandSign.length()) == commandSign) + { + return message.mid(commandSign.length()); + } + } + return QString(); +} + CMD_FUNCTION_IMPL(help) bool longHelp = (args == "long"); if(args.isEmpty() || longHelp) @@ -1799,7 +1813,7 @@ CMD_FUNCTION_IMPL(help) { if(longHelp) { - response += "\n" + Config.CRSM.CommandSign + cmd.name + QString(" ") + (!cmd.argList.isEmpty() ? cmd.argList + QString(" ") : QString("")) + (!cmd.shortDescription.isEmpty() ? QString("- ") + cmd.shortDescription : QString("")); + response += "\n" + Config.CRSM.CommandSigns.first() + cmd.name + QString(" ") + (!cmd.argList.isEmpty() ? cmd.argList + QString(" ") : QString("")) + (!cmd.shortDescription.isEmpty() ? QString("- ") + cmd.shortDescription : QString("")); } else response += cmd.name + ", "; @@ -1808,7 +1822,7 @@ CMD_FUNCTION_IMPL(help) if(!longHelp) response = response.left(response.length() - 2); respond(client, response + "\n"); - respond(client, "Genauere Informationen zu einem Befehl mit " + Config.CRSM.CommandSign + "help \n" + respond(client, "Genauere Informationen zu einem Befehl mit " + Config.CRSM.CommandSigns.first() + "help \n" "[Sachen in eckigen Klammern sind optional]\n" "\n" "Beim Einsetzen der Argumente werden <> bzw. [] weggelassen.\n"); @@ -1818,7 +1832,7 @@ CMD_FUNCTION_IMPL(help) if(cmdExists(args, client.interface)) { const CmdFunctionRef& cmd = cmds.value(args); - respond(client, Config.CRSM.CommandSign + cmd.name + " " + (!cmd.argList.isEmpty() ? cmd.argList + " " : "") + (!cmd.longDescription.isEmpty() ? "- " + cmd.longDescription : !cmd.shortDescription.isEmpty() ? "- " + cmd.shortDescription : "") + "\n"); + respond(client, Config.CRSM.CommandSigns.first() + cmd.name + " " + (!cmd.argList.isEmpty() ? cmd.argList + " " : "") + (!cmd.longDescription.isEmpty() ? "- " + cmd.longDescription : !cmd.shortDescription.isEmpty() ? "- " + cmd.shortDescription : "") + "\n"); if(cmdGroups.contains(args)) { bool first = true; @@ -1833,7 +1847,7 @@ CMD_FUNCTION_IMPL(help) if(cmdRef.userType > userType || !(cmdRef.interfaces & client.interface)) continue; if(first) { - response = "Verfügbare Unterbefehle für " + args + " (nähere Infos zu einem Befehl mit " + Config.CRSM.CommandSign + "help " + args + " ):\n "; + response = "Verfügbare Unterbefehle für " + args + " (nähere Infos zu einem Befehl mit " + Config.CRSM.CommandSigns.first() + "help " + args + " ):\n "; first = false; } else @@ -2177,7 +2191,7 @@ CMD_FUNCTION_IMPL(newalias) } else { - respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help newalias für mehr Informationen.\n"); + respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help newalias für mehr Informationen.\n"); } return Success; } @@ -2202,7 +2216,7 @@ CMD_FUNCTION_IMPL(io) CMD_FUNCTION_IMPL(passToClonkPcName) if(args == Config.Auto.Volatile.Clonk.ServerNick || args == Config.Auto.Volatile.Clonk.ServerPCName) { - respond(client, Config.CRSM.CommandSign + cmd + " kann nicht auf den Server angewendet werden!\n"); + respond(client, Config.CRSM.CommandSigns.first() + cmd + " kann nicht auf den Server angewendet werden!\n"); return Success; } ClientInfo info; @@ -2304,7 +2318,7 @@ CMD_FUNCTION_IMPL(passToClonkNumeric) int number = args.toInt(&ok); if(!ok) { - respond(client, Config.CRSM.CommandSign + cmd + " kann nur mit einer Zahl verwendet werden!\n"); + respond(client, Config.CRSM.CommandSigns.first() + cmd + " kann nur mit einer Zahl verwendet werden!\n"); return SyntaxFail; } else @@ -2329,7 +2343,7 @@ CMD_FUNCTION_IMPL(passToClonkNumericOrEmpty) CMD_FUNCTION_IMPL(passToClonkOnOff) if(args != "on" && args != "off") { - respond(client, Config.CRSM.CommandSign + cmd + " kann nur mit \"on\" oder \"off\" verwendet werden.\n"); + respond(client, Config.CRSM.CommandSigns.first() + cmd + " kann nur mit \"on\" oder \"off\" verwendet werden.\n"); return SyntaxFail; } else @@ -2559,7 +2573,7 @@ CMD_FUNCTION_IMPL(ircWatch) } else { - respond(client, Config.CRSM.CommandSign + cmd + " kann nur mit \"on\" oder \"off\" verwendet werden.\n"); + respond(client, Config.CRSM.CommandSigns.first() + cmd + " kann nur mit \"on\" oder \"off\" verwendet werden.\n"); return SyntaxFail; } return Success; @@ -2641,7 +2655,7 @@ CMD_FUNCTION_IMPL(packsVersionsAdd) const QStringList& argList = Util::splitEscaped(args, '='); if(argList.length() != 2) { - respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help für mehr Informationen.\n"); + respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help für mehr Informationen.\n"); return SyntaxFail; } else @@ -2671,7 +2685,7 @@ CMD_FUNCTION_IMPL(packsVersionsDefault) const QStringList& argList = Util::splitEscaped(args, '='); if(argList.length() != 2 && argList.length() != 1) { - respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help für mehr Informationen.\n"); + respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help für mehr Informationen.\n"); return SyntaxFail; } else if(argList.length() == 2) @@ -2710,7 +2724,7 @@ CMD_FUNCTION_IMPL(packsScenariosAdd) const QStringList& argList = Util::splitEscaped(args, ' '); if(argList.length() != 2) { - respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help für mehr Informationen.\n"); + respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help für mehr Informationen.\n"); return SyntaxFail; } else @@ -2729,7 +2743,7 @@ CMD_FUNCTION_IMPL(packsScenariosDelete) const QStringList& argList = Util::splitEscaped(args, ' '); if(argList.length() != 2) { - respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSign + "help für mehr Informationen.\n"); + respond(client, "Eingabefehler! Siehe " + Config.CRSM.CommandSigns.first() + "help für mehr Informationen.\n"); return SyntaxFail; } else @@ -2802,7 +2816,7 @@ IRC_CHECK_CALLBACK_IMPL(ircModCmd) if(!Config.Auto.Hosting.AliasWishes.isEmpty()) { respond(subject, QString::number(Config.Auto.Hosting.AliasWishes.size()) + " neue" + (Config.Auto.Hosting.AliasWishes.size() > 1 ? QString("") : QString("r")) + " Aliasw" + (Config.Auto.Hosting.AliasWishes.size() > 1 ? QString("ü") : QString("u")) + "nsch" + (Config.Auto.Hosting.AliasWishes.size() > 1 ? QString("e") : QString("")) + " " + (Config.Auto.Hosting.AliasWishes.size() > 1 ? QString("sind") : QString("ist")) + " verfügbar.", RespondType::PrivateNotice); - respond(subject, "Bitte bei nächster Gelegenheit mit " + Config.CRSM.CommandSign + "aliaswishes bearbeiten.", RespondType::PrivateNotice); + respond(subject, "Bitte bei nächster Gelegenheit mit " + Config.CRSM.CommandSigns.first() + "aliaswishes bearbeiten.", RespondType::PrivateNotice); } } else diff --git a/src/crsm.hpp b/src/crsm.hpp index cc9ad44..5577c07 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -289,6 +289,7 @@ private: void writeFiles(bool writeSession = false, bool writeNoConfig = false); void checkActivity(ClientInfo& client); int findWishFromUser(const ClientInfo& client); + QString getCommand(const QString& message); CMD_FUNCTION(help); CMD_FUNCTION(passToClonk); -- cgit v1.2.3-54-g00ecf