From 98f4f5d10f1546fa2ecd6d79e4725b472ff5acd3 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Tue, 24 Sep 2024 19:11:04 +0800 Subject: [PATCH] feat: add dm search --- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 1 + .../commands/lookup/DMSearchCommand.kt | 63 +++++++++++++++++++ .../cn/rtast/fancybot/entity/bgm/BGMSearch.kt | 26 ++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMSearchCommand.kt create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/bgm/BGMSearch.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 68d6125..7e3aa01 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -200,6 +200,7 @@ val commands = listOf( NiuziBankCommand(), WithdrawCommand(), BankTransferCommand(), CreateBankAccountCommand(), BankBalanceCommand(), DepositCommand(), + DMSearchCommand() ) val START_UP_TIME = Instant.now().epochSecond diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMSearchCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMSearchCommand.kt new file mode 100644 index 0000000..59586a9 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMSearchCommand.kt @@ -0,0 +1,63 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/24 + */ + + +package cn.rtast.fancybot.commands.lookup + +import cn.rtast.fancybot.entity.bgm.BGMSearch +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.str.encodeToBase64 +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.BaseCommand +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.NodeMessageChain +import cn.rtast.rob.util.ob.OneBotListener +import okhttp3.OkHttpClient +import okhttp3.Request + +class DMSearchCommand : BaseCommand() { + override val commandNames = listOf("/dm", "动漫", "dm") + + private val client = OkHttpClient() + + companion object { + private const val API_URL = "https://api.bgm.tv/search/subject/#{}?type=2&responseGroup=small" + } + + private fun followRedirect(url: String): ByteArray { + val request = Request.Builder().url(url).build() + client.newCall(request).execute().use { response -> + return response.body.bytes() + } + } + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + if (args.isEmpty()) { + message.reply("发送`/dm <关键词>`即可搜索番剧啦~") + return + } + try { + val keyword = args.joinToString(" ") + val response = Http.get(API_URL.replace("#{}", keyword)).list + val nodeMsg = NodeMessageChain.Builder() + response.asSequence().take(5).forEach { + val imageBase64 = this.followRedirect(it.images.large).encodeToBase64() + val tempMsg = MessageChain.Builder() + .addImage(imageBase64, true) + .addText("${it.name} | ${it.nameCN}") + .addNewLine() + .addText(it.url) + .build() + nodeMsg.addMessageChain(tempMsg, message.sender.userId) + } + val footerNode = MessageChain.Builder().addText("数据来源: Bangumi").build() + nodeMsg.addMessageChain(footerNode, message.sender.userId) + listener.sendGroupForwardMsg(message.groupId, nodeMsg.build()) + } catch (_: Exception) { + message.reply("没有搜索到结果呢~") + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/bgm/BGMSearch.kt b/src/main/kotlin/cn/rtast/fancybot/entity/bgm/BGMSearch.kt new file mode 100644 index 0000000..b362d69 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/bgm/BGMSearch.kt @@ -0,0 +1,26 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/24 + */ + + +package cn.rtast.fancybot.entity.bgm + +import com.google.gson.annotations.SerializedName + +data class BGMSearch( + val list: List +) { + data class Result( + val url: String, + val images: Images, + val name: String, + @SerializedName("name_cn") + val nameCN: String, + ) + + data class Images( + val large: String + ) +} \ No newline at end of file