feat: add r18 setu api

This commit is contained in:
2024-09-29 21:39:20 +08:00
parent 44e3e093d1
commit 7372724274
5 files changed
+87 -22

No files matched your search

+1 -1
View File
@@ -75,7 +75,7 @@ val START_UP_TIME = Instant.now().epochSecond
val items = listOf(
HeisiItem(), BaisiItem(),
SetuItem(), NiuziItem(),
TenSetuItem()
TenSetuItem(), TenSetuR18Item()
)
val commands = listOf(
@@ -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
@@ -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<String>
) {
data class URLS(
val regular: String,
)
}
@@ -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
@@ -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<MessageChain>()
if (r18) {
val response = Http.get("https://api.rtast.cn/api/setu/v2?size=10")
.fromArrayJson<List<SetuV2>>()
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<List<Setu>>()
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<MessageChain>()
val response = Http.get("https://api.rtast.cn/api/setu?size=10").fromArrayJson<List<Setu>>()
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()
}
}