diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99108bc..94d1e50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "2.0.10" -ronebotVersion = "1.5.6" +ronebotVersion = "1.5.7" shadowVersion = "8.3.0" okhttpVersion = "5.0.0-alpha.14" exposedVersion = "0.53.0" diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 1279f19..be34f8d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -18,6 +18,10 @@ import cn.rtast.fancybot.commands.QRCodeCommand import cn.rtast.fancybot.commands.RedeemCommand import cn.rtast.fancybot.commands.SignCommand import cn.rtast.fancybot.entity.enums.WSType +import cn.rtast.fancybot.items.BaisiItem +import cn.rtast.fancybot.items.HeisiItem +import cn.rtast.fancybot.items.SetuItem +import cn.rtast.fancybot.util.item.ItemManager import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.initDatabase import cn.rtast.rob.ROneBotFactory @@ -70,7 +74,14 @@ val commands = listOf( AntiRevokeCommand() ) +val items = listOf( + HeisiItem(), + BaisiItem(), + SetuItem() +) + val configManager = ConfigManager() +val itemManager = ItemManager() suspend fun main() { val fancyBot = FancyBot() @@ -84,6 +95,7 @@ suspend fun main() { ROneBotFactory.createServer(port, accessToken, fancyBot) } val commandManager = rob.commandManager - commands.forEach { commandManager.register(it) } initDatabase() + commands.forEach { commandManager.register(it) } + items.forEach { itemManager.register(it) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt index 9836bce..5f961a9 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/AntiRevokeCommand.kt @@ -32,7 +32,7 @@ class AntiRevokeCommand : BaseCommand() { suspend fun getMessageCallback(listener: OBMessage, message: GetMessage) { val msgList = mutableListOf() msgList.add(ArrayMessage(ArrayMessageType.at, ArrayMessage.Data(qq = message.data.sender.userId.toString()))) - msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: "))) + msgList.add(ArrayMessage(ArrayMessageType.text, ArrayMessage.Data(text = "\n被撤回的消息如下: \n"))) msgList.addAll(message.data.message) listener.sendGroupMessage(message.data.groupId!!, msgList) } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/RedeemCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/RedeemCommand.kt index 0aef07f..3f1e251 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/RedeemCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/RedeemCommand.kt @@ -7,9 +7,7 @@ package cn.rtast.fancybot.commands -import cn.rtast.fancybot.entity.Baisi -import cn.rtast.fancybot.entity.Setu -import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.itemManager import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.ob.MessageChain @@ -18,12 +16,6 @@ import cn.rtast.rob.util.ob.OBMessage class RedeemCommand : BaseCommand() { override val commandNames = listOf("/redeem", "/兑换", "/rdm") - private val items = mapOf( - "色图" to 50, - "黑丝" to 60, - "白丝" to 70 - ) - override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { val status = signManager.getStatus(message.sender.userId) if (status == null) { @@ -36,7 +28,8 @@ class RedeemCommand : BaseCommand() { } val item = args.first() if (item == "list" || item == "列表") { - val priceTable = items.entries.joinToString("\n") { (key, value) -> "名称: $key=$value 积分" } + val priceTable = + itemManager.items.joinToString("\n") { "[${it.itemNames.joinToString("|")}]:${it.itemPrice}积分" } val msg = MessageChain.Builder() .addAt(message.sender.userId) .addNewLine() @@ -45,8 +38,8 @@ class RedeemCommand : BaseCommand() { listener.sendGroupMessage(message.groupId, msg) return } - val selectedItemKey = items.keys.find { it == item } - if (selectedItemKey == null) { + val selectedItem = itemManager.items.find { it.itemNames.any { any -> any == item } } + if (selectedItem == null) { val msg = MessageChain.Builder() .addAt(message.sender.userId) .addText("没有找到你想兑换的东西呢") @@ -56,8 +49,8 @@ class RedeemCommand : BaseCommand() { listener.sendGroupMessage(message.groupId, msg) return } - val selectedItemPrice = items[item]!! - if (selectedItemPrice > status?.points!!) { + val selectedItemPrice =selectedItem.itemPrice + if (selectedItemPrice > status.points) { val msg = MessageChain.Builder() .addAt(message.sender.userId) .addText("你的积分不够兑换这个物品呢~") @@ -75,37 +68,6 @@ class RedeemCommand : BaseCommand() { .addText("你花费了 $selectedItemPrice 点积分来兑换奖品, 还剩 $afterStatus 点积分") .build() listener.sendGroupMessage(message.groupId, msg) - when (selectedItemKey) { - "黑丝" -> { - val url = Http.get("https://v2.api-m.com/api/heisi").data - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(url) - .build() - listener.sendGroupMessage(message.groupId, msg) - } - - "色图" -> { - val url = Http.get("https://setu.yuban10703.xyz/setu?r18=1&num=1") - .data.first().urls.original.replace( - "https://i.pximg.net", - "https://proxy.rtast.cn/https/i.pixiv.cat" - ) - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(url) - .build() - listener.sendGroupMessage(message.groupId, msg) - } - - "白丝" -> { - val url = Http.get("https://v2.api-m.com/api/baisi").data - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(url) - .build() - listener.sendGroupMessage(message.groupId, msg) - } - } + selectedItem.redeemGroup(listener, message, afterStatus) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt b/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt index 79a7e74..00aca3d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt @@ -8,13 +8,9 @@ package cn.rtast.fancybot.entity data class Setu( - val data: List + val urls: URLS ) { - data class Data( - val urls: URLS - ) - data class URLS( - val original: String + val large: String ) } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt new file mode 100644 index 0000000..68604ab --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/3 + */ + + +package cn.rtast.fancybot.items + +import cn.rtast.fancybot.entity.Baisi +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.item.Item +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OBMessage + +class BaisiItem : Item() { + override val itemNames = listOf("baisi", "白丝", "bs") + override val itemPrice = 70 + + override suspend fun redeemInGroup(listener: OBMessage, message: GroupMessage, after: Long) { + val url = Http.get("https://v2.api-m.com/api/baisi").data + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addImage(url) + .build() + listener.sendGroupMessage(message.groupId, msg) + + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt new file mode 100644 index 0000000..461ebf2 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt @@ -0,0 +1,29 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/3 + */ + + +package cn.rtast.fancybot.items + +import cn.rtast.fancybot.entity.Baisi +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.item.Item +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OBMessage + +class HeisiItem: Item() { + override val itemNames = listOf("heisi", "黑丝", "hs") + override val itemPrice = 70 + + override suspend fun redeemInGroup(listener: OBMessage, message: GroupMessage, after: Long) { + val url = Http.get("https://v2.api-m.com/api/heisi").data + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addImage(url) + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt new file mode 100644 index 0000000..1fc3a6e --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt @@ -0,0 +1,29 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/3 + */ + + +package cn.rtast.fancybot.items + +import cn.rtast.fancybot.entity.Setu +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.item.Item +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OBMessage + +class SetuItem: Item() { + override val itemNames = listOf("setu", "色图", "st") + override val itemPrice = 80 + + override suspend fun redeemInGroup(listener: OBMessage, message: GroupMessage, after: Long) { + val url = Http.get("https://api.rtast.cn/api/setu").urls.large + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addImage(url) + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} \ 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 new file mode 100644 index 0000000..575b89c --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/util/item/Item.kt @@ -0,0 +1,29 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/3 + */ + + +package cn.rtast.fancybot.util.item + +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.entity.PrivateMessage +import cn.rtast.rob.util.ob.OBMessage + +abstract class Item { + abstract val itemNames: List + abstract val itemPrice: Int + + protected open suspend fun redeemInGroup(listener: OBMessage, message: GroupMessage, after: Long) {} + + protected open suspend fun redeemInPrivate(listener: OBMessage, message: PrivateMessage, after: Long) {} + + suspend fun redeemGroup(listener: OBMessage, message: GroupMessage, after: Long) { + this.redeemInGroup(listener, message, after) + } + + suspend fun redeemPrivate(listener: OBMessage, message: PrivateMessage, after: Long) { + this.redeemInPrivate(listener, message, after) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/item/ItemManager.kt b/src/main/kotlin/cn/rtast/fancybot/util/item/ItemManager.kt new file mode 100644 index 0000000..c488509 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/util/item/ItemManager.kt @@ -0,0 +1,17 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/3 + */ + + +package cn.rtast.fancybot.util.item + +class ItemManager { + + val items = mutableListOf() + + fun register(item: Item) { + items.add(item) + } +} \ No newline at end of file