This commit is contained in:
2024-09-24 13:03:24 +08:00
parent 3dfcd3314c
commit 56c65a1165
6 files changed
+122 -8

No files matched your search

@@ -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
@@ -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<String>) {
val keyword = args.first()
val response = Http.get<Search>(
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())
}
}
@@ -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<String>) {
if (args.isEmpty()) {
val msg = MessageChain.Builder()
@@ -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<Result>
)
data class Result(
@SerializedName("result_type")
val resultType: String,
val data: List<EPData>
)
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,
)
}
@@ -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())
}
@@ -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()
}