fix: fix db bug
This commit is contained in:
7 files changed
+49
-38
No files matched your search
@@ -20,6 +20,11 @@ private suspend fun noAccount(message: GroupMessage) {
|
|||||||
message.reply("你还没有银行账户呢, 发送`创建账户`来创建一个账户吧~")
|
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
|
private const val INTEREST_RATE = 0.54
|
||||||
|
|
||||||
@CommandDescription("牛子银行根命令")
|
@CommandDescription("牛子银行根命令")
|
||||||
@@ -59,7 +64,8 @@ class CreateBankAccountCommand : BaseCommand() {
|
|||||||
message.reply("你已经有账户了!")
|
message.reply("你已经有账户了!")
|
||||||
return
|
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("成功创建了一个账户!")
|
message.reply("成功创建了一个账户!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,7 +90,8 @@ class BankTransferCommand : BaseCommand() {
|
|||||||
message.reply("你的牛子长度不够转账!")
|
message.reply("你的牛子长度不够转账!")
|
||||||
return
|
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}")
|
message.reply("转账成功! 你在银行内剩余的牛子长度为: ${result?.balance}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,7 +120,8 @@ class WithdrawCommand : BaseCommand() {
|
|||||||
message.reply("取出的长度必须大于0!")
|
message.reply("取出的长度必须大于0!")
|
||||||
return
|
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)
|
niuziManager.updateLength(message.sender.userId, amount + amount * INTEREST_RATE)
|
||||||
message.reply("取牛子成功, 你现在还剩${result.balance}cm的牛子在银行内")
|
message.reply("取牛子成功, 你现在还剩${result.balance}cm的牛子在银行内")
|
||||||
}
|
}
|
||||||
@@ -143,8 +151,9 @@ class DepositCommand : BaseCommand() {
|
|||||||
message.reply("你身上的牛子不够用啦, 没办法存进银行! >>> ${niuzi.length}")
|
message.reply("你身上的牛子不够用啦, 没办法存进银行! >>> ${niuzi.length}")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
val username = listener.getUserName(message.groupId, message.sender.userId)
|
||||||
val self = niuziManager.updateLength(message.sender.userId, -amount)
|
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")
|
message.reply("存入成功你身上的牛子还有${self?.length}cm 银行账户内还有: ${result.balance}cm")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,16 +14,6 @@ import cn.rtast.rob.util.BaseCommand
|
|||||||
import cn.rtast.rob.util.ob.MessageChain
|
import cn.rtast.rob.util.ob.MessageChain
|
||||||
import cn.rtast.rob.util.ob.OneBotListener
|
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() {
|
class NiuziRankCommand : BaseCommand() {
|
||||||
override val commandNames = listOf("牛子排行榜")
|
override val commandNames = listOf("牛子排行榜")
|
||||||
|
|
||||||
@@ -31,8 +21,7 @@ class NiuziRankCommand : BaseCommand() {
|
|||||||
val allNiuzi = niuziManager.getAllNiuzi().sortedBy { it.length }.reversed()
|
val allNiuzi = niuziManager.getAllNiuzi().sortedBy { it.length }.reversed()
|
||||||
val msg = MessageChain.Builder().addText("牛子长度排行榜如下").addNewLine()
|
val msg = MessageChain.Builder().addText("牛子长度排行榜如下").addNewLine()
|
||||||
allNiuzi.forEach {
|
allNiuzi.forEach {
|
||||||
val userName = getUserInfo(listener, message.groupId, it.userId)
|
msg.addText("[${it.nickname}] | ${it.length}cm").addNewLine()
|
||||||
msg.addText("[$userName] | ${it.length}cm").addNewLine()
|
|
||||||
}
|
}
|
||||||
message.reply(msg.build())
|
message.reply(msg.build())
|
||||||
}
|
}
|
||||||
@@ -46,8 +35,7 @@ class NiuziBankRankCommand : BaseCommand() {
|
|||||||
.sortedBy { it.balance }.reversed()
|
.sortedBy { it.balance }.reversed()
|
||||||
val msg = MessageChain.Builder().addText("牛子银行富豪榜排行如下").addNewLine()
|
val msg = MessageChain.Builder().addText("牛子银行富豪榜排行如下").addNewLine()
|
||||||
allNiuziBankAccounts.forEach {
|
allNiuziBankAccounts.forEach {
|
||||||
val userName = getUserInfo(listener, message.groupId, it.userId)
|
msg.addText("[${it.nickname}] | ${it.balance}cm").addNewLine()
|
||||||
msg.addText("[$userName] | ${it.balance}cm").addNewLine()
|
|
||||||
}
|
}
|
||||||
message.reply(msg.build())
|
message.reply(msg.build())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ class NiuziSignCommand : BaseCommand() {
|
|||||||
message.reply("你今天已经对你的牛子使用了签到啦,明天再来吧~")
|
message.reply("你今天已经对你的牛子使用了签到啦,明天再来吧~")
|
||||||
return
|
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()
|
val msg = MessageChain.Builder()
|
||||||
.addReply(message.messageId)
|
.addReply(message.messageId)
|
||||||
.addText("签到成功~")
|
.addText("签到成功~")
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ object NiuziBankTable: Table("niuzi_bank") {
|
|||||||
val timestamp = long("timestamp")
|
val timestamp = long("timestamp")
|
||||||
val balance = double("balance")
|
val balance = double("balance")
|
||||||
val interestRate = double("interest_rate")
|
val interestRate = double("interest_rate")
|
||||||
|
val nickname = varchar("nickname", 255)
|
||||||
override val primaryKey = PrimaryKey(id)
|
override val primaryKey = PrimaryKey(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,5 +23,6 @@ data class NiuziBankAccount(
|
|||||||
val userId: Long,
|
val userId: Long,
|
||||||
val balance: Double,
|
val balance: Double,
|
||||||
val interestRate: Double,
|
val interestRate: Double,
|
||||||
val timestamp: Long
|
val timestamp: Long,
|
||||||
|
val nickname: String
|
||||||
)
|
)
|
||||||
@@ -14,11 +14,13 @@ object NiuziTable : Table("niuzi") {
|
|||||||
val id = long("id").autoIncrement()
|
val id = long("id").autoIncrement()
|
||||||
val userId = long("userId").uniqueIndex()
|
val userId = long("userId").uniqueIndex()
|
||||||
val timestamp = long("timestamp")
|
val timestamp = long("timestamp")
|
||||||
|
val nickname = varchar("nickname", 255)
|
||||||
override val primaryKey = PrimaryKey(id)
|
override val primaryKey = PrimaryKey(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Niuzi(
|
data class Niuzi(
|
||||||
val userId: Long,
|
val userId: Long,
|
||||||
val length: Double,
|
val length: Double,
|
||||||
val timestamp: Long
|
val timestamp: Long,
|
||||||
|
val nickname: String,
|
||||||
)
|
)
|
||||||
@@ -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
|
||||||
import cn.rtast.fancybot.entity.db.NiuziBankTable.balance
|
import cn.rtast.fancybot.entity.db.NiuziBankTable.balance
|
||||||
import cn.rtast.fancybot.entity.db.NiuziBankTable.interestRate
|
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.timestamp
|
||||||
import cn.rtast.fancybot.entity.db.NiuziBankTable.userId
|
import cn.rtast.fancybot.entity.db.NiuziBankTable.userId
|
||||||
import cn.rtast.fancybot.entity.db.NiuziTable
|
import cn.rtast.fancybot.entity.db.NiuziTable
|
||||||
@@ -29,55 +30,58 @@ class NiuziBankManager {
|
|||||||
it[userId],
|
it[userId],
|
||||||
it[balance],
|
it[balance],
|
||||||
it[interestRate],
|
it[interestRate],
|
||||||
it[timestamp]
|
it[timestamp],
|
||||||
|
it[nickname]
|
||||||
)
|
)
|
||||||
}.singleOrNull()
|
}.singleOrNull()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun increaseBalance(id: Long, amount: Double) {
|
private suspend fun increaseBalance(id: Long, amount: Double, username: String) {
|
||||||
val current = this.getUser(id)
|
val current = this.getUser(id)
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
NiuziBankTable.update({ userId eq id }) {
|
NiuziBankTable.update({ userId eq id }) {
|
||||||
it[balance] = current?.balance!! + amount
|
it[balance] = current?.balance!! + amount
|
||||||
it[NiuziTable.timestamp] = Instant.now().epochSecond
|
it[NiuziTable.timestamp] = Instant.now().epochSecond
|
||||||
|
it[nickname] = username
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun decreaseBalance(id: Long, amount: Double) {
|
private suspend fun decreaseBalance(id: Long, amount: Double, username: String) {
|
||||||
this.increaseBalance(id, -amount)
|
this.increaseBalance(id, -amount, username)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun createBlankAccount(id: Long) {
|
suspend fun createBlankAccount(id: Long, username: String) {
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
NiuziBankTable.insert {
|
NiuziBankTable.insert {
|
||||||
it[userId] = id
|
it[userId] = id
|
||||||
it[balance] = 0.0
|
it[balance] = 0.0
|
||||||
it[timestamp] = Instant.now().epochSecond
|
it[timestamp] = Instant.now().epochSecond
|
||||||
it[interestRate] = 0.54
|
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 {
|
suspendedTransaction {
|
||||||
this.decreaseBalance(id, amount)
|
this.decreaseBalance(id, amount, username)
|
||||||
}
|
}
|
||||||
return this.getUser(id)!!
|
return this.getUser(id)!!
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun deposit(id: Long, amount: Double): NiuziBankAccount {
|
suspend fun deposit(id: Long, amount: Double, username: String): NiuziBankAccount {
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
this.increaseBalance(id, amount)
|
this.increaseBalance(id, amount, username)
|
||||||
}
|
}
|
||||||
return this.getUser(id)!!
|
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 {
|
suspendedTransaction {
|
||||||
this.decreaseBalance(from, amount)
|
this.decreaseBalance(from, amount, username)
|
||||||
this.increaseBalance(target, amount)
|
this.increaseBalance(target, amount, username)
|
||||||
}
|
}
|
||||||
return this.getUser(from)
|
return this.getUser(from)
|
||||||
}
|
}
|
||||||
@@ -85,6 +89,6 @@ class NiuziBankManager {
|
|||||||
suspend fun getAllAccount(): List<NiuziBankAccount> =
|
suspend fun getAllAccount(): List<NiuziBankAccount> =
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
NiuziBankTable.selectAll()
|
NiuziBankTable.selectAll()
|
||||||
.map { NiuziBankAccount(it[userId], it[balance], it[interestRate], it[timestamp]) }
|
.map { NiuziBankAccount(it[userId], it[balance], it[interestRate], it[timestamp], it[nickname]) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,7 @@ package cn.rtast.fancybot.util.file
|
|||||||
import cn.rtast.fancybot.entity.db.Niuzi
|
import cn.rtast.fancybot.entity.db.Niuzi
|
||||||
import cn.rtast.fancybot.entity.db.NiuziTable
|
import cn.rtast.fancybot.entity.db.NiuziTable
|
||||||
import cn.rtast.fancybot.entity.db.NiuziTable.length
|
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.timestamp
|
||||||
import cn.rtast.fancybot.entity.db.NiuziTable.userId
|
import cn.rtast.fancybot.entity.db.NiuziTable.userId
|
||||||
import cn.rtast.fancybot.util.isSameDay
|
import cn.rtast.fancybot.util.isSameDay
|
||||||
@@ -44,8 +45,9 @@ class NiuziManager {
|
|||||||
|
|
||||||
suspend fun getUser(id: Long): Niuzi? =
|
suspend fun getUser(id: Long): Niuzi? =
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
NiuziTable.selectAll().where { userId eq id }.map { Niuzi(it[userId], it[length], it[timestamp]) }
|
NiuziTable.selectAll().where { userId eq id }.map {
|
||||||
.singleOrNull()
|
Niuzi(it[userId], it[length], it[timestamp], it[nickname])
|
||||||
|
}.singleOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun isSigned(id: Long): Boolean {
|
suspend fun isSigned(id: Long): Boolean {
|
||||||
@@ -53,7 +55,7 @@ class NiuziManager {
|
|||||||
return record?.timestamp?.isSameDay(Instant.now().epochSecond) ?: false
|
return record?.timestamp?.isSameDay(Instant.now().epochSecond) ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun sign(id: Long): Pair<Double, Niuzi?> {
|
suspend fun sign(id: Long, username: String): Pair<Double, Niuzi?> {
|
||||||
val randomLength = Random.nextDouble(1.0, 10.0)
|
val randomLength = Random.nextDouble(1.0, 10.0)
|
||||||
if (getUser(id) == null) {
|
if (getUser(id) == null) {
|
||||||
suspendedTransaction {
|
suspendedTransaction {
|
||||||
@@ -61,6 +63,7 @@ class NiuziManager {
|
|||||||
it[userId] = id
|
it[userId] = id
|
||||||
it[timestamp] = Instant.now().epochSecond
|
it[timestamp] = Instant.now().epochSecond
|
||||||
it[length] = 0.0
|
it[length] = 0.0
|
||||||
|
it[nickname] = username
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,5 +105,7 @@ class NiuziManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getAllNiuzi(): List<Niuzi> =
|
suspend fun getAllNiuzi(): List<Niuzi> =
|
||||||
suspendedTransaction { NiuziTable.selectAll().map { Niuzi(it[userId], it[length], it[timestamp]) } }
|
suspendedTransaction {
|
||||||
|
NiuziTable.selectAll().map { Niuzi(it[userId], it[length], it[timestamp], it[nickname]) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user