diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 6c6f125..245a7c0 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -128,7 +128,8 @@ val commands = listOf( RemakeCommand(), PixivCommand(), RUACommand(), NslookupCommand(), NiuziSignCommand(), MyNiuziCommand(), - JiJianCommand(), LikeMeCommand() + JiJianCommand(), LikeMeCommand(), + KotlinCCommand() ) suspend fun main() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/KotlinCCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/KotlinCCommand.kt new file mode 100644 index 0000000..977003c --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/KotlinCCommand.kt @@ -0,0 +1,45 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/12 + */ + + +package cn.rtast.fancybot.commands + +import cn.rtast.fancybot.entity.kcs.KCSPayload +import cn.rtast.fancybot.entity.kcs.KCSResponse +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.str.toJson +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.BaseCommand +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OBMessage + +class KotlinCCommand : BaseCommand() { + override val commandNames = listOf("/kotlinc", "/ktc") + + private val kotlinCompilerServer = "https://api.kotlinlang.org/api/2.0.20/compiler/run" + + override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + if (args.isEmpty()) { + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addText("使用`/ktc` 传入Kotlin代码即可执行~") + .build() + listener.sendGroupMessage(message.groupId, msg) + return + } + val code = args.joinToString(" ") + val response = Http.post( + kotlinCompilerServer, jsonBody = KCSPayload(listOf(KCSPayload.File(code))).toJson() + ) + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addText("执行结果如下:") + .addNewLine() + .addText(response.text.replace("", "").replace("", "")) + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSPayload.kt b/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSPayload.kt new file mode 100644 index 0000000..4534fd8 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSPayload.kt @@ -0,0 +1,20 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/12 + */ + + +package cn.rtast.fancybot.entity.kcs + +data class KCSPayload( + val files: List, + val args: String = "", + val confType: String = "java" +) { + data class File( + val text: String, + val name: String = "File.kt", + val publicId: String = "" + ) +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSResponse.kt b/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSResponse.kt new file mode 100644 index 0000000..61c0b9d --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/kcs/KCSResponse.kt @@ -0,0 +1,22 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/12 + */ + + +package cn.rtast.fancybot.entity.kcs + +import com.google.gson.annotations.SerializedName + +data class KCSResponse( + val errors: Errors, + val exception: Any, + val jvmByteCode: Any, + val text: String +) { + data class Errors( + @SerializedName("File.kt") + val file: List + ) +} \ No newline at end of file