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( val items = listOf(
HeisiItem(), BaisiItem(), HeisiItem(), BaisiItem(),
SetuItem(), NiuziItem(), SetuItem(), NiuziItem(),
TenSetuItem() TenSetuItem(), TenSetuR18Item()
) )
val commands = listOf( 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( data class Setu(
val urls: URLS, val urls: URLS,
val r18: Boolean val r18: Boolean,
@SerializedName("author_id")
val authorId: Long,
) { ) {
data class URLS( data class URLS(
val large: String 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 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.niuziManager
import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.item.Item import cn.rtast.fancybot.util.item.Item
@@ -8,17 +8,57 @@
package cn.rtast.fancybot.items package cn.rtast.fancybot.items
import cn.rtast.fancybot.configManager 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.Http
import cn.rtast.fancybot.util.item.Item import cn.rtast.fancybot.util.item.Item
import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.fancybot.util.str.fromArrayJson import cn.rtast.fancybot.util.str.fromArrayJson
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.ob.MessageChain 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.OneBotListener
import cn.rtast.rob.util.ob.asNode import cn.rtast.rob.util.ob.asNode
import java.net.URI 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() { class TenSetuItem : Item() {
override val itemNames = listOf("十张色图") override val itemNames = listOf("十张色图")
override val itemPrice = 20.0 override val itemPrice = 20.0
@@ -28,23 +68,22 @@ class TenSetuItem : Item() {
message: GroupMessage, message: GroupMessage,
after: Double after: Double
): MessageChain.Builder { ): MessageChain.Builder {
val imageMessages = mutableListOf<MessageChain>() val msg = getImages(false)
val response = Http.get("https://api.rtast.cn/api/setu?size=10").fromArrayJson<List<Setu>>() message.reply(msg)
response.filter { !it.r18 }.map { it.urls.large }.forEach { return MessageChain.Builder()
try { }
val imageBase64 = URI(it).toURL().readBytes().encodeToBase64() }
val tempMsg = MessageChain.Builder().addImage(imageBase64, true).build()
imageMessages.add(tempMsg) class TenSetuR18Item : Item() {
} catch (_: Exception) { override val itemNames = listOf("十张色图r")
} override val itemPrice = 50.0
}
val footerMsg = MessageChain.Builder() override suspend fun redeemInGroup(
.addText("图片数量可能不足10张~") listener: OneBotListener,
.addNewLine() message: GroupMessage,
.addText("因为过滤了R18的图片~") after: Double
.build() ): MessageChain.Builder {
imageMessages.add(footerMsg) message.reply(getImages(true))
message.reply(imageMessages.asNode(configManager.selfId))
return MessageChain.Builder() return MessageChain.Builder()
} }
} }