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);
}