feat: add command execute record in db

This commit is contained in:
2024-10-02 21:02:05 +08:00
parent 767bd7c0f3
commit 57885473bd
31 files changed
+169 -61

No files matched your search

+2
View File
@@ -39,6 +39,8 @@ dependencies {
implementation(libs.simple.java.mail)
implementation(libs.jsoup)
implementation(libs.nashorn.core)
implementation(libs.zxing.core)
implementation(libs.zxing.javase)
}
tasks.build {
+3
View File
@@ -10,6 +10,7 @@ animatedGifLibVersion = "1.4"
simpleJavaMailVersion = "8.11.3"
jsoupVersion = "1.18.1"
nashornVersion = "15.4"
zxingVersion = "3.5.3"
[libraries]
rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" }
@@ -22,6 +23,8 @@ animated-gif-lib = { group = "com.madgag", name = "animated-gif-lib", version.re
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" }
zxing-core = { group = "com.google.zxing", name = "core", version.ref = "zxingVersion" }
zxing-javase = { group = "com.google.zxing", name = "javase", version.ref = "zxingVersion" }
[bundles]
+2 -2
View File
@@ -20,8 +20,8 @@ import cn.rtast.fancybot.commands.misc.JrrpCommand
import cn.rtast.fancybot.commands.niuzi.NiuziRedeemCommand
import cn.rtast.fancybot.commands.misc.ShortLinkCommand
import cn.rtast.fancybot.entity.Config
import cn.rtast.fancybot.entity.enums.ImageType
import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.enums.ImageType
import cn.rtast.fancybot.enums.WSType
import cn.rtast.fancybot.items.*
import cn.rtast.fancybot.util.file.ConfigManager
import cn.rtast.fancybot.util.file.NiuziBankManager
@@ -8,7 +8,7 @@
package cn.rtast.fancybot
import cn.rtast.fancybot.commands.parse.*
import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.enums.WSType
import cn.rtast.fancybot.util.initDatabase
import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.entity.*
@@ -8,6 +8,8 @@
package cn.rtast.fancybot.commands
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.OneBotListener
@@ -18,5 +20,6 @@ class EchoCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
listener.sendGroupMessage(message.groupId, args.joinToString(" "))
insertActionRecord(CommandAction.Echo, message.sender.userId)
}
}
@@ -9,6 +9,8 @@ package cn.rtast.fancybot.commands
import cn.rtast.fancybot.START_UP_TIME
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
@@ -44,5 +46,6 @@ class StatusCommand : BaseCommand() {
.addText("Java版本: $javaVersion / Kotlin版本: $kotlinVersion")
.build()
message.reply(msg)
insertActionRecord(CommandAction.Status, message.sender.userId)
}
}
@@ -13,7 +13,9 @@ import cn.rtast.fancybot.entity.gpt.ChatCompletionsPayload
import cn.rtast.fancybot.entity.gpt.ChatCompletionsResponse
import cn.rtast.fancybot.entity.gpt.LlamaResponse
import cn.rtast.fancybot.entity.gpt.ModelList
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.fancybot.util.str.toJson
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
@@ -68,6 +70,7 @@ class AICommand : BaseCommand() {
.build()
nodeMsg.addMessageChain(msg, configManager.selfId)
listener.sendGroupForwardMsg(message.groupId, nodeMsg.build())
insertActionRecord(CommandAction.AI, message.sender.userId, "$content-$model-GPT")
}
}
@@ -94,5 +97,6 @@ class LlamaCommand : BaseCommand() {
.build()
nodeMsg.addMessageChain(msg, configManager.selfId)
listener.sendGroupForwardMsg(message.groupId, nodeMsg.build())
insertActionRecord(CommandAction.AI, message.sender.userId, "$prompt-LLAMA")
}
}
@@ -1,27 +0,0 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/8/30
*/
package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.annotations.CommandDescription
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.OneBotListener
@CommandDescription("生成二维码")
class QRCodeCommand : BaseCommand() {
override val commandNames = listOf("/qr")
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val content = args.joinToString(" ")
val msg = MessageChain.Builder()
.addImage("https://api.rtast.cn/api/generate_qr?data=$content")
.build()
message.reply(msg)
}
}
@@ -10,7 +10,9 @@ package cn.rtast.fancybot.commands.lookup
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.entity.wiki.PageInfoResponse
import cn.rtast.fancybot.entity.wiki.WikipediaResponse
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
@@ -69,6 +71,8 @@ class WikipediaCommand : BaseCommand() {
.addText("没有查询到指定的wiki页面呢 >>> $title")
.build()
message.reply(msg)
} finally {
insertActionRecord(CommandAction.Wiki, message.sender.userId, title)
}
}
}
@@ -9,6 +9,8 @@ package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.configManager
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.ArrayMessage
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType
@@ -28,5 +30,7 @@ class AntiRevokeCommand : BaseCommand() {
msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n")))
msgList.addAll(getMsg.message)
listener.sendGroupMessage(message.groupId, msgList)
insertActionRecord(CommandAction.AntiRevoke, message.sender.userId, getMsg.messageId.toString())
}
}
@@ -12,7 +12,9 @@ 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.enums.CommandAction
import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.fancybot.util.str.toJson
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
@@ -64,6 +66,8 @@ class CompilerCommand : BaseCommand() {
listener.sendGroupMessage(message.groupId, msg)
} catch (e: Exception) {
message.reply("执行错误: ${e.message}")
} finally {
insertActionRecord(CommandAction.Compiler, message.sender.userId)
}
}
}
@@ -0,0 +1,44 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/8/30
*/
package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.fancybot.util.toByteArray
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.OneBotListener
import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.client.j2se.MatrixToImageWriter
import com.google.zxing.qrcode.QRCodeWriter
@CommandDescription("生成二维码")
class QRCodeCommand : BaseCommand() {
override val commandNames = listOf("/qr")
private fun generateQRCode(content: String): String {
val qrCodeWriter = QRCodeWriter()
val hints = mapOf(EncodeHintType.CHARACTER_SET to "UTF-8")
val bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 300, 300 , hints)
return MatrixToImageWriter.toBufferedImage(bitMatrix).toByteArray().encodeToBase64()
}
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val content = args.joinToString(" ")
val image = this.generateQRCode(content)
val msg = MessageChain.Builder()
.addImage(image, true)
.build()
message.reply(msg)
insertActionRecord(CommandAction.GenQRCode, message.sender.userId)
}
}
@@ -8,7 +8,7 @@
package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.entity.enums.CountryList
import cn.rtast.fancybot.enums.CountryList
import cn.rtast.fancybot.util.randomBooleanWithProbability
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
@@ -9,6 +9,8 @@ package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.configManager
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
@@ -58,5 +60,6 @@ class SendMailCommand : BaseCommand() {
val target = args.first()
this.sendMail(target)
message.reply("正在发送邮件, 请查收~(可能会出现在垃圾桶中~)")
insertActionRecord(CommandAction.SendMail, message.sender.userId, target)
}
}
@@ -0,0 +1,19 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/10/2
*/
package cn.rtast.fancybot.db
import org.jetbrains.exposed.sql.Table
object ActionTable: Table("action") {
val id = integer("id").autoIncrement().nullable()
val action = varchar("action", 255).nullable()
val timestamp = long("timestamp").nullable()
val triggerId = long("trigger_id").nullable()
val result = varchar("result", 255)
override val primaryKey = PrimaryKey(id)
}
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.db
package cn.rtast.fancybot.db
import org.jetbrains.exposed.sql.Table
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.db
package cn.rtast.fancybot.db
import org.jetbrains.exposed.sql.Table
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.db
package cn.rtast.fancybot.db
import org.jetbrains.exposed.sql.Table
@@ -7,8 +7,8 @@
package cn.rtast.fancybot.entity
import cn.rtast.fancybot.entity.enums.ImageType
import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.enums.ImageType
import cn.rtast.fancybot.enums.WSType
data class Config(
val ncmAPI: String,
@@ -7,7 +7,7 @@
package cn.rtast.fancybot.entity.gpt
import cn.rtast.fancybot.entity.enums.GPTUserRole
import cn.rtast.fancybot.enums.GPTUserRole
data class ChatCompletionsPayload(
val model: String,
@@ -7,7 +7,7 @@
package cn.rtast.fancybot.entity.gpt
import cn.rtast.fancybot.entity.enums.GPTUserRole
import cn.rtast.fancybot.enums.GPTUserRole
data class ChatCompletionsResponse(
val choices: List<Choice>
@@ -0,0 +1,14 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/10/2
*/
package cn.rtast.fancybot.enums
enum class CommandAction(val action: String) {
SendMail("发送邮件"), Echo("使用Echo"), GenQRCode("生成二维码"),
Status("获取状态"), Compiler("执行语言代码"), AntiRevoke("防撤回"),
Wiki("查询Wiki"), AI("问AI")
}
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.enums
package cn.rtast.fancybot.enums
enum class CountryList(val chineseName: String) {
China("中国"), UnitedStates("美国"), Russia("俄罗斯"),
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.enums
package cn.rtast.fancybot.enums
enum class GPTUserRole {
user, system, assistant
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.enums
package cn.rtast.fancybot.enums
enum class ImageType(val typeName: String) {
PNG("png"), JPG("jpg")
@@ -5,7 +5,7 @@
*/
package cn.rtast.fancybot.entity.enums
package cn.rtast.fancybot.enums
enum class WSType {
Client, Server
@@ -8,9 +8,10 @@
package cn.rtast.fancybot.util
import cn.rtast.fancybot.ROOT_PATH
import cn.rtast.fancybot.entity.db.JrrpTable
import cn.rtast.fancybot.entity.db.NiuziBankTable
import cn.rtast.fancybot.entity.db.NiuziTable
import cn.rtast.fancybot.db.ActionTable
import cn.rtast.fancybot.db.JrrpTable
import cn.rtast.fancybot.db.NiuziBankTable
import cn.rtast.fancybot.db.NiuziTable
import kotlinx.coroutines.Dispatchers
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
@@ -22,6 +23,7 @@ suspend fun initDatabase() {
SchemaUtils.createMissingTablesAndColumns(JrrpTable)
SchemaUtils.createMissingTablesAndColumns(NiuziBankTable)
SchemaUtils.createMissingTablesAndColumns(NiuziTable)
SchemaUtils.createMissingTablesAndColumns(ActionTable)
}
}
@@ -0,0 +1,26 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/10/2
*/
package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.db.ActionTable
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert
import java.time.Instant
suspend fun insertActionRecord(triggerAction: CommandAction, userId: Long, triggerResult: String = "Nothing") {
suspendedTransaction {
ActionTable.insert {
it[action] = triggerAction.action
it[timestamp] = Instant.now().epochSecond
it[triggerId] = userId
it[result] = triggerResult
}
}
}
@@ -7,8 +7,8 @@
package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.JrrpRecord
import cn.rtast.fancybot.entity.db.JrrpTable
import cn.rtast.fancybot.db.JrrpRecord
import cn.rtast.fancybot.db.JrrpTable
import cn.rtast.fancybot.util.isSameDay
import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert
@@ -7,14 +7,14 @@
package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.NiuziBankAccount
import cn.rtast.fancybot.entity.db.NiuziBankTable
import cn.rtast.fancybot.entity.db.NiuziBankTable.balance
import cn.rtast.fancybot.entity.db.NiuziBankTable.interestRate
import cn.rtast.fancybot.entity.db.NiuziBankTable.nickname
import cn.rtast.fancybot.entity.db.NiuziBankTable.timestamp
import cn.rtast.fancybot.entity.db.NiuziBankTable.userId
import cn.rtast.fancybot.entity.db.NiuziTable
import cn.rtast.fancybot.db.NiuziBankAccount
import cn.rtast.fancybot.db.NiuziBankTable
import cn.rtast.fancybot.db.NiuziBankTable.balance
import cn.rtast.fancybot.db.NiuziBankTable.interestRate
import cn.rtast.fancybot.db.NiuziBankTable.nickname
import cn.rtast.fancybot.db.NiuziBankTable.timestamp
import cn.rtast.fancybot.db.NiuziBankTable.userId
import cn.rtast.fancybot.db.NiuziTable
import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
@@ -7,12 +7,12 @@
package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.Niuzi
import cn.rtast.fancybot.entity.db.NiuziTable
import cn.rtast.fancybot.entity.db.NiuziTable.length
import cn.rtast.fancybot.entity.db.NiuziTable.nickname
import cn.rtast.fancybot.entity.db.NiuziTable.timestamp
import cn.rtast.fancybot.entity.db.NiuziTable.userId
import cn.rtast.fancybot.db.Niuzi
import cn.rtast.fancybot.db.NiuziTable
import cn.rtast.fancybot.db.NiuziTable.length
import cn.rtast.fancybot.db.NiuziTable.nickname
import cn.rtast.fancybot.db.NiuziTable.timestamp
import cn.rtast.fancybot.db.NiuziTable.userId
import cn.rtast.fancybot.util.isSameDay
import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert