From 7372724274177e503c8ca94c90d84142ad3dfdf9 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Sun, 29 Sep 2024 21:39:20 +0800 Subject: [PATCH] feat: add r18 setu api --- src/main/kotlin/cn/rtast/fancybot/Const.kt | 2 +- .../rtast/fancybot/entity/{ => setu}/Setu.kt | 8 +- .../cn/rtast/fancybot/entity/setu/SetuV2.kt | 22 ++++++ .../cn/rtast/fancybot/items/SetuItem.kt | 2 +- .../cn/rtast/fancybot/items/TenSetuItem.kt | 75 ++++++++++++++----- 5 files changed, 87 insertions(+), 22 deletions(-) rename src/main/kotlin/cn/rtast/fancybot/entity/{ => setu}/Setu.kt (50%) create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/setu/SetuV2.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index 4f11caa..d20accf 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -75,7 +75,7 @@ val START_UP_TIME = Instant.now().epochSecond val items = listOf( HeisiItem(), BaisiItem(), SetuItem(), NiuziItem(), - TenSetuItem() + TenSetuItem(), TenSetuR18Item() ) val commands = listOf( diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt b/src/main/kotlin/cn/rtast/fancybot/entity/setu/Setu.kt similarity index 50% rename from src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt rename to src/main/kotlin/cn/rtast/fancybot/entity/setu/Setu.kt index 8c6af76..38dc5fe 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/Setu.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/setu/Setu.kt @@ -5,11 +5,15 @@ */ -package cn.rtast.fancybot.entity +package cn.rtast.fancybot.entity.setu + +import com.google.gson.annotations.SerializedName data class Setu( val urls: URLS, - val r18: Boolean + val r18: Boolean, + @SerializedName("author_id") + val authorId: Long, ) { data class URLS( val large: String diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/setu/SetuV2.kt b/src/main/kotlin/cn/rtast/fancybot/entity/setu/SetuV2.kt new file mode 100644 index 0000000..c6d9f43 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/setu/SetuV2.kt @@ -0,0 +1,22 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/29 + */ + + +package cn.rtast.fancybot.entity.setu + +data class SetuV2( + val pid: Long, + val uid: Long, + val title: String, + val author: String, + val urls: URLS, + val r18: Boolean, + val tags: List +) { + data class URLS( + val regular: String, + ) +} \ 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 index bed3ca4..54018ba 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt @@ -7,7 +7,7 @@ package cn.rtast.fancybot.items -import cn.rtast.fancybot.entity.Setu +import cn.rtast.fancybot.entity.setu.Setu import cn.rtast.fancybot.niuziManager import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.item.Item diff --git a/src/main/kotlin/cn/rtast/fancybot/items/TenSetuItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/TenSetuItem.kt index 4399cb9..6e3b137 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/TenSetuItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/TenSetuItem.kt @@ -8,17 +8,57 @@ package cn.rtast.fancybot.items import cn.rtast.fancybot.configManager -import cn.rtast.fancybot.entity.Setu +import cn.rtast.fancybot.entity.setu.Setu +import cn.rtast.fancybot.entity.setu.SetuV2 import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.item.Item import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.fromArrayJson import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.NodeMessageChain import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.asNode import java.net.URI + +private fun getImages(r18: Boolean): NodeMessageChain { + val msg = mutableListOf() + if (r18) { + val response = Http.get("https://api.rtast.cn/api/setu/v2?size=10") + .fromArrayJson>() + msg.add(MessageChain.Builder().addText("因为是R18所以你需要自行访问链接来查看图片~").build()) + response.forEach { + try { + val tempMsg = MessageChain.Builder() + .addText(it.urls.regular) + .addNewLine() + .addText("标题: ${it.title}") + .addNewLine() + .addText("作品ID: ${it.pid}") + .addNewLine() + .addText("作者: ${it.author}(${it.uid})") + .addNewLine() + .addText("标签: ${it.tags.joinToString(" | ")}") + .build() + msg.add(tempMsg) + } catch (_: Exception) { + } + } + } else { + val response = Http.get("https://api.rtast.cn/api/setu?size=10").fromArrayJson>() + response.filter { !it.r18 }.map { it.urls.large }.forEach { + try { + val imageBase64 = URI(it).toURL().readBytes().encodeToBase64() + val tempMsg = MessageChain.Builder().addImage(imageBase64, true).build() + msg.add(tempMsg) + } catch (_: Exception) { + } + } + } + return msg.asNode(configManager.selfId) +} + class TenSetuItem : Item() { override val itemNames = listOf("十张色图") override val itemPrice = 20.0 @@ -28,23 +68,22 @@ class TenSetuItem : Item() { message: GroupMessage, after: Double ): MessageChain.Builder { - val imageMessages = mutableListOf() - val response = Http.get("https://api.rtast.cn/api/setu?size=10").fromArrayJson>() - response.filter { !it.r18 }.map { it.urls.large }.forEach { - try { - val imageBase64 = URI(it).toURL().readBytes().encodeToBase64() - val tempMsg = MessageChain.Builder().addImage(imageBase64, true).build() - imageMessages.add(tempMsg) - } catch (_: Exception) { - } - } - val footerMsg = MessageChain.Builder() - .addText("图片数量可能不足10张~") - .addNewLine() - .addText("因为过滤了R18的图片~") - .build() - imageMessages.add(footerMsg) - message.reply(imageMessages.asNode(configManager.selfId)) + val msg = getImages(false) + message.reply(msg) + return MessageChain.Builder() + } +} + +class TenSetuR18Item : Item() { + override val itemNames = listOf("十张色图r") + override val itemPrice = 50.0 + + override suspend fun redeemInGroup( + listener: OneBotListener, + message: GroupMessage, + after: Double + ): MessageChain.Builder { + message.reply(getImages(true)) return MessageChain.Builder() } } \ No newline at end of file