mirror of
https://github.com/jie65535/gc-openchat-plugin.git
synced 2025-07-31 18:39:56 +08:00
Implement token reloading (fix #2)
This commit is contained in:
parent
d9ef6b3097
commit
397cf392f5
@ -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) {
|
||||||
|
@ -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");
|
||||||
|
@ -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");
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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" -> {
|
||||||
|
Loading…
Reference in New Issue
Block a user