diff options
Diffstat (limited to 'src/crsm.cpp')
| -rw-r--r-- | src/crsm.cpp | 38 |
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; |
