feat: add r18 setu api
This commit is contained in:
5 files changed
+87
-22
No files matched your search
@@ -75,7 +75,7 @@ val START_UP_TIME = Instant.now().epochSecond
|
||||
val items = listOf(
|
||||
HeisiItem(), BaisiItem(),
|
||||
SetuItem(), NiuziItem(),
|
||||
TenSetuItem()
|
||||
TenSetuItem(), TenSetuR18Item()
|
||||
)
|
||||
|
||||
val commands = listOf(
|
||||
|
||||
+6
-2
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user