From ef7e3bf1adba4764f356c3996fadd28c1fb20363 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Thu, 26 Sep 2024 19:16:16 +0800 Subject: [PATCH] fix: fix db bug --- .../commands/niuzi/NiuziBankCommand.kt | 17 ++++++++--- .../commands/niuzi/NiuziRankCommand.kt | 16 ++-------- .../commands/niuzi/NiuziSignCommand.kt | 3 +- .../fancybot/entity/db/NiuziBankTable.kt | 4 ++- .../cn/rtast/fancybot/entity/db/NiuziTable.kt | 4 ++- .../fancybot/util/file/NiuziBankManager.kt | 30 +++++++++++-------- .../rtast/fancybot/util/file/NiuziManager.kt | 13 +++++--- 7 files changed, 49 insertions(+), 38 deletions(-) diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziBankCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziBankCommand.kt index ed2e636..419b87e 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziBankCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziBankCommand.kt @@ -20,6 +20,11 @@ private suspend fun noAccount(message: GroupMessage) { message.reply("你还没有银行账户呢, 发送`创建账户`来创建一个账户吧~") } +suspend fun OneBotListener.getUserName(groupId: Long, userId: Long): String { + val info = this.getGroupMemberInfo(groupId, userId) + return info.card ?: info.nickname +} + private const val INTEREST_RATE = 0.54 @CommandDescription("牛子银行根命令") @@ -59,7 +64,8 @@ class CreateBankAccountCommand : BaseCommand() { message.reply("你已经有账户了!") return } - niuziBankManager.createBlankAccount(message.sender.userId) + val userInfo = listener.getGroupMemberInfo(message.groupId, message.sender.userId) + niuziBankManager.createBlankAccount(message.sender.userId, userInfo.card ?: userInfo.nickname) message.reply("成功创建了一个账户!") } } @@ -84,7 +90,8 @@ class BankTransferCommand : BaseCommand() { message.reply("你的牛子长度不够转账!") return } - val result = niuziBankManager.transfer(message.sender.userId, target, amount) + val username = listener.getUserName(message.groupId, message.sender.userId) + val result = niuziBankManager.transfer(message.sender.userId, target, amount, username) message.reply("转账成功! 你在银行内剩余的牛子长度为: ${result?.balance}") } } @@ -113,7 +120,8 @@ class WithdrawCommand : BaseCommand() { message.reply("取出的长度必须大于0!") return } - val result = niuziBankManager.withdraw(message.sender.userId, amount) + val username = listener.getUserName(message.groupId, message.sender.userId) + val result = niuziBankManager.withdraw(message.sender.userId, amount, username) niuziManager.updateLength(message.sender.userId, amount + amount * INTEREST_RATE) message.reply("取牛子成功, 你现在还剩${result.balance}cm的牛子在银行内") } @@ -143,8 +151,9 @@ class DepositCommand : BaseCommand() { message.reply("你身上的牛子不够用啦, 没办法存进银行! >>> ${niuzi.length}") return } + val username = listener.getUserName(message.groupId, message.sender.userId) val self = niuziManager.updateLength(message.sender.userId, -amount) - val result = niuziBankManager.deposit(message.sender.userId, amount) + val result = niuziBankManager.deposit(message.sender.userId, amount, username) message.reply("存入成功你身上的牛子还有${self?.length}cm 银行账户内还有: ${result.balance}cm") } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRankCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRankCommand.kt index 83e19fc..eee5e5b 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRankCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRankCommand.kt @@ -14,16 +14,6 @@ import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OneBotListener - -private suspend fun getUserInfo(listener: OneBotListener, groupId: Long, userId: Long): String { - try { - val info = listener.getGroupMemberInfo(groupId, userId) - return info.card ?: info.nickname - } catch (_: NullPointerException) { - return userId.toString() - } -} - class NiuziRankCommand : BaseCommand() { override val commandNames = listOf("牛子排行榜") @@ -31,8 +21,7 @@ class NiuziRankCommand : BaseCommand() { val allNiuzi = niuziManager.getAllNiuzi().sortedBy { it.length }.reversed() val msg = MessageChain.Builder().addText("牛子长度排行榜如下").addNewLine() allNiuzi.forEach { - val userName = getUserInfo(listener, message.groupId, it.userId) - msg.addText("[$userName] | ${it.length}cm").addNewLine() + msg.addText("[${it.nickname}] | ${it.length}cm").addNewLine() } message.reply(msg.build()) } @@ -46,8 +35,7 @@ class NiuziBankRankCommand : BaseCommand() { .sortedBy { it.balance }.reversed() val msg = MessageChain.Builder().addText("牛子银行富豪榜排行如下").addNewLine() allNiuziBankAccounts.forEach { - val userName = getUserInfo(listener, message.groupId, it.userId) - msg.addText("[$userName] | ${it.balance}cm").addNewLine() + msg.addText("[${it.nickname}] | ${it.balance}cm").addNewLine() } message.reply(msg.build()) } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziSignCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziSignCommand.kt index ede0033..5d0cf52 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziSignCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziSignCommand.kt @@ -23,7 +23,8 @@ class NiuziSignCommand : BaseCommand() { message.reply("你今天已经对你的牛子使用了签到啦,明天再来吧~") return } - val afterStatus = niuziManager.sign(message.sender.userId) + val username = listener .getUserName(message.groupId, message.sender.userId) + val afterStatus = niuziManager.sign(message.sender.userId, username) val msg = MessageChain.Builder() .addReply(message.messageId) .addText("签到成功~") diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziBankTable.kt b/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziBankTable.kt index 2b36ac7..64b6ea2 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziBankTable.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziBankTable.kt @@ -15,6 +15,7 @@ object NiuziBankTable: Table("niuzi_bank") { val timestamp = long("timestamp") val balance = double("balance") val interestRate = double("interest_rate") + val nickname = varchar("nickname", 255) override val primaryKey = PrimaryKey(id) } @@ -22,5 +23,6 @@ data class NiuziBankAccount( val userId: Long, val balance: Double, val interestRate: Double, - val timestamp: Long + val timestamp: Long, + val nickname: String ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziTable.kt b/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziTable.kt index 68abd0f..fb8cf71 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziTable.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/db/NiuziTable.kt @@ -14,11 +14,13 @@ object NiuziTable : Table("niuzi") { val id = long("id").autoIncrement() val userId = long("userId").uniqueIndex() val timestamp = long("timestamp") + val nickname = varchar("nickname", 255) override val primaryKey = PrimaryKey(id) } data class Niuzi( val userId: Long, val length: Double, - val timestamp: Long + val timestamp: Long, + val nickname: String, ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziBankManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziBankManager.kt index 153a815..1c13710 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziBankManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziBankManager.kt @@ -11,6 +11,7 @@ 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 @@ -29,55 +30,58 @@ class NiuziBankManager { it[userId], it[balance], it[interestRate], - it[timestamp] + it[timestamp], + it[nickname] ) }.singleOrNull() } } - private suspend fun increaseBalance(id: Long, amount: Double) { + private suspend fun increaseBalance(id: Long, amount: Double, username: String) { val current = this.getUser(id) suspendedTransaction { NiuziBankTable.update({ userId eq id }) { it[balance] = current?.balance!! + amount it[NiuziTable.timestamp] = Instant.now().epochSecond + it[nickname] = username } } } - private suspend fun decreaseBalance(id: Long, amount: Double) { - this.increaseBalance(id, -amount) + private suspend fun decreaseBalance(id: Long, amount: Double, username: String) { + this.increaseBalance(id, -amount, username) } - suspend fun createBlankAccount(id: Long) { + suspend fun createBlankAccount(id: Long, username: String) { suspendedTransaction { NiuziBankTable.insert { it[userId] = id it[balance] = 0.0 it[timestamp] = Instant.now().epochSecond it[interestRate] = 0.54 + it[nickname] = username } } } - suspend fun withdraw(id: Long, amount: Double): NiuziBankAccount { + suspend fun withdraw(id: Long, amount: Double, username: String): NiuziBankAccount { suspendedTransaction { - this.decreaseBalance(id, amount) + this.decreaseBalance(id, amount, username) } return this.getUser(id)!! } - suspend fun deposit(id: Long, amount: Double): NiuziBankAccount { + suspend fun deposit(id: Long, amount: Double, username: String): NiuziBankAccount { suspendedTransaction { - this.increaseBalance(id, amount) + this.increaseBalance(id, amount, username) } return this.getUser(id)!! } - suspend fun transfer(from: Long, target: Long, amount: Double): NiuziBankAccount? { + suspend fun transfer(from: Long, target: Long, amount: Double, username: String): NiuziBankAccount? { suspendedTransaction { - this.decreaseBalance(from, amount) - this.increaseBalance(target, amount) + this.decreaseBalance(from, amount, username) + this.increaseBalance(target, amount, username) } return this.getUser(from) } @@ -85,6 +89,6 @@ class NiuziBankManager { suspend fun getAllAccount(): List = suspendedTransaction { NiuziBankTable.selectAll() - .map { NiuziBankAccount(it[userId], it[balance], it[interestRate], it[timestamp]) } + .map { NiuziBankAccount(it[userId], it[balance], it[interestRate], it[timestamp], it[nickname]) } } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt index c69327e..3f620c8 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt @@ -10,6 +10,7 @@ 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.util.isSameDay @@ -44,8 +45,9 @@ class NiuziManager { suspend fun getUser(id: Long): Niuzi? = suspendedTransaction { - NiuziTable.selectAll().where { userId eq id }.map { Niuzi(it[userId], it[length], it[timestamp]) } - .singleOrNull() + NiuziTable.selectAll().where { userId eq id }.map { + Niuzi(it[userId], it[length], it[timestamp], it[nickname]) + }.singleOrNull() } suspend fun isSigned(id: Long): Boolean { @@ -53,7 +55,7 @@ class NiuziManager { return record?.timestamp?.isSameDay(Instant.now().epochSecond) ?: false } - suspend fun sign(id: Long): Pair { + suspend fun sign(id: Long, username: String): Pair { val randomLength = Random.nextDouble(1.0, 10.0) if (getUser(id) == null) { suspendedTransaction { @@ -61,6 +63,7 @@ class NiuziManager { it[userId] = id it[timestamp] = Instant.now().epochSecond it[length] = 0.0 + it[nickname] = username } } } @@ -102,5 +105,7 @@ class NiuziManager { } suspend fun getAllNiuzi(): List = - suspendedTransaction { NiuziTable.selectAll().map { Niuzi(it[userId], it[length], it[timestamp]) } } + suspendedTransaction { + NiuziTable.selectAll().map { Niuzi(it[userId], it[length], it[timestamp], it[nickname]) } + } } \ No newline at end of file