diff --git a/src/main/java/com/github/jie65535/minionebot/MiniOneBot.java b/src/main/java/com/github/jie65535/minionebot/MiniOneBot.java index dfaa836..b89807c 100644 --- a/src/main/java/com/github/jie65535/minionebot/MiniOneBot.java +++ b/src/main/java/com/github/jie65535/minionebot/MiniOneBot.java @@ -33,7 +33,7 @@ import java.util.regex.Pattern; public class MiniOneBot implements WsStream.WsMessageHandler { private final Logger logger; private final Javalin javalin; - private final String token; + private String token; private MiniOneBotWsServer server; // private MiniOneBotWsClient client; @@ -43,6 +43,21 @@ public class MiniOneBot implements WsStream.WsMessageHandler { this.logger = logger; } + /** + * 更新OneBot Token + * @param token 授权令牌 + */ + public void setToken(String token) { + if (!Objects.equals(this.token, token)) { + this.token = token; + if (server != null) + server.setToken(token); +// if (client != null) +// client.setToken(token); + logger.info("MiniOneBot Token changed."); + } + } + // region WebSocket public void startWsServer(String path) { diff --git a/src/main/java/com/github/jie65535/minionebot/MiniOneBotWsServer.java b/src/main/java/com/github/jie65535/minionebot/MiniOneBotWsServer.java index d6b46dd..311805c 100644 --- a/src/main/java/com/github/jie65535/minionebot/MiniOneBotWsServer.java +++ b/src/main/java/com/github/jie65535/minionebot/MiniOneBotWsServer.java @@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap; public class MiniOneBotWsServer implements WsStream, Closeable { - private final String token; + private String token; private final Logger logger; private final Map connections = new ConcurrentHashMap<>(); @@ -46,6 +46,10 @@ public class MiniOneBotWsServer implements WsStream, Closeable { logger.info("WebSocket server started at {}", path); } + public void setToken(String token) { + this.token = token; + } + public void onConnect(WsConnectContext ctx) { logger.info("onConnect: address={} headers={}", ctx.session.getRemoteAddress(), ctx.headerMap()); var author = ctx.header("Authorization"); diff --git a/src/main/java/com/github/jie65535/openchat/OpenChatPlugin.java b/src/main/java/com/github/jie65535/openchat/OpenChatPlugin.java index 04510a9..8b70661 100644 --- a/src/main/java/com/github/jie65535/openchat/OpenChatPlugin.java +++ b/src/main/java/com/github/jie65535/openchat/OpenChatPlugin.java @@ -37,6 +37,10 @@ public final class OpenChatPlugin extends Plugin { return instance; } + private OpenChatSystem openChatSystem; + public OpenChatSystem getOpenChatSystem() { + return openChatSystem; + } @Override public void onLoad() { @@ -60,7 +64,8 @@ public final class OpenChatPlugin extends Plugin { getHandle().registerCommand(new ChatPlayerCommands()); // Set my chat system. - getServer().setChatSystem(new OpenChatSystem(this)); + openChatSystem = new OpenChatSystem(this); + getServer().setChatSystem(openChatSystem); // Log a plugin status message. getLogger().info("[OpenChat] Enabled, see https://github.com/jie65535/gc-openchat-plugin"); diff --git a/src/main/java/com/github/jie65535/openchat/OpenChatSystem.java b/src/main/java/com/github/jie65535/openchat/OpenChatSystem.java index 9708752..fd7d595 100644 --- a/src/main/java/com/github/jie65535/openchat/OpenChatSystem.java +++ b/src/main/java/com/github/jie65535/openchat/OpenChatSystem.java @@ -45,6 +45,19 @@ public class OpenChatSystem extends ChatSystem { // 获取HttpServer框架 var javalin = plugin.getHandle().getHttpServer().getHandle(); + // 构造MiniOneBot + miniOneBot = new MiniOneBot(javalin, loadToken(), logger); + // 启动WebSocket服务 + miniOneBot.startWsServer(plugin.getConfig().wsPath); + // 订阅群消息事件 + miniOneBot.subscribeGroupMessageEvent(this::onGroupMessage); + } + + /** + * 从配置文件中载入WsToken,如果为空则生成一个 + * @return Token + */ + private String loadToken() { var token = plugin.getConfig().wsToken; if (token == null || token.isEmpty()) { token = Utils.base64Encode(Crypto.createSessionKey(24)); @@ -52,12 +65,14 @@ public class OpenChatSystem extends ChatSystem { plugin.saveConfig(); logger.warn("Detected that wsToken is empty, automatically generated Token for you as follows: {}", token); } - // 构造MiniOneBot - miniOneBot = new MiniOneBot(javalin, token, logger); - // 启动WebSocket服务 - miniOneBot.startWsServer(plugin.getConfig().wsPath); - // 订阅群消息事件 - miniOneBot.subscribeGroupMessageEvent(this::onGroupMessage); + return token; + } + + /** + * 重新载入Token + */ + public void reloadToken() { + miniOneBot.setToken(loadToken()); } /** diff --git a/src/main/java/com/github/jie65535/openchat/commands/ChatServerCommands.java b/src/main/java/com/github/jie65535/openchat/commands/ChatServerCommands.java index 1c9db77..62a8048 100644 --- a/src/main/java/com/github/jie65535/openchat/commands/ChatServerCommands.java +++ b/src/main/java/com/github/jie65535/openchat/commands/ChatServerCommands.java @@ -106,8 +106,12 @@ public class ChatServerCommands implements CommandHandler { CommandHandler.sendMessage(sender, "OK"); } case "reload" -> { + // 重载配置 plugin.loadConfig(); + // 重载敏感词 plugin.loadSensitiveWordList(); + // 重载令牌 + plugin.getOpenChatSystem().reloadToken(); CommandHandler.sendMessage(sender, "OK"); } case "group" -> {