summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CRSMConfig.hpp4
-rw-r--r--src/crsm.cpp56
-rw-r--r--src/crsm.hpp1
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 &param)
}
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 <Alias> als Alias für <Szenario> ein.", "<Alias> = <Szenario>");
@@ -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 <Befehlsname>\n"
+ respond(client, "Genauere Informationen zu einem Befehl mit " + Config.CRSM.CommandSigns.first() + "help <Befehlsname>\n"
"[Sachen in eckigen Klammern sind optional]\n"
"<Sachen in spitzen Klammern sind benoetigte Argumente>\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 + " <Unterbefehlsname>):\n ";
+ response = "Verfügbare Unterbefehle für " + args + " (nähere Infos zu einem Befehl mit " + Config.CRSM.CommandSigns.first() + "help " + args + " <Unterbefehlsname>):\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);