diff --git a/pom.xml b/pom.xml index 04ee5d5..bb9f2ac 100644 --- a/pom.xml +++ b/pom.xml @@ -179,6 +179,11 @@ gifencoder 0.10.1 + + org.jline + jline + 3.15.0 + \ No newline at end of file diff --git a/src/main/java/net/lamgc/cgj/Main.java b/src/main/java/net/lamgc/cgj/Main.java index 3f0028f..05d7c3a 100644 --- a/src/main/java/net/lamgc/cgj/Main.java +++ b/src/main/java/net/lamgc/cgj/Main.java @@ -93,7 +93,7 @@ public class Main { } @Command - public static void consoleMode() { + public static void consoleMode() throws IOException { ConsoleMain.start(); } diff --git a/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java b/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java index c1ffbf5..26a0299 100644 --- a/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java +++ b/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java @@ -120,20 +120,38 @@ public class BotEventHandler implements EventHandler { */ @NotAccepted public static void executeMessageEvent(MessageEvent event) { + try { + executeMessageEvent(event, false); + } catch (InterruptedException e) { + log.error("执行时发生异常", e); + throw new RuntimeException(e); + } + } + + /** + * 投递消息事件 + * @param event 事件对象 + */ + @NotAccepted + public static void executeMessageEvent(MessageEvent event, boolean sync) throws InterruptedException { String debuggerName = SettingProperties.getProperty(0, "debug.debugger"); if(!event.getMessage().startsWith(ADMIN_COMMAND_PREFIX) && !Strings.isNullOrEmpty(debuggerName)) { try { MessageEventExecutionDebugger debugger = MessageEventExecutionDebugger.valueOf(debuggerName.toUpperCase()); debugger.debugger.accept(executor, event, SettingProperties.getProperties(SettingProperties.GLOBAL), - MessageEventExecutionDebugger.getDebuggerLogger(debugger)); + MessageEventExecutionDebugger.getDebuggerLogger(debugger)); } catch(IllegalArgumentException e) { log.warn("未找到指定调试器: '{}'", debuggerName); } catch (Exception e) { log.error("事件调试处理时发生异常", e); } } else { - BotEventHandler.executor.executor(event); + if(sync) { + BotEventHandler.executor.executorSync(event); + } else { + BotEventHandler.executor.executor(event); + } } } diff --git a/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java b/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java index bf8b303..910cae1 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java @@ -3,22 +3,36 @@ package net.lamgc.cgj.bot.framework.cli; import net.lamgc.cgj.bot.boot.ApplicationBoot; import net.lamgc.cgj.bot.event.BotEventHandler; import net.lamgc.cgj.bot.message.MessageSenderBuilder; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.impl.history.DefaultHistory; +import org.jline.terminal.TerminalBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Scanner; +import java.io.IOException; public class ConsoleMain { - public static void start() { - MessageSenderBuilder.setCurrentMessageSenderFactory(new ConsoleMessageSenderFactory()); + private final static Logger log = LoggerFactory.getLogger(ConsoleMain.class); + + public static void start() throws IOException { + ConsoleMessageSenderFactory senderFactory = new ConsoleMessageSenderFactory(); + MessageSenderBuilder.setCurrentMessageSenderFactory(senderFactory); ApplicationBoot.initialBot(); - Scanner scanner = new Scanner(System.in); - System.out.print("会话QQ:"); - long qqId = scanner.nextLong(); - System.out.print("会话群组号:"); - long groupId = scanner.nextLong(); + LineReader lineReader = LineReaderBuilder.builder() + .appName("CGJ") + .history(new DefaultHistory()) + .terminal(TerminalBuilder.builder() + .dumb(true) + .build()) + .build(); + + long qqId = Long.parseLong(lineReader.readLine("会话QQ: ")); + long groupId = Long.parseLong(lineReader.readLine("会话群组号:")); boolean isGroup = false; do { - String input = scanner.nextLine(); + String input = lineReader.readLine("App " + qqId + (isGroup ? "@" + groupId : "$private") + " >"); if(input.equalsIgnoreCase("#exit")) { System.out.println("退出应用..."); break; @@ -27,7 +41,11 @@ public class ConsoleMain { System.out.println("System: 群模式状态已变更: " + isGroup); continue; } - BotEventHandler.executeMessageEvent(new ConsoleMessageEvent(isGroup ? groupId : 0, qqId, input)); + try { + BotEventHandler.executeMessageEvent(new ConsoleMessageEvent(isGroup ? groupId : 0, qqId, input), true); + } catch (InterruptedException e) { + log.error("执行时发生中断", e); + } } while(true); }