feat: support b23.tv parse and improve cover draw, format code, clean code

This commit is contained in:
2024-09-12 11:18:57 +08:00
parent bd585919ae
commit 1242d1fc3f
5 files changed
+33 -28

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
[versions] [versions]
kotlinVersion = "2.0.10" kotlinVersion = "2.0.10"
ronebotVersion = "1.6.2" ronebotVersion = "1.7.0"
shadowVersion = "8.3.0" shadowVersion = "8.3.0"
okhttpVersion = "5.0.0-alpha.14" okhttpVersion = "5.0.0-alpha.14"
exposedVersion = "0.53.0" exposedVersion = "0.53.0"
+23 -3
View File
@@ -27,17 +27,37 @@ 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
val msg = message.rawMessage val msg = message.rawMessage
val groupId = message.groupId val groupId = message.groupId
println("$sender($senderId: $groupId): $msg") println("$sender($senderId: $groupId): $msg")
if (message.rawMessage.startsWith("BV") || message.rawMessage.startsWith("https://www.bilibili.com")) { if (message.rawMessage.startsWith("BV") ||
BVParseCommand.parse(this, message) message.rawMessage.startsWith("https://www.bilibili.com") ||
message.rawMessage.contains("https://b23.tv/")
) {
// parse bilibili video with a link, bvid or b23.tv link
val bvid = if (message.rawMessage.startsWith("BV")) {
message.rawMessage
} else if (message.rawMessage.contains("https://b23.tv/")) {
val shortUrl = message.rawMessage.split(" ").last()
val request = Request.Builder().url(shortUrl).build()
val redirectedUrl = tempOkHttpClient.newCall(request).execute()
redirectedUrl.use {
it.request.url.toString().split("/")[4].split("?").first()
}
} else {
message.rawMessage.split("/")[4]
}
BVParseCommand.parse(this, bvid, message)
} }
if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse
val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!! val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!!
@@ -65,7 +85,7 @@ class FancyBot : OBMessage {
override suspend fun onGetGroupMessageResponse(message: GetMessage) { override suspend fun onGetGroupMessageResponse(message: GetMessage) {
when (message.data.id) { when (message.data.id) {
"revoke" -> AntiRevokeCommand.getMessageCallback(this, message) "revoke" -> AntiRevokeCommand.callback(this, message)
"imageUrl" -> ImageURLCommand.callback(this, message) "imageUrl" -> ImageURLCommand.callback(this, message)
"reverseGif" -> ReverseGIFCommand.callback(this, message) "reverseGif" -> ReverseGIFCommand.callback(this, message)
} }
@@ -29,7 +29,7 @@ class AntiRevokeCommand : BaseCommand() {
} }
companion object { companion object {
suspend fun getMessageCallback(listener: OBMessage, message: GetMessage) { suspend fun callback(listener: OBMessage, message: GetMessage) {
val msgList = mutableListOf<ArrayMessage>() val msgList = mutableListOf<ArrayMessage>()
msgList.add( msgList.add(
ArrayMessage( ArrayMessage(
@@ -39,20 +39,11 @@ object BVParseCommand {
private val replyIcon = ImageIO.read(Resources.loadFromResources("bili/reply.png")) private val replyIcon = ImageIO.read(Resources.loadFromResources("bili/reply.png"))
private fun Int.formatNumber(): String { private fun Int.formatNumber(): String {
return when { return if (this >= 10000) {
this >= 100000000 -> "${this / 100000000}亿" val result = this / 10000.0
this >= 10000 -> { String.format("%.1f万", result)
val wan = this / 10000 } else {
val remainder = this % 10000 this.toString()
if (remainder == 0) "${wan}" else "${wan}${remainder}"
}
this >= 1000 -> {
val remainder = this % 1000
if (remainder == 0) "${this / 1000}" else "${this / 1000}千零${remainder}"
}
else -> this.toString()
} }
} }
@@ -144,7 +135,7 @@ object BVParseCommand {
// draw author face // draw author face
this.drawImage(faceImage, g2d, 40, 480, 60.0, 60.0, true) this.drawImage(faceImage, g2d, 40, 480, 60.0, 60.0, true)
// draw cover image // draw cover image
this.drawImage(coverImage, g2d, 470, 140, 600.0, 300.0, true) this.drawImage(coverImage, g2d, 430, 140, 600.0, 300.0, true)
g2d.dispose() g2d.dispose()
val byteArrayOutputStream = ByteArrayOutputStream() val byteArrayOutputStream = ByteArrayOutputStream()
ImageIO.write(backgroundImage, "png", byteArrayOutputStream) ImageIO.write(backgroundImage, "png", byteArrayOutputStream)
@@ -152,9 +143,7 @@ object BVParseCommand {
return imageBytes.encodeToBase64() return imageBytes.encodeToBase64()
} }
suspend fun parse(listener: OBMessage, message: GroupMessage) { suspend fun parse(listener: OBMessage, bvid: String, message: GroupMessage) {
val bvid = if (message.rawMessage.startsWith("BV")) message.rawMessage
else message.rawMessage.split("/")[4]
val videoInfo = Http.get<BVID>(CID_URL, mapOf("bvid" to bvid)) val videoInfo = Http.get<BVID>(CID_URL, mapOf("bvid" to bvid))
val authorFace = videoInfo.data.owner.face val authorFace = videoInfo.data.owner.face
val title = videoInfo.data.title val title = videoInfo.data.title
@@ -33,11 +33,7 @@ class JrrpManager {
suspend fun isJrrped(id: Long): Boolean { suspend fun isJrrped(id: Long): Boolean {
val record = getRecord(id) val record = getRecord(id)
return if (record != null) { return record?.timestamp?.isSameDay(Instant.now().epochSecond) ?: false
record.timestamp.isSameDay(Instant.now().epochSecond)
} else {
false
}
} }
suspend fun jrrp(id: Long): Long { suspend fun jrrp(id: Long): Long {