feat: support b23.tv parse and improve cover draw, format code, clean code
This commit is contained in:
5 files changed
+33
-28
No files matched your search
@@ -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"
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user