summaryrefslogtreecommitdiffstats
path: root/src/crsm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crsm.cpp')
-rw-r--r--src/crsm.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp
index cef3f83..021a63b 100644
--- a/src/crsm.cpp
+++ b/src/crsm.cpp
@@ -1207,24 +1207,35 @@ bool CRSM::cmdExists(const QString &name, ClientInterface interface)
return cmds.contains(name) && cmds.value(name).interfaces & interface;
}
-CmdFunctionRef* CRSM::findCommand(const QString &cmd, ClientInterface interface)
+CmdFunctionRef* CRSM::findCommand(const QString &cmd, ClientInterface interface, QString &args)
{
- return findCommand(cmd.split(QRegularExpression(R"(\s)"), QString::KeepEmptyParts), interface);
+ return findCommand(cmd.split(QRegularExpression(R"(\s)"), QString::KeepEmptyParts), interface, args);
}
-CmdFunctionRef* CRSM::findCommand(QStringList&& cmd, ClientInterface interface)
+CmdFunctionRef* CRSM::findCommand(QStringList&& cmd, ClientInterface interface, QString &realCmd)
{
if(cmd.length() > 0)
{
- const QString& cmdPart = cmd.join(' ');
+ QString cmdPart = cmd.join(' ');
+ realCmd = cmdPart;
+ substituteCommandAlias(cmdPart);
if(cmdExists(cmdPart, interface))
{
return &cmds[cmdPart];
}
else
{
- cmd.removeLast();
- return findCommand(std::move(cmd), interface);
+ removeCommandSuffixes(cmdPart);
+ substituteCommandAlias(cmdPart);
+ if(cmdExists(cmdPart, interface))
+ {
+ return &cmds[cmdPart];
+ }
+ else
+ {
+ cmd.removeLast();
+ return findCommand(std::move(cmd), interface, realCmd);
+ }
}
}
else
@@ -1233,13 +1244,14 @@ CmdFunctionRef* CRSM::findCommand(QStringList&& cmd, ClientInterface interface)
}
}
-bool CRSM::cmd(const QString &cmd, const ClientInfo &client)
+bool CRSM::cmd(QString cmd, const ClientInfo &client)
{
CmdFunctionRef* cmdPtr;
- if((cmdPtr = findCommand(cmd, client.interface)) != nullptr)
+ QString realCmd = cmd;
+ if((cmdPtr = findCommand(cmd, client.interface, realCmd)) != nullptr)
{
CmdFunctionRef cmdRef = *cmdPtr;
- QString args = cmd.mid(cmdRef.name.length()).trimmed();
+ QString args = cmd.mid(realCmd.length()).trimmed();
switch(client.interface)
{
case Clonk:
@@ -1843,10 +1855,12 @@ CMD_FUNCTION_IMPL(help)
}
else
{
- if(cmdExists(args, client.interface))
+ QString realCmdName = args;
+ substituteCommandAlias(realCmdName);
+ if(cmdExists(realCmdName, client.interface))
{
- const CmdFunctionRef& cmd = cmds.value(args);
- respond(client, Config.CRSM.CommandSigns.first() + cmd.name + " " + (!cmd.argList.isEmpty() ? cmd.argList + " " : "") + (!cmd.longDescription.isEmpty() ? "- " + cmd.longDescription : !cmd.shortDescription.isEmpty() ? "- " + cmd.shortDescription : "") + "\n");
+ const CmdFunctionRef& cmd = cmds.value(realCmdName);
+ respond(client, Config.CRSM.CommandSigns.first() + args + " " + (!cmd.argList.isEmpty() ? cmd.argList + " " : "") + (!cmd.longDescription.isEmpty() ? "- " + cmd.longDescription : !cmd.shortDescription.isEmpty() ? "- " + cmd.shortDescription : "") + "\n");
if(cmdGroups.contains(args))
{
bool first = true;