feat: support card share bili video parse
This commit is contained in:
8 files changed
+54
-13
No files matched your search
@@ -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> {
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
Reference in New Issue
Block a user