feat: add compiler and format class dir

This commit is contained in:
2024-09-13 12:44:10 +08:00
parent d286613f01
commit 882a9f50ff
23 files changed
+128 -68

No files matched your search

+20 -5
View File
@@ -8,10 +8,25 @@
package cn.rtast.fancybot package cn.rtast.fancybot
import cn.rtast.fancybot.commands.* import cn.rtast.fancybot.commands.*
import cn.rtast.fancybot.commands.misc.BVParseCommand import cn.rtast.fancybot.commands.CompilerCommand
import cn.rtast.fancybot.commands.misc.GitHubParseCommand import cn.rtast.fancybot.commands.lookup.CigaretteCommand
import cn.rtast.fancybot.commands.misc.ImageURLCommand import cn.rtast.fancybot.commands.lookup.MCPingCommand
import cn.rtast.fancybot.commands.misc.ReverseGIFCommand import cn.rtast.fancybot.commands.lookup.MusicCommand
import cn.rtast.fancybot.commands.lookup.NslookupCommand
import cn.rtast.fancybot.commands.lookup.PixivCommand
import cn.rtast.fancybot.commands.lookup.QRCodeCommand
import cn.rtast.fancybot.commands.lookup.WeatherCommand
import cn.rtast.fancybot.commands.parse.BVParseCommand
import cn.rtast.fancybot.commands.parse.GitHubParseCommand
import cn.rtast.fancybot.commands.parse.ImageURLCommand
import cn.rtast.fancybot.commands.parse.ReverseGIFCommand
import cn.rtast.fancybot.commands.record.JiJianCommand
import cn.rtast.fancybot.commands.record.JrrpCommand
import cn.rtast.fancybot.commands.record.MyNiuziCommand
import cn.rtast.fancybot.commands.record.MyPointCommand
import cn.rtast.fancybot.commands.record.NiuziSignCommand
import cn.rtast.fancybot.commands.record.RedeemCommand
import cn.rtast.fancybot.commands.record.SignCommand
import cn.rtast.fancybot.entity.bili.CardShare import cn.rtast.fancybot.entity.bili.CardShare
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.items.BaisiItem import cn.rtast.fancybot.items.BaisiItem
@@ -129,7 +144,7 @@ val commands = listOf(
RUACommand(), NslookupCommand(), RUACommand(), NslookupCommand(),
NiuziSignCommand(), MyNiuziCommand(), NiuziSignCommand(), MyNiuziCommand(),
JiJianCommand(), LikeMeCommand(), JiJianCommand(), LikeMeCommand(),
KotlinCCommand() CompilerCommand()
) )
suspend fun main() { suspend fun main() {
@@ -0,0 +1,61 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/12
*/
package cn.rtast.fancybot.commands
import cn.rtast.fancybot.entity.compiler.GLOTPayload
import cn.rtast.fancybot.entity.compiler.GLOTResponse
import cn.rtast.fancybot.entity.compiler.KCSPayload
import cn.rtast.fancybot.entity.compiler.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 CompilerCommand : BaseCommand() {
override val commandNames = listOf("/compiler", "/exec")
private val kotlinCompilerServer = "https://api.kotlinlang.org/api/2.0.20/compiler/run"
private val glotCompilerServer = "https://glot.io/run"
override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) {
val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("使用`/exec` <语言> <代码> 即可执行~")
.build()
listener.sendGroupMessage(message.groupId, msg)
return
}
val language = args.first()
val code = args.drop(1).joinToString(" ")
val response = when (language) {
"kotlin", "Kotlin", "kt", "Kt", "KT" -> {
Http.post<KCSResponse>(
kotlinCompilerServer, jsonBody = KCSPayload(listOf(KCSPayload.File(code))).toJson()
).text
}
else -> {
Http.post<GLOTResponse>(
"$glotCompilerServer/$language",
params = mapOf("version" to "latest"),
jsonBody = GLOTPayload(listOf(GLOTPayload.File(code))).toJson()
).stdout
}
}
val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("执行结果如下:")
.addNewLine()
.addText(response.replace("<outStream>", "").replace("</outStream>", ""))
.build()
listener.sendGroupMessage(message.groupId, msg)
}
}
@@ -1,45 +0,0 @@
/*
* 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<String>) {
if (args.isEmpty()) {
val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("使用`/ktc` <code>传入Kotlin代码即可执行~")
.build()
listener.sendGroupMessage(message.groupId, msg)
return
}
val code = args.joinToString(" ")
val response = Http.post<KCSResponse>(
kotlinCompilerServer, jsonBody = KCSPayload(listOf(KCSPayload.File(code))).toJson()
)
val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("执行结果如下:")
.addNewLine()
.addText(response.text.replace("</outStream>", "").replace("<outStream>", ""))
.build()
listener.sendGroupMessage(message.groupId, msg)
}
}
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.entity.cigarette.Cigarette import cn.rtast.fancybot.entity.cigarette.Cigarette
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.entity.MCPing import cn.rtast.fancybot.entity.MCPing
import cn.rtast.fancybot.util.str.fromJson import cn.rtast.fancybot.util.str.fromJson
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.configManager import cn.rtast.fancybot.configManager
import cn.rtast.fancybot.entity.music.Search import cn.rtast.fancybot.entity.music.Search
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.entity.pixiv.Ranking import cn.rtast.fancybot.entity.pixiv.Ranking
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.configManager import cn.rtast.fancybot.configManager
import cn.rtast.fancybot.entity.weather.Geo import cn.rtast.fancybot.entity.weather.Geo
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands.misc package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.entity.bili.BVID import cn.rtast.fancybot.entity.bili.BVID
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands.misc package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.configManager import cn.rtast.fancybot.configManager
import cn.rtast.fancybot.entity.github.RepoInfo import cn.rtast.fancybot.entity.github.RepoInfo
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands.misc package cn.rtast.fancybot.commands.parse
import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GetMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands.misc package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GetMessage
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.record
import cn.rtast.fancybot.util.file.JrrpManager import cn.rtast.fancybot.util.file.JrrpManager
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.record
import cn.rtast.fancybot.ADMINS import cn.rtast.fancybot.ADMINS
import cn.rtast.fancybot.signManager import cn.rtast.fancybot.signManager
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.record
import cn.rtast.fancybot.niuziManager import cn.rtast.fancybot.niuziManager
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.record
import cn.rtast.fancybot.itemManager import cn.rtast.fancybot.itemManager
import cn.rtast.fancybot.signManager import cn.rtast.fancybot.signManager
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands.record
import cn.rtast.fancybot.signManager import cn.rtast.fancybot.signManager
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
@@ -0,0 +1,17 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/13
*/
package cn.rtast.fancybot.entity.compiler
data class GLOTPayload(
val files: List<File>
) {
data class File(
val content: String,
val name: String = "main"
)
}
@@ -0,0 +1,12 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/13
*/
package cn.rtast.fancybot.entity.compiler
data class GLOTResponse(
val stdout: String,
)
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.entity.kcs package cn.rtast.fancybot.entity.compiler
data class KCSPayload( data class KCSPayload(
val files: List<File>, val files: List<File>,
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.entity.kcs package cn.rtast.fancybot.entity.compiler
import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName