diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 2b551bf..299bb83 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -41,7 +41,6 @@ import cn.rtast.fancybot.util.str.fromJson import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.entity.AddFriendRequest import cn.rtast.rob.entity.FileEvent -import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupRevokeMessage import cn.rtast.rob.enums.ArrayMessageType @@ -199,7 +198,8 @@ val commands = listOf( AsciiArtCommand(), StatusCommand(), JueCommand(), ShortLinkCommand(), TenSetuCommand(), ShotSelfCommand(), - ShotOtherCommand(), ReverseGIFCommand() + ShotOtherCommand(), ReverseGIFCommand(), + DMCommand() ) val START_UP_TIME = Instant.now().epochSecond diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMCommand.kt new file mode 100644 index 0000000..8507295 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DMCommand.kt @@ -0,0 +1,49 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/24 + */ + + +package cn.rtast.fancybot.commands.lookup + +import cn.rtast.fancybot.entity.bili.Search +import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.parseTimeStamp +import cn.rtast.fancybot.util.str.encodeToBase64 +import cn.rtast.fancybot.util.str.extractPlainTextFromHtml +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 java.net.URI + +class DMCommand : BaseCommand() { + override val commandNames = listOf("/dm") + + private val searchAPIUrl = "https://api.bilibili.com/x/web-interface/wbi/search/all/v2" + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + val keyword = args.first() + val response = Http.get( + searchAPIUrl, mapOf("keyword" to keyword), + ).data.result.find { it.resultType == "media_bangumi" }!! + .data.first() + val nodeMsg = NodeMessageChain.Builder() + val msg = MessageChain.Builder() + val imageBase64 = URI(response.cover).toURL().readBytes().encodeToBase64() + msg.addImage(imageBase64, true) + .addText("番名: ${response.title.extractPlainTextFromHtml()}(${response.orgTitle})") + .addNewLine() + .addText(response.styles) + .addNewLine() + .addText("${response.areas} · ${response.pubTime.parseTimeStamp().year} · ${response.indexShow}") + .addNewLine() + .addText(response.desc) + .addNewLine() + .addText(response.url) + nodeMsg.addMessageChain(msg.build(), message.sender.userId) + listener.sendGroupForwardMsg(message.groupId, nodeMsg.build()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt index bbd1720..e1a7ebf 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/WikipediaCommand.kt @@ -10,22 +10,17 @@ package cn.rtast.fancybot.commands.lookup import cn.rtast.fancybot.entity.wiki.PageInfoResponse import cn.rtast.fancybot.entity.wiki.WikipediaResponse import cn.rtast.fancybot.util.Http +import cn.rtast.fancybot.util.str.extractPlainTextFromHtml 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.OneBotListener -import org.jsoup.Jsoup class WikipediaCommand : BaseCommand() { override val commandNames = listOf("/wiki", "/wk") private val wikipediaAPI = "https://proxy.rtast.cn/https/zh.wikipedia.org/w/api.php" - private fun String.extractPlainTextFromHtml(): String { - val doc = Jsoup.parse(this) - return doc.text() - } - override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/bili/Search.kt b/src/main/kotlin/cn/rtast/fancybot/entity/bili/Search.kt new file mode 100644 index 0000000..c68f9b6 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/bili/Search.kt @@ -0,0 +1,47 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/24 + */ + + +package cn.rtast.fancybot.entity.bili + +import com.google.gson.annotations.SerializedName + +data class Search( + val data: Data +) { + data class Data( + val result: List + ) + + data class Result( + @SerializedName("result_type") + val resultType: String, + val data: List + ) + + data class EPData( + val url: String, + val desc: String, + val title: String, + @SerializedName("org_title") + val orgTitle: String, + val cover: String, + @SerializedName("pubtime") + val pubTime: Long, + @SerializedName("media_score") + val mediaScore: MediaScore, + @SerializedName("index_show") + val indexShow: String, + val areas: String, + val styles: String, + ) + + data class MediaScore( + val score: Float, + @SerializedName("user_count") + val userCount: Int, + ) +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/Date.kt b/src/main/kotlin/cn/rtast/fancybot/util/Date.kt new file mode 100644 index 0000000..48550ed --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/util/Date.kt @@ -0,0 +1,17 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/24 + */ + + +package cn.rtast.fancybot.util + +import java.time.Instant +import java.time.LocalDateTime +import java.time.ZoneId + +fun Long.parseTimeStamp(): LocalDateTime { + val instant = Instant.ofEpochMilli(this) + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()) +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt b/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt index b0fddd5..d94ce2e 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/str/StringFormatter.kt @@ -7,6 +7,7 @@ package cn.rtast.fancybot.util.str +import org.jsoup.Jsoup import java.awt.Graphics2D fun setTruncat(origin: String, g2d: Graphics2D, maxWidth: Int = 500): String { @@ -40,3 +41,8 @@ fun Int.formatNumberEnglish(): String { else -> this.toString() } } + +fun String.extractPlainTextFromHtml(): String { + val doc = Jsoup.parse(this) + return doc.text() +} \ No newline at end of file