feat: support card share bili video parse

This commit is contained in:
2024-09-12 13:06:13 +08:00
parent 5490942e82
commit a537850560
8 files changed
+54 -13

No files matched your search

+11 -10
View File
@@ -11,6 +11,7 @@ import cn.rtast.fancybot.commands.*
import cn.rtast.fancybot.commands.misc.BVParseCommand import cn.rtast.fancybot.commands.misc.BVParseCommand
import cn.rtast.fancybot.commands.misc.ImageURLCommand import cn.rtast.fancybot.commands.misc.ImageURLCommand
import cn.rtast.fancybot.commands.misc.ReverseGIFCommand import cn.rtast.fancybot.commands.misc.ReverseGIFCommand
import cn.rtast.fancybot.entity.bili.CardShare
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.items.BaisiItem import cn.rtast.fancybot.items.BaisiItem
import cn.rtast.fancybot.items.HeisiItem import cn.rtast.fancybot.items.HeisiItem
@@ -20,6 +21,7 @@ import cn.rtast.fancybot.util.file.NiuziManager
import cn.rtast.fancybot.util.file.SignManager import cn.rtast.fancybot.util.file.SignManager
import cn.rtast.fancybot.util.initDatabase import cn.rtast.fancybot.util.initDatabase
import cn.rtast.fancybot.util.item.ItemManager import cn.rtast.fancybot.util.item.ItemManager
import cn.rtast.fancybot.util.str.fromJson
import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GetMessage
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
@@ -27,13 +29,9 @@ import cn.rtast.rob.entity.GroupRevokeMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OBMessage import cn.rtast.rob.util.ob.OBMessage
import okhttp3.OkHttpClient
import okhttp3.Request
class FancyBot : OBMessage { class FancyBot : OBMessage {
private val tempOkHttpClient = OkHttpClient()
override suspend fun onGroupMessage(message: GroupMessage, json: String) { override suspend fun onGroupMessage(message: GroupMessage, json: String) {
val sender = message.sender.nickname val sender = message.sender.nickname
val senderId = message.sender.userId val senderId = message.sender.userId
@@ -42,18 +40,21 @@ class FancyBot : OBMessage {
println("$sender($senderId: $groupId): $msg") println("$sender($senderId: $groupId): $msg")
if (message.rawMessage.startsWith("BV") || if (message.rawMessage.startsWith("BV") ||
message.rawMessage.startsWith("https://www.bilibili.com") || message.rawMessage.startsWith("https://www.bilibili.com") ||
message.rawMessage.contains("https://b23.tv/") message.rawMessage.contains("https://b23.tv/") ||
message.message.find { it.type == ArrayMessageType.json } != null
) { ) {
// parse bilibili video with a link, bvid or b23.tv link // parse bilibili video with a link, bvid or b23.tv link
val bvid = if (message.rawMessage.startsWith("BV")) { val bvid = if (message.rawMessage.startsWith("BV")) {
message.rawMessage message.rawMessage
} else if (message.rawMessage.contains("https://b23.tv/")) { } else if (message.rawMessage.contains("https://b23.tv/")) {
val shortUrl = message.rawMessage.split(" ").last() val shortUrl = message.rawMessage.split(" ").last()
val request = Request.Builder().url(shortUrl).build() BVParseCommand.getShortUrlBVID(shortUrl)
val redirectedUrl = tempOkHttpClient.newCall(request).execute() } else if (message.message.find { it.type == ArrayMessageType.json } != null) {
redirectedUrl.use { val card = message.message.find { it.type == ArrayMessageType.json }!!
it.request.url.toString().split("/")[4].split("?").first() .data.data!!.toString().fromJson<CardShare>()
} if (!card.meta.detail.title.contains("哔哩哔哩")) return
val shortUrl = card.meta.detail.qqDocUrl
BVParseCommand.getShortUrlBVID(shortUrl)
} else { } else {
message.rawMessage.split("/")[4] message.rawMessage.split("/")[4]
} }
@@ -8,7 +8,7 @@
package cn.rtast.fancybot.cmd package cn.rtast.fancybot.cmd
import cn.rtast.fancybot.DEFAULT_CONFIG import cn.rtast.fancybot.DEFAULT_CONFIG
import cn.rtast.fancybot.util.toJson import cn.rtast.fancybot.util.str.toJson
import java.io.File import java.io.File
fun main() { fun main() {
@@ -8,7 +8,7 @@
package cn.rtast.fancybot.commands package cn.rtast.fancybot.commands
import cn.rtast.fancybot.entity.MCPing import cn.rtast.fancybot.entity.MCPing
import cn.rtast.fancybot.util.fromJson import cn.rtast.fancybot.util.str.fromJson
import cn.rtast.motdpinger.MotdPinger import cn.rtast.motdpinger.MotdPinger
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
@@ -14,6 +14,8 @@ import cn.rtast.fancybot.util.str.encodeToBase64
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.OBMessage import cn.rtast.rob.util.ob.OBMessage
import okhttp3.OkHttpClient
import okhttp3.Request
import java.awt.Color import java.awt.Color
import java.awt.Font import java.awt.Font
import java.awt.Graphics2D import java.awt.Graphics2D
@@ -38,6 +40,16 @@ object BVParseCommand {
private val favoriteIcon = ImageIO.read(Resources.loadFromResources("bili/favorite.png")) private val favoriteIcon = ImageIO.read(Resources.loadFromResources("bili/favorite.png"))
private val replyIcon = ImageIO.read(Resources.loadFromResources("bili/reply.png")) private val replyIcon = ImageIO.read(Resources.loadFromResources("bili/reply.png"))
private val tempOkHttpClient = OkHttpClient()
fun getShortUrlBVID(shortUrl: String): String {
val request = Request.Builder().url(shortUrl.split(" ").last()).build()
val redirectedUrl = tempOkHttpClient.newCall(request).execute()
redirectedUrl.use {
return it.request.url.toString().split("/")[4].split("?").first()
}
}
private fun Int.formatNumber(): String { private fun Int.formatNumber(): String {
return if (this >= 10000) { return if (this >= 10000) {
val result = this / 10000.0 val result = this / 10000.0
@@ -0,0 +1,25 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/12
*/
package cn.rtast.fancybot.entity.bili
import com.google.gson.annotations.SerializedName
data class CardShare(
val meta: Meta,
) {
data class Meta(
@SerializedName("detail_1")
val detail: Detail
)
data class Detail(
val title: String,
@SerializedName("qqdocurl")
val qqDocUrl: String,
)
}
@@ -7,6 +7,7 @@
package cn.rtast.fancybot.util package cn.rtast.fancybot.util
import cn.rtast.fancybot.util.str.fromJson
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.FormBody import okhttp3.FormBody
@@ -9,6 +9,8 @@ package cn.rtast.fancybot.util
import cn.rtast.fancybot.ROOT_PATH import cn.rtast.fancybot.ROOT_PATH
import cn.rtast.fancybot.gson import cn.rtast.fancybot.gson
import cn.rtast.fancybot.util.str.fromArrayJson
import cn.rtast.fancybot.util.str.fromJson
import java.io.File import java.io.File
abstract class JsonFileHandler<T> { abstract class JsonFileHandler<T> {
@@ -5,7 +5,7 @@
*/ */
package cn.rtast.fancybot.util package cn.rtast.fancybot.util.str
import cn.rtast.fancybot.gson import cn.rtast.fancybot.gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken