Fix console multi-line commands

This commit is contained in:
2023-09-02 20:26:18 +08:00
parent f8a4e6f205
commit de765c575e

View File

@ -22,6 +22,7 @@ import com.github.jie65535.opencommand.json.JsonResponse;
import com.github.jie65535.opencommand.model.Client; import com.github.jie65535.opencommand.model.Client;
import com.github.jie65535.opencommand.socket.SocketData; import com.github.jie65535.opencommand.socket.SocketData;
import emu.grasscutter.command.CommandMap; import emu.grasscutter.command.CommandMap;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.http.Router; import emu.grasscutter.server.http.Router;
import emu.grasscutter.utils.Crypto; import emu.grasscutter.utils.Crypto;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
@ -115,7 +116,7 @@ public final class OpenCommandHandler implements Router {
plugin.getLogger().info(String.format("IP: %s run command in console > %s", context.ip(), req.data)); plugin.getLogger().info(String.format("IP: %s run command in console > %s", context.ip(), req.data));
var resultCollector = new StringBuilder(); var resultCollector = new StringBuilder();
EventListeners.setConsoleMessageHandler(resultCollector); EventListeners.setConsoleMessageHandler(resultCollector);
CommandMap.getInstance().invoke(null, null, req.data.toString()); tryInvokeCommand(null, null, req.data.toString());
context.json(new JsonResponse(resultCollector.toString())); context.json(new JsonResponse(resultCollector.toString()));
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().warn("Run command failed.", e); plugin.getLogger().warn("Run command failed.", e);
@ -147,7 +148,6 @@ public final class OpenCommandHandler implements Router {
// update token expire time // update token expire time
client.tokenExpireTime = new Date(now.getTime() + config.tokenLastUseExpirationTime_H * 60L * 60L * 1000L); client.tokenExpireTime = new Date(now.getTime() + config.tokenLastUseExpirationTime_H * 60L * 60L * 1000L);
var player = plugin.getServer().getPlayerByUid(client.playerId); var player = plugin.getServer().getPlayerByUid(client.playerId);
var rawMessage = req.data.toString();
if (player == null) { if (player == null) {
context.json(new JsonResponse(404, "Player not found")); context.json(new JsonResponse(404, "Player not found"));
return; return;
@ -158,14 +158,7 @@ public final class OpenCommandHandler implements Router {
synchronized (handler) { synchronized (handler) {
try { try {
handler.setLength(0); handler.setLength(0);
for (var command : rawMessage.split("\n[/!]|\\|")) { tryInvokeCommand(player, player, req.data.toString());
command = command.trim();
if (command.isEmpty()) continue;
if (command.charAt(0) == '/' || command.charAt(0) == '!') {
command = command.substring(1);
}
CommandMap.getInstance().invoke(player, player, command);
}
context.json(new JsonResponse(handler.toString())); context.json(new JsonResponse(handler.toString()));
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().warn("Run command failed.", e); plugin.getLogger().warn("Run command failed.", e);
@ -181,6 +174,17 @@ public final class OpenCommandHandler implements Router {
} }
} }
private static void tryInvokeCommand(Player sender, Player target, String rawMessage) {
for (var command : rawMessage.split("\n[/!]|\\|")) {
command = command.trim();
if (command.isEmpty()) continue;
if (command.charAt(0) == '/' || command.charAt(0) == '!') {
command = command.substring(1);
}
CommandMap.getInstance().invoke(sender, target, command);
}
}
private static void cleanupExpiredCodes() { private static void cleanupExpiredCodes() {
var now = new Date(); var now = new Date();
codeExpireTime.int2ObjectEntrySet().removeIf(entry -> entry.getValue().before(now)); codeExpireTime.int2ObjectEntrySet().removeIf(entry -> entry.getValue().before(now));