From 60b41ead3bc3ba56ea8b0c119243fabcbe46d7a2 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Sat, 21 Sep 2024 14:12:08 +0800 Subject: [PATCH] feat: add caculate parse --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 ++ src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 16 +++--------- .../commands/parse/CalculateCommand.kt | 25 +++++++++++++++++++ 4 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/parse/CalculateCommand.kt diff --git a/build.gradle.kts b/build.gradle.kts index 65c0672..c405c80 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,6 +38,7 @@ dependencies { implementation(libs.animated.gif.lib) implementation(libs.simple.java.mail) implementation(libs.jsoup) + implementation(libs.nashorn.core) } tasks.build { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 025d3a0..decd497 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,6 +9,7 @@ motdPingerVersion = "1.0.1" animatedGifLibVersion = "1.4" simpleJavaMailVersion = "8.11.3" jsoupVersion = "1.18.1" +nashornVersion = "15.4" [libraries] rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" } @@ -20,6 +21,7 @@ sqliteJDBC = { group = "org.xerial", name = "sqlite-jdbc", version.ref = "sqlite animated-gif-lib = { group = "com.madgag", name = "animated-gif-lib", version.ref = "animatedGifLibVersion" } simple-java-mail = { group = "org.simplejavamail", name = "simple-java-mail", version.ref = "simpleJavaMailVersion" } jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoupVersion" } +nashorn-core = { group = "org.openjdk.nashorn", name = "nashorn-core", version.ref = "nashornVersion" } [bundles] diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 0c3746b..e264a7d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -35,6 +35,7 @@ import cn.rtast.fancybot.commands.misc.UnsetZiBiCommand import cn.rtast.fancybot.commands.misc.ZiBiCommand import cn.rtast.fancybot.commands.parse.AsciiArtCommand import cn.rtast.fancybot.commands.parse.BVParseCommand +import cn.rtast.fancybot.commands.parse.CalculateCommand import cn.rtast.fancybot.commands.parse.GitHubParseCommand import cn.rtast.fancybot.commands.parse.ImageURLCommand import cn.rtast.fancybot.commands.parse.ReverseGIFCommand @@ -85,9 +86,8 @@ class FancyBot : OneBotListener { val messageId = message.messageId println("$sender($senderId: $groupId >>> $messageId): $msg") - if (message.rawMessage.contains("1+1")) { - message.reply("1+1=2") - } + val calculateResult = CalculateCommand.parse(message.rawMessage) + calculateResult?.let { message.reply(calculateResult) } coroutineScope.launch { message.message.forEach { @@ -190,16 +190,6 @@ class FancyBot : OneBotListener { .build() this.sendGroupMessage(groupId, msg) } - - override suspend fun onPrivateMessage(message: PrivateMessage, json: String) { - if (message.rawMessage.contains("1+1")) { - message.reply("1+1=2") - } - - if (message.rawMessage == "ping") { - message.reply("pong") - } - } } val configManager = ConfigManager() diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/CalculateCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/CalculateCommand.kt new file mode 100644 index 0000000..ff63e8c --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/CalculateCommand.kt @@ -0,0 +1,25 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/21 + */ + + +package cn.rtast.fancybot.commands.parse + +import javax.script.ScriptEngineManager +import javax.script.ScriptException + +object CalculateCommand { + + private val engine = ScriptEngineManager().getEngineByName("JavaScript") + + fun parse(input: String): String? { + return try { + engine.eval(input) + } catch (_: ScriptException) { + "Invalid expression" + return null + }.toString() + } +} \ No newline at end of file