From 8fc6dd644328bca13ac918366c4bc328639d1638 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Tue, 24 Sep 2024 14:46:06 +0800 Subject: [PATCH] feat: merge func --- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 13 ++-- .../commands/record/MyPointCommand.kt | 53 ------------- .../fancybot/commands/record/NiuziCommand.kt | 72 +++++------------- .../fancybot/commands/record/RedeemCommand.kt | 16 ++-- .../fancybot/commands/record/SignCommand.kt | 38 ---------- .../cn/rtast/fancybot/items/BaisiItem.kt | 4 +- .../cn/rtast/fancybot/items/HeisiItem.kt | 4 +- .../cn/rtast/fancybot/items/SetuItem.kt | 4 +- .../rtast/fancybot/util/file/NiuziManager.kt | 11 +++ .../rtast/fancybot/util/file/SignManager.kt | 76 ------------------- .../cn/rtast/fancybot/util/item/Item.kt | 13 +--- 11 files changed, 53 insertions(+), 251 deletions(-) delete mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt delete mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/record/SignCommand.kt delete mode 100644 src/main/kotlin/cn/rtast/fancybot/util/file/SignManager.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index a0d84c6..8ac4745 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -27,7 +27,6 @@ import cn.rtast.fancybot.items.HeisiItem import cn.rtast.fancybot.items.SetuItem import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.file.NiuziManager -import cn.rtast.fancybot.util.file.SignManager import cn.rtast.fancybot.util.initDatabase import cn.rtast.fancybot.util.item.ItemManager import cn.rtast.fancybot.util.str.fromJson @@ -162,7 +161,6 @@ class FancyBot : OneBotListener { val configManager = ConfigManager() val itemManager = ItemManager() -val signManager = SignManager() val niuziManager = NiuziManager() val items = listOf( @@ -173,11 +171,9 @@ val items = listOf( val commands = listOf( EchoCommand(), JrrpCommand(), - MusicCommand(), SignCommand(), - RedeemCommand(), MyPointCommand(), - HitokotoCommand(), FKXQSCommand(), - QRCodeCommand(), AntiRevokeCommand(), - MCPingCommand(), HelpCommand(), + RedeemCommand(), HitokotoCommand(), + FKXQSCommand(), QRCodeCommand(), + AntiRevokeCommand(), MCPingCommand(), WeatherCommand(), CigaretteCommand(), RemakeCommand(), PixivCommand(), RUACommand(), NslookupCommand(), @@ -193,7 +189,8 @@ val commands = listOf( TenSetuCommand(), ShotSelfCommand(), ShotOtherCommand(), ReverseGIFCommand(), NiuziTransferCommand(), NiuziQueryCommand(), - GenshinCommand() + GenshinCommand(), HelpCommand(), + MusicCommand(), ) val START_UP_TIME = Instant.now().epochSecond diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt deleted file mode 100644 index 109b548..0000000 --- a/src/main/kotlin/cn/rtast/fancybot/commands/record/MyPointCommand.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2024 RTAkland - * Author: RTAkland - * Date: 2024/9/4 - */ - - -package cn.rtast.fancybot.commands.record - -import cn.rtast.fancybot.configManager -import cn.rtast.fancybot.signManager -import cn.rtast.rob.entity.GroupMessage -import cn.rtast.rob.enums.UserRole -import cn.rtast.rob.util.BaseCommand -import cn.rtast.rob.util.ob.MessageChain -import cn.rtast.rob.util.ob.OneBotListener - -class MyPointCommand : BaseCommand() { - override val commandNames = listOf("/我的点数", "/mp") - - override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { - // query target's point - if (args.isNotEmpty() && (message.sender.role == UserRole.admin || message.sender.userId in configManager.admins)) { - val targetId = args.first().toLong() - val targetData = signManager.getStatus(targetId) - val msg = MessageChain.Builder().addAt(message.sender.userId) - - if (targetData == null) { - msg.addText("用户不存在, 需要先签到一次才能查询点数呢~") - } else { - msg.addText("用户: ${targetData.id} 的点数有: ${targetData.points}") - } - listener.sendGroupMessage(message.groupId, msg.build()) - return - } - // query self point - val status = signManager.getStatus(message.sender.userId) - if (status == null) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你还没有签到过呢! 先发送‘/签到’再来查询吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) - return - } else { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你当前的点数为: ${status.points}") - .build() - listener.sendGroupMessage(message.groupId, msg) - } - } -} diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/record/NiuziCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/record/NiuziCommand.kt index cd56dd4..bbcb4fa 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/record/NiuziCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/record/NiuziCommand.kt @@ -15,20 +15,16 @@ import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OneBotListener class NiuziSignCommand : BaseCommand() { - override val commandNames = listOf("牛子签到") + override val commandNames = listOf("牛子签到", "签到") override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (niuziManager.isSigned(message.sender.userId)) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你今天已经对你的牛子使用了签到啦,明天再来吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你今天已经对你的牛子使用了签到啦,明天再来吧~") return } val afterStatus = niuziManager.sign(message.sender.userId) val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("签到成功~") .addNewLine() .addText("你的牛子增加了${afterStatus.first}cm~ 总长度为: ${afterStatus.second?.length}") @@ -42,11 +38,7 @@ class JiJianCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("发送`击剑 @xxx`即可对某人进行击剑") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("发送`击剑 @xxx`即可对某人进行击剑") return } @@ -54,7 +46,7 @@ class JiJianCommand : BaseCommand() { val targetId = target.qq!!.toLong() if (targetId == 0L) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("你的只有一根牛子,他们牛子太多啦你战胜不了他们的~") .addNewLine() .addText("所以你不能和他们击剑~") @@ -63,54 +55,30 @@ class JiJianCommand : BaseCommand() { return } if (message.sender.userId == targetId) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你不能和自己击剑啊") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你不能和自己击剑啊") return } if (!niuziManager.exists(message.sender.userId)) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你还没有牛子呢, 发送`牛子签到`领取你的牛子吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你还没有牛子呢, 发送`牛子签到`领取你的牛子吧~") return } if (!niuziManager.exists(targetId)) { - val msg = MessageChain.Builder() - .addAt(targetId) - .addText("对方还没有牛子呢, 提醒他领取一根牛子吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("对方还没有牛子呢, 提醒他领取一根牛子吧~") return } if (niuziManager.getUser(message.sender.userId)?.length!! < 0.0) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你的牛子已经凹进去了没办法进行击剑~发送`牛子签到来增加你的牛子长度吧~`") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你的牛子已经凹进去了没办法进行击剑~发送`牛子签到`来增加你的牛子长度吧~") return } if (niuziManager.getUser(targetId)?.length!! < 0.0) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("他已经没有牛子啦!(他的牛子已经凹进去了!!)你不能和他击剑") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("他已经没有牛子啦!(他的牛子已经凹进去了!!)你不能和他击剑") return } val result = niuziManager.jijian(message.sender.userId, targetId) if (result.first) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你以已绝对的长度在这场击剑中获胜了~, 你的牛子增加了${result.second}cm") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你以已绝对的长度在这场击剑中获胜了~, 你的牛子增加了${result.second}cm") } else { val msg = MessageChain.Builder() .addAt(message.sender.userId) @@ -124,16 +92,12 @@ class JiJianCommand : BaseCommand() { } class MyNiuziCommand : BaseCommand() { - override val commandNames = listOf("我的牛子") + override val commandNames = listOf("我的牛子", "/mp", "mp") override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { val niuzi = niuziManager.getUser(message.sender.userId) if (niuzi == null) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你还没有牛子呢, 发送`牛子签到`来领取一根专属于你的牛子吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply("你还没有牛子呢, 发送`牛子签到`来领取一根专属于你的牛子吧~") return } val msg = MessageChain.Builder() @@ -153,7 +117,7 @@ class MyNiuziCommand : BaseCommand() { } class NiuziTransferCommand : BaseCommand() { - override val commandNames = listOf("牛子转账") + override val commandNames = listOf("牛子转账", "转账", "/zz") override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { @@ -188,10 +152,14 @@ class NiuziTransferCommand : BaseCommand() { } class NiuziQueryCommand : BaseCommand() { - override val commandNames = listOf("牛子查询") + override val commandNames = listOf("牛子查询", "nq") override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { - val target = args.last().toLong() + if (args.isEmpty()) { + message.reply("输入`牛子查询 @某人`即可查询他的牛子长度") + return + } + val target = message.message.find { it.type == ArrayMessageType.at }?.data?.qq!!.toLong() val targetNiuzi = niuziManager.getUser(target) if (targetNiuzi == null) { message.reply("他还没有牛子") diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/record/RedeemCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/record/RedeemCommand.kt index 593b55f..0b75bcb 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/record/RedeemCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/record/RedeemCommand.kt @@ -8,7 +8,7 @@ package cn.rtast.fancybot.commands.record import cn.rtast.fancybot.itemManager -import cn.rtast.fancybot.signManager +import cn.rtast.fancybot.niuziManager import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.ob.MessageChain @@ -25,12 +25,12 @@ class RedeemCommand : BaseCommand() { .addNewLine() .addText("发送 /rdm list 即可查看所有可兑换的物品~") .addNewLine() - .addText("发送 /mp 可以查看自己拥有的点数~") + .addText("发送 `我的牛子` 可以查看自己的牛子长度~") .build() listener.sendGroupMessage(message.groupId, msg) return } - val status = signManager.getStatus(message.sender.userId) + val status = niuziManager.getUser(message.sender.userId) if (status == null) { val msg = MessageChain.Builder() .addAt(message.sender.userId) @@ -63,22 +63,22 @@ class RedeemCommand : BaseCommand() { return } val selectedItemPrice = selectedItem.itemPrice - if (selectedItemPrice > status.points) { + if (selectedItemPrice > status.length) { val msg = MessageChain.Builder() .addAt(message.sender.userId) - .addText("你的积分不够兑换这个物品呢~") + .addText("你的牛子长度不够兑换这个物品呢~") .addNewLine() - .addText("你有: ${status.points}个积分, 兑换需要: $selectedItemPrice 个积分~\"") + .addText("你有: ${status.length}cm, 兑换需要: $selectedItemPrice cm~\"") .build() listener.sendGroupMessage(message.groupId, msg) return } - val afterStatus = signManager.redeemItem(message.sender.userId, selectedItemPrice)?.points!! + val afterStatus = niuziManager.redeemItem(message.sender.userId, selectedItemPrice)?.length!! val msg = MessageChain.Builder() .addAt(message.sender.userId) .addText("兑换成功正在发送奖品中~") .addNewLine() - .addText("你花费了 $selectedItemPrice 点积分来兑换奖品, 还剩 $afterStatus 点积分") + .addText("你花费了${selectedItemPrice}cm来兑换奖品, 还剩${afterStatus}cm") .build() listener.sendGroupMessage(message.groupId, msg) selectedItem.redeemGroup(listener, message, afterStatus) diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/record/SignCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/record/SignCommand.kt deleted file mode 100644 index a2590da..0000000 --- a/src/main/kotlin/cn/rtast/fancybot/commands/record/SignCommand.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2024 RTAkland - * Author: RTAkland - * Date: 2024/8/30 - */ - - -package cn.rtast.fancybot.commands.record - -import cn.rtast.fancybot.signManager -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 - - -class SignCommand : BaseCommand() { - override val commandNames = listOf("/签到", "/sign") - - override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { - if (signManager.isSigned(message.sender.userId)) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你今天已经签到过啦, 明天再来吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) - return - } - val randomPoint = signManager.sign(message.sender.userId) - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("你获得了 $randomPoint 点分数!") - .addNewLine() - .addText("发送‘/我的点数’ 或者 ‘/mp’ 即可查看当前的点数") - .build() - listener.sendGroupMessage(message.groupId, msg) - } -} diff --git a/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt index c23b52a..5d350a3 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt @@ -16,9 +16,9 @@ import cn.rtast.rob.util.ob.OneBotListener class BaisiItem : Item() { override val itemNames = listOf("baisi", "白丝", "bs") - override val itemPrice = 70 + override val itemPrice = 5.0 - override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Long) { + override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { val url = Http.get("https://v2.api-m.com/api/baisi").data val msg = MessageChain.Builder() .addAt(message.sender.userId) diff --git a/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt index ae61f2b..37acf15 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt @@ -16,9 +16,9 @@ import cn.rtast.rob.util.ob.OneBotListener class HeisiItem : Item() { override val itemNames = listOf("heisi", "黑丝", "hs") - override val itemPrice = 70 + override val itemPrice = 5.0 - override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Long) { + override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { val url = Http.get("https://v2.api-m.com/api/heisi").data val msg = MessageChain.Builder() .addAt(message.sender.userId) diff --git a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt index 124b481..3501fd6 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt @@ -17,9 +17,9 @@ import cn.rtast.rob.util.ob.OneBotListener class SetuItem : Item() { override val itemNames = listOf("setu", "色图", "st") - override val itemPrice = 80 + override val itemPrice = 10.0 - override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Long) { + override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { val url = Http.get("https://api.rtast.cn/api/setu") .fromArrayJson>().first().urls.large val msg = MessageChain.Builder() 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 d2c02fb..34b65ea 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/file/NiuziManager.kt @@ -12,6 +12,7 @@ import cn.rtast.fancybot.entity.db.NiuziTable import cn.rtast.fancybot.entity.db.NiuziTable.length import cn.rtast.fancybot.entity.db.NiuziTable.timestamp import cn.rtast.fancybot.entity.db.NiuziTable.userId +import cn.rtast.fancybot.entity.db.SignTable import cn.rtast.fancybot.util.isSameDay import cn.rtast.fancybot.util.suspendedTransaction import org.jetbrains.exposed.sql.insert @@ -95,4 +96,14 @@ class NiuziManager { } return success to randomLength } + + suspend fun redeemItem(id: Long, itemPrice: Double): Niuzi? { + val current = getUser(id) + suspendedTransaction { + NiuziTable.update({ userId eq id }) { + it[length] = current?.length!! - itemPrice + } + } + return getUser(id) + } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/file/SignManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/file/SignManager.kt deleted file mode 100644 index e4d2c31..0000000 --- a/src/main/kotlin/cn/rtast/fancybot/util/file/SignManager.kt +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2024 RTAkland - * Author: RTAkland - * Date: 2024/8/30 - */ - - -package cn.rtast.fancybot.util.file - -import cn.rtast.fancybot.entity.db.JrrpRecord -import cn.rtast.fancybot.entity.db.SignTable -import cn.rtast.fancybot.entity.db.SignTable.point -import cn.rtast.fancybot.entity.db.SignTable.timestamp -import cn.rtast.fancybot.entity.db.SignTable.userId -import cn.rtast.fancybot.util.isSameDay -import cn.rtast.fancybot.util.suspendedTransaction -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.update -import java.time.Instant -import kotlin.random.Random - -class SignManager { - - private suspend fun getRecord(id: Long): JrrpRecord? { - return suspendedTransaction { - SignTable.selectAll().where { userId eq id }.map { - JrrpRecord( - it[userId], - it[timestamp], - it[point], - ) - }.singleOrNull() - } - } - - suspend fun isSigned(id: Long): Boolean { - val record = getRecord(id) - return record?.timestamp?.isSameDay(Instant.now().epochSecond) ?: false - } - - suspend fun sign(id: Long): Long { - val randomPoint = Random.nextLong(0, 101) - if (getRecord(id) == null) { - suspendedTransaction { - SignTable.insert { - it[userId] = id - it[timestamp] = Instant.now().epochSecond - it[point] = 0 - } - } - } - val record = getRecord(id) - suspendedTransaction { - SignTable.update({ userId eq id }) { - it[point] = record?.points!! + randomPoint - it[timestamp] = Instant.now().epochSecond - } - } - return randomPoint - } - - suspend fun getStatus(id: Long): JrrpRecord? { - return getRecord(id) - } - - suspend fun redeemItem(id: Long, itemPrice: Int): JrrpRecord? { - val current = getRecord(id) - suspendedTransaction { - SignTable.update({ userId eq id }) { - it[point] = current?.points!! - itemPrice - } - } - return getRecord(id) - } -} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/item/Item.kt b/src/main/kotlin/cn/rtast/fancybot/util/item/Item.kt index 6f97677..b7d7f12 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/item/Item.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/item/Item.kt @@ -8,22 +8,15 @@ package cn.rtast.fancybot.util.item import cn.rtast.rob.entity.GroupMessage -import cn.rtast.rob.entity.PrivateMessage import cn.rtast.rob.util.ob.OneBotListener abstract class Item { abstract val itemNames: List - abstract val itemPrice: Int + abstract val itemPrice: Double - protected open suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Long) {} + protected open suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) {} - protected open suspend fun redeemInPrivate(listener: OneBotListener, message: PrivateMessage, after: Long) {} - - suspend fun redeemGroup(listener: OneBotListener, message: GroupMessage, after: Long) { + suspend fun redeemGroup(listener: OneBotListener, message: GroupMessage, after: Double) { this.redeemInGroup(listener, message, after) } - - suspend fun redeemPrivate(listener: OneBotListener, message: PrivateMessage, after: Long) { - this.redeemInPrivate(listener, message, after) - } } \ No newline at end of file