From ada29abea7b55644ed54ee78a3d0cdcfcc21b581 Mon Sep 17 00:00:00 2001 From: Carl Richard Theodor Schneider Date: Fri, 7 Jan 2022 00:06:21 +0100 Subject: [PATCH] feat: Add `matrix.admin` to allow admin commands via matrix --- matrixbridge.properties.template | 1 + .../matrixbridge/BridgePropertyReader.java | 17 ++++++------- .../bukkit/matrixbridge/BridgeService.java | 24 ++++++++++++++++--- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/matrixbridge.properties.template b/matrixbridge.properties.template index 28ee8b2..d66b2e4 100644 --- a/matrixbridge.properties.template +++ b/matrixbridge.properties.template @@ -1,4 +1,5 @@ matrix.id=@username:domain.com matrix.password= # matrix.room=!roomID:domain.com +matrix.admin= minecraft.server.name=Server diff --git a/src/main/java/at/overflow/bukkit/matrixbridge/BridgePropertyReader.java b/src/main/java/at/overflow/bukkit/matrixbridge/BridgePropertyReader.java index a8dabc3..1bacade 100644 --- a/src/main/java/at/overflow/bukkit/matrixbridge/BridgePropertyReader.java +++ b/src/main/java/at/overflow/bukkit/matrixbridge/BridgePropertyReader.java @@ -10,6 +10,7 @@ public class BridgePropertyReader { private final String MATRIX_USERID_KEY = "matrix.id"; private final String MATRIX_PASSWORD_KEY = "matrix.password"; private final String MATRIX_ROOMID_KEY = "matrix.room"; + private final String MATRIX_ADMINID_KEY = "matrix.admin"; private final String MINECRAFT_SERVER_NAME_KEY = "minecraft.server.name"; @@ -33,6 +34,7 @@ public class BridgePropertyReader { private void generateEmptyFile(File file) { properties.setProperty(MATRIX_USERID_KEY, ""); properties.setProperty(MATRIX_PASSWORD_KEY, ""); + properties.setProperty(MATRIX_ADMINID_KEY, ""); properties.setProperty(MINECRAFT_SERVER_NAME_KEY, "Server"); try { properties.store(new FileOutputStream(file), "Matrix Bridge Properties"); @@ -45,28 +47,27 @@ public class BridgePropertyReader { public String getDomain() { String tmp = properties.getProperty(MATRIX_USERID_KEY); - return tmp.substring(tmp.indexOf(":") + 1); } public String getUsername() { String tmp = properties.getProperty(MATRIX_USERID_KEY); - return tmp.substring(1, tmp.indexOf(":")); } public String getMinecraftServerName() { - String tmp = properties.getProperty(MINECRAFT_SERVER_NAME_KEY); - return tmp; + return properties.getProperty(MINECRAFT_SERVER_NAME_KEY); } public String getPassword() { - String tmp = properties.getProperty(MATRIX_PASSWORD_KEY); - return tmp; + return properties.getProperty(MATRIX_PASSWORD_KEY); } public String getRoom() { - String tmp = properties.getProperty(MATRIX_ROOMID_KEY); - return tmp; + return properties.getProperty(MATRIX_ROOMID_KEY); } + + public String getAdmin() { + return properties.getProperty(MATRIX_ADMINID_KEY); + }; } diff --git a/src/main/java/at/overflow/bukkit/matrixbridge/BridgeService.java b/src/main/java/at/overflow/bukkit/matrixbridge/BridgeService.java index 1392a1b..6154f40 100644 --- a/src/main/java/at/overflow/bukkit/matrixbridge/BridgeService.java +++ b/src/main/java/at/overflow/bukkit/matrixbridge/BridgeService.java @@ -8,14 +8,15 @@ import io.kamax.matrix.client.regular.SyncOptions; import io.kamax.matrix.event._MatrixEvent; import io.kamax.matrix.hs._MatrixRoom; import io.kamax.matrix.json.event.MatrixJsonRoomMessageEvent; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; import java.util.Collection; import java.util.Iterator; public class BridgeService extends Thread implements Endpoint { - Endpoint receiver; - + MatrixPlugin receiver; _MatrixClient client; private BridgePropertyReader properties; @@ -35,7 +36,7 @@ public class BridgeService extends Thread implements Endpoint { this.receiver.send("", players.toString()); } - public BridgeService(Endpoint receiver, BridgePropertyReader properties) { + public BridgeService(MatrixPlugin receiver, BridgePropertyReader properties) { this.properties = properties; @@ -83,6 +84,23 @@ public class BridgeService extends Thread implements Endpoint { if (msg.getBody() != null) { if (msg.getBody().startsWith("!")) { this.parseCommand(msg.getBody()); + } else if (syncToken != null + && msg.getBody().startsWith("$") + && msg.getSender().getId().equals(properties.getAdmin())) { + try { + Bukkit.getScheduler().runTask(this.receiver, + new Runnable() { + @Override + public void run() { + Bukkit.getServer().dispatchCommand( + Bukkit.getServer().getConsoleSender(), + msg.getBody().substring(1)); + } + } + ); + } catch (Exception e) { + e.printStackTrace(); + } } else { this.receiver.send(msg.getSender().getId(), msg.getBody()); }