3 Commits

Author SHA1 Message Date
e795c5a9c4 Upgrade to 1.6.0 2023-06-03 00:12:41 +08:00
28456bb179 Update version to 0.2.1 2023-04-09 20:42:30 +08:00
397cf392f5 Implement token reloading (fix #2) 2023-04-09 20:41:18 +08:00
7 changed files with 56 additions and 12 deletions

View File

@@ -3,7 +3,7 @@ plugins {
} }
group 'com.github.jie65535.openchat' group 'com.github.jie65535.openchat'
version 'dev-0.2.0' version '0.3.0'
repositories { repositories {
mavenCentral() mavenCentral()

View File

@@ -33,7 +33,7 @@ import java.util.regex.Pattern;
public class MiniOneBot implements WsStream.WsMessageHandler { public class MiniOneBot implements WsStream.WsMessageHandler {
private final Logger logger; private final Logger logger;
private final Javalin javalin; private final Javalin javalin;
private final String token; private String token;
private MiniOneBotWsServer server; private MiniOneBotWsServer server;
// private MiniOneBotWsClient client; // private MiniOneBotWsClient client;
@@ -43,6 +43,21 @@ public class MiniOneBot implements WsStream.WsMessageHandler {
this.logger = logger; 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 // region WebSocket
public void startWsServer(String path) { public void startWsServer(String path) {

View File

@@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class MiniOneBotWsServer implements WsStream, Closeable { public class MiniOneBotWsServer implements WsStream, Closeable {
private final String token; private String token;
private final Logger logger; private final Logger logger;
private final Map<WsContext, String> connections = new ConcurrentHashMap<>(); private final Map<WsContext, String> connections = new ConcurrentHashMap<>();
@@ -46,6 +46,10 @@ public class MiniOneBotWsServer implements WsStream, Closeable {
logger.info("WebSocket server started at {}", path); logger.info("WebSocket server started at {}", path);
} }
public void setToken(String token) {
this.token = token;
}
public void onConnect(WsConnectContext ctx) { public void onConnect(WsConnectContext ctx) {
logger.info("onConnect: address={} headers={}", ctx.session.getRemoteAddress(), ctx.headerMap()); logger.info("onConnect: address={} headers={}", ctx.session.getRemoteAddress(), ctx.headerMap());
var author = ctx.header("Authorization"); var author = ctx.header("Authorization");

View File

@@ -37,6 +37,10 @@ public final class OpenChatPlugin extends Plugin {
return instance; return instance;
} }
private OpenChatSystem openChatSystem;
public OpenChatSystem getOpenChatSystem() {
return openChatSystem;
}
@Override @Override
public void onLoad() { public void onLoad() {
@@ -60,7 +64,8 @@ public final class OpenChatPlugin extends Plugin {
getHandle().registerCommand(new ChatPlayerCommands()); getHandle().registerCommand(new ChatPlayerCommands());
// Set my chat system. // Set my chat system.
getServer().setChatSystem(new OpenChatSystem(this)); openChatSystem = new OpenChatSystem(this);
getServer().setChatSystem(openChatSystem);
// Log a plugin status message. // Log a plugin status message.
getLogger().info("[OpenChat] Enabled, see https://github.com/jie65535/gc-openchat-plugin"); getLogger().info("[OpenChat] Enabled, see https://github.com/jie65535/gc-openchat-plugin");

View File

@@ -45,6 +45,19 @@ public class OpenChatSystem extends ChatSystem {
// 获取HttpServer框架 // 获取HttpServer框架
var javalin = plugin.getHandle().getHttpServer().getHandle(); 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; var token = plugin.getConfig().wsToken;
if (token == null || token.isEmpty()) { if (token == null || token.isEmpty()) {
token = Utils.base64Encode(Crypto.createSessionKey(24)); token = Utils.base64Encode(Crypto.createSessionKey(24));
@@ -52,12 +65,14 @@ public class OpenChatSystem extends ChatSystem {
plugin.saveConfig(); plugin.saveConfig();
logger.warn("Detected that wsToken is empty, automatically generated Token for you as follows: {}", token); logger.warn("Detected that wsToken is empty, automatically generated Token for you as follows: {}", token);
} }
// 构造MiniOneBot return token;
miniOneBot = new MiniOneBot(javalin, token, logger); }
// 启动WebSocket服务
miniOneBot.startWsServer(plugin.getConfig().wsPath); /**
// 订阅群消息事件 * 重新载入Token
miniOneBot.subscribeGroupMessageEvent(this::onGroupMessage); */
public void reloadToken() {
miniOneBot.setToken(loadToken());
} }
/** /**

View File

@@ -106,8 +106,12 @@ public class ChatServerCommands implements CommandHandler {
CommandHandler.sendMessage(sender, "OK"); CommandHandler.sendMessage(sender, "OK");
} }
case "reload" -> { case "reload" -> {
// 重载配置
plugin.loadConfig(); plugin.loadConfig();
// 重载敏感词
plugin.loadSensitiveWordList(); plugin.loadSensitiveWordList();
// 重载令牌
plugin.getOpenChatSystem().reloadToken();
CommandHandler.sendMessage(sender, "OK"); CommandHandler.sendMessage(sender, "OK");
} }
case "group" -> { case "group" -> {

View File

@@ -1,7 +1,8 @@
{ {
"name": "openchat-plugin", "name": "openchat-plugin",
"description": "Chat with players in the server console", "description": "Chat with players in the server console",
"version": "0.1.0", "version": "0.3.0",
"mainClass": "com.github.jie65535.openchat.OpenChatPlugin", "mainClass": "com.github.jie65535.openchat.OpenChatPlugin",
"authors": ["jie65535"] "authors": ["jie65535"],
"api": 2
} }