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.simple.java.mail)
implementation(libs.jsoup) implementation(libs.jsoup)
implementation(libs.nashorn.core) implementation(libs.nashorn.core)
implementation(libs.zxing.core)
implementation(libs.zxing.javase)
} }
tasks.build { tasks.build {
+3
View File
@@ -10,6 +10,7 @@ animatedGifLibVersion = "1.4"
simpleJavaMailVersion = "8.11.3" simpleJavaMailVersion = "8.11.3"
jsoupVersion = "1.18.1" jsoupVersion = "1.18.1"
nashornVersion = "15.4" nashornVersion = "15.4"
zxingVersion = "3.5.3"
[libraries] [libraries]
rOneBot = { group = "cn.rtast", name = "ROneBot", version.ref = "ronebotVersion" } 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" } simple-java-mail = { group = "org.simplejavamail", name = "simple-java-mail", version.ref = "simpleJavaMailVersion" }
jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoupVersion" } jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoupVersion" }
nashorn-core = { group = "org.openjdk.nashorn", name = "nashorn-core", version.ref = "nashornVersion" } 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] [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.niuzi.NiuziRedeemCommand
import cn.rtast.fancybot.commands.misc.ShortLinkCommand import cn.rtast.fancybot.commands.misc.ShortLinkCommand
import cn.rtast.fancybot.entity.Config import cn.rtast.fancybot.entity.Config
import cn.rtast.fancybot.entity.enums.ImageType import cn.rtast.fancybot.enums.ImageType
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.enums.WSType
import cn.rtast.fancybot.items.* import cn.rtast.fancybot.items.*
import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.file.ConfigManager
import cn.rtast.fancybot.util.file.NiuziBankManager import cn.rtast.fancybot.util.file.NiuziBankManager
@@ -8,7 +8,7 @@
package cn.rtast.fancybot package cn.rtast.fancybot
import cn.rtast.fancybot.commands.parse.* 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.fancybot.util.initDatabase
import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.entity.* import cn.rtast.rob.entity.*
@@ -8,6 +8,8 @@
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands
import cn.rtast.fancybot.annotations.CommandDescription 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.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.OneBotListener 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>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
listener.sendGroupMessage(message.groupId, args.joinToString(" ")) 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.START_UP_TIME
import cn.rtast.fancybot.annotations.CommandDescription 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.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
@@ -44,5 +46,6 @@ class StatusCommand : BaseCommand() {
.addText("Java版本: $javaVersion / Kotlin版本: $kotlinVersion") .addText("Java版本: $javaVersion / Kotlin版本: $kotlinVersion")
.build() .build()
message.reply(msg) 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.ChatCompletionsResponse
import cn.rtast.fancybot.entity.gpt.LlamaResponse import cn.rtast.fancybot.entity.gpt.LlamaResponse
import cn.rtast.fancybot.entity.gpt.ModelList import cn.rtast.fancybot.entity.gpt.ModelList
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.fancybot.util.str.toJson import cn.rtast.fancybot.util.str.toJson
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
@@ -68,6 +70,7 @@ class AICommand : BaseCommand() {
.build() .build()
nodeMsg.addMessageChain(msg, configManager.selfId) nodeMsg.addMessageChain(msg, configManager.selfId)
listener.sendGroupForwardMsg(message.groupId, nodeMsg.build()) listener.sendGroupForwardMsg(message.groupId, nodeMsg.build())
insertActionRecord(CommandAction.AI, message.sender.userId, "$content-$model-GPT")
} }
} }
@@ -94,5 +97,6 @@ class LlamaCommand : BaseCommand() {
.build() .build()
nodeMsg.addMessageChain(msg, configManager.selfId) nodeMsg.addMessageChain(msg, configManager.selfId)
listener.sendGroupForwardMsg(message.groupId, nodeMsg.build()) 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.annotations.CommandDescription
import cn.rtast.fancybot.entity.wiki.PageInfoResponse import cn.rtast.fancybot.entity.wiki.PageInfoResponse
import cn.rtast.fancybot.entity.wiki.WikipediaResponse import cn.rtast.fancybot.entity.wiki.WikipediaResponse
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
@@ -69,6 +71,8 @@ class WikipediaCommand : BaseCommand() {
.addText("没有查询到指定的wiki页面呢 >>> $title") .addText("没有查询到指定的wiki页面呢 >>> $title")
.build() .build()
message.reply(msg) 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.annotations.CommandDescription
import cn.rtast.fancybot.configManager 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.ArrayMessage
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
@@ -28,5 +30,7 @@ class AntiRevokeCommand : BaseCommand() {
msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n"))) msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n")))
msgList.addAll(getMsg.message) msgList.addAll(getMsg.message)
listener.sendGroupMessage(message.groupId, msgList) 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.GLOTResponse
import cn.rtast.fancybot.entity.compiler.KCSPayload import cn.rtast.fancybot.entity.compiler.KCSPayload
import cn.rtast.fancybot.entity.compiler.KCSResponse import cn.rtast.fancybot.entity.compiler.KCSResponse
import cn.rtast.fancybot.enums.CommandAction
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.file.insertActionRecord
import cn.rtast.fancybot.util.str.toJson import cn.rtast.fancybot.util.str.toJson
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
@@ -64,6 +66,8 @@ class CompilerCommand : BaseCommand() {
listener.sendGroupMessage(message.groupId, msg) listener.sendGroupMessage(message.groupId, msg)
} catch (e: Exception) { } catch (e: Exception) {
message.reply("执行错误: ${e.message}") 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 package cn.rtast.fancybot.commands.misc
import cn.rtast.fancybot.annotations.CommandDescription 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.fancybot.util.randomBooleanWithProbability
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand 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.annotations.CommandDescription
import cn.rtast.fancybot.configManager 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.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
@@ -58,5 +60,6 @@ class SendMailCommand : BaseCommand() {
val target = args.first() val target = args.first()
this.sendMail(target) this.sendMail(target)
message.reply("正在发送邮件, 请查收~(可能会出现在垃圾桶中~)") 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 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 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 import org.jetbrains.exposed.sql.Table
@@ -7,8 +7,8 @@
package cn.rtast.fancybot.entity package cn.rtast.fancybot.entity
import cn.rtast.fancybot.entity.enums.ImageType import cn.rtast.fancybot.enums.ImageType
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.enums.WSType
data class Config( data class Config(
val ncmAPI: String, val ncmAPI: String,
@@ -7,7 +7,7 @@
package cn.rtast.fancybot.entity.gpt package cn.rtast.fancybot.entity.gpt
import cn.rtast.fancybot.entity.enums.GPTUserRole import cn.rtast.fancybot.enums.GPTUserRole
data class ChatCompletionsPayload( data class ChatCompletionsPayload(
val model: String, val model: String,
@@ -7,7 +7,7 @@
package cn.rtast.fancybot.entity.gpt package cn.rtast.fancybot.entity.gpt
import cn.rtast.fancybot.entity.enums.GPTUserRole import cn.rtast.fancybot.enums.GPTUserRole
data class ChatCompletionsResponse( data class ChatCompletionsResponse(
val choices: List<Choice> 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) { enum class CountryList(val chineseName: String) {
China("中国"), UnitedStates("美国"), Russia("俄罗斯"), China("中国"), UnitedStates("美国"), Russia("俄罗斯"),
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.entity.enums package cn.rtast.fancybot.enums
enum class GPTUserRole { enum class GPTUserRole {
user, system, assistant user, system, assistant
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.entity.enums package cn.rtast.fancybot.enums
enum class ImageType(val typeName: String) { enum class ImageType(val typeName: String) {
PNG("png"), JPG("jpg") PNG("png"), JPG("jpg")
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.entity.enums package cn.rtast.fancybot.enums
enum class WSType { enum class WSType {
Client, Server Client, Server
@@ -8,9 +8,10 @@
package cn.rtast.fancybot.util package cn.rtast.fancybot.util
import cn.rtast.fancybot.ROOT_PATH import cn.rtast.fancybot.ROOT_PATH
import cn.rtast.fancybot.entity.db.JrrpTable import cn.rtast.fancybot.db.ActionTable
import cn.rtast.fancybot.entity.db.NiuziBankTable import cn.rtast.fancybot.db.JrrpTable
import cn.rtast.fancybot.entity.db.NiuziTable import cn.rtast.fancybot.db.NiuziBankTable
import cn.rtast.fancybot.db.NiuziTable
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.SchemaUtils
@@ -22,6 +23,7 @@ suspend fun initDatabase() {
SchemaUtils.createMissingTablesAndColumns(JrrpTable) SchemaUtils.createMissingTablesAndColumns(JrrpTable)
SchemaUtils.createMissingTablesAndColumns(NiuziBankTable) SchemaUtils.createMissingTablesAndColumns(NiuziBankTable)
SchemaUtils.createMissingTablesAndColumns(NiuziTable) 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 package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.JrrpRecord import cn.rtast.fancybot.db.JrrpRecord
import cn.rtast.fancybot.entity.db.JrrpTable import cn.rtast.fancybot.db.JrrpTable
import cn.rtast.fancybot.util.isSameDay import cn.rtast.fancybot.util.isSameDay
import cn.rtast.fancybot.util.suspendedTransaction import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert
@@ -7,14 +7,14 @@
package cn.rtast.fancybot.util.file package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.NiuziBankAccount import cn.rtast.fancybot.db.NiuziBankAccount
import cn.rtast.fancybot.entity.db.NiuziBankTable import cn.rtast.fancybot.db.NiuziBankTable
import cn.rtast.fancybot.entity.db.NiuziBankTable.balance import cn.rtast.fancybot.db.NiuziBankTable.balance
import cn.rtast.fancybot.entity.db.NiuziBankTable.interestRate import cn.rtast.fancybot.db.NiuziBankTable.interestRate
import cn.rtast.fancybot.entity.db.NiuziBankTable.nickname import cn.rtast.fancybot.db.NiuziBankTable.nickname
import cn.rtast.fancybot.entity.db.NiuziBankTable.timestamp import cn.rtast.fancybot.db.NiuziBankTable.timestamp
import cn.rtast.fancybot.entity.db.NiuziBankTable.userId import cn.rtast.fancybot.db.NiuziBankTable.userId
import cn.rtast.fancybot.entity.db.NiuziTable import cn.rtast.fancybot.db.NiuziTable
import cn.rtast.fancybot.util.suspendedTransaction import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.selectAll
@@ -7,12 +7,12 @@
package cn.rtast.fancybot.util.file package cn.rtast.fancybot.util.file
import cn.rtast.fancybot.entity.db.Niuzi import cn.rtast.fancybot.db.Niuzi
import cn.rtast.fancybot.entity.db.NiuziTable import cn.rtast.fancybot.db.NiuziTable
import cn.rtast.fancybot.entity.db.NiuziTable.length import cn.rtast.fancybot.db.NiuziTable.length
import cn.rtast.fancybot.entity.db.NiuziTable.nickname import cn.rtast.fancybot.db.NiuziTable.nickname
import cn.rtast.fancybot.entity.db.NiuziTable.timestamp import cn.rtast.fancybot.db.NiuziTable.timestamp
import cn.rtast.fancybot.entity.db.NiuziTable.userId import cn.rtast.fancybot.db.NiuziTable.userId
import cn.rtast.fancybot.util.isSameDay import cn.rtast.fancybot.util.isSameDay
import cn.rtast.fancybot.util.suspendedTransaction import cn.rtast.fancybot.util.suspendedTransaction
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert