Skip to content

Commit

Permalink
fix: reply close #93
Browse files Browse the repository at this point in the history
  • Loading branch information
cssxsh committed Aug 6, 2022
1 parent ebe4381 commit a5c90d6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 17 deletions.
22 changes: 12 additions & 10 deletions src/main/kotlin/xyz/cssxsh/bilibili/data/Dynamic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import java.time.*
internal inline fun <reified T : Entry> DynamicCard.decode(): T {
if (decode == null) {
decode = when (val entry = BiliClient.Json.decodeFromString<T>(card)) {
is DynamicReply -> entry.copy(detail = detail.origin ?: entry.describe(), display = display?.origin)
is DynamicText -> entry.copy(display = display)
is DynamicPicture -> entry.copy(display = display)
is DynamicSketch -> entry.copy(display = display)
is DynamicReply -> entry.copy(detail = detail.origin ?: entry.describe(), display = display, emoji = display?.emoji)
is DynamicText -> entry.copy(emoji = display?.emoji)
is DynamicPicture -> entry.copy(emoji = display?.emoji)
is DynamicSketch -> entry.copy(emoji = display?.emoji)
is DynamicVideo -> entry.copy(id = detail.bvid ?: "av${entry.aid}")
else -> entry
}
Expand Down Expand Up @@ -45,7 +45,7 @@ sealed interface DynamicCard : Entry, WithDateTime {
}

sealed interface DynamicEmojiContent : Entry {
val display: DynamicDisplay?
val emoji: EmojiInfo?
val content: String
}

Expand Down Expand Up @@ -345,7 +345,7 @@ data class DynamicPicture(
@SerialName("user")
val user: UserSimple,
@Transient
override val display: DynamicDisplay? = null
override val emoji: EmojiInfo? = null
) : DynamicEmojiContent {
override val content: String get() = detail.description
}
Expand Down Expand Up @@ -394,9 +394,11 @@ data class DynamicReply(
@SerialName("user")
val user: UserSimple,
@Transient
override val display: DynamicDisplay? = null,
override val emoji: EmojiInfo? = null,
@Transient
override val detail: DynamicDescribe = DynamicDescribe.Empty,
@Transient
override val detail: DynamicDescribe = DynamicDescribe.Empty
override val display: DynamicDisplay? = null
) : DynamicCard, DynamicEmojiContent {
@Transient
override var decode: Entry? = null
Expand Down Expand Up @@ -443,7 +445,7 @@ data class DynamicSketch(
@SerialName("vest")
val vest: DynamicSketchVest,
@Transient
override val display: DynamicDisplay? = null
override val emoji: EmojiInfo? = null
) : Entry, DynamicEmojiContent {
val title get() = detail.title
val link get() = detail.target
Expand Down Expand Up @@ -480,7 +482,7 @@ data class DynamicText(
@SerialName("user")
val user: UserSimple,
@Transient
override val display: DynamicDisplay? = null
override val emoji: EmojiInfo? = null
) : DynamicEmojiContent {
override val content: String get() = detail.content
}
Expand Down
14 changes: 7 additions & 7 deletions src/main/kotlin/xyz/cssxsh/mirai/bilibili/BiliContent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ internal suspend fun Entry.screenshot(contact: Contact): Message {
internal suspend fun DynamicCard.detail(contact: Contact): Message {
return when (detail.type) {
DynamicType.NONE -> "不支持的类型${detail.type}".toPlainText()
DynamicType.REPLY -> decode<DynamicReply>().content(contact)
DynamicType.REPLY -> (decode<DynamicReply>() as Entry).content(contact)
DynamicType.PICTURE -> decode<DynamicPicture>().content(contact)
DynamicType.TEXT -> decode<DynamicText>().content(contact)
DynamicType.VIDEO -> decode<DynamicVideo>().content(contact)
Expand All @@ -88,18 +88,18 @@ internal suspend fun DynamicCard.detail(contact: Contact): Message {
}

internal suspend fun DynamicEmojiContent.content(contact: Contact): Message {
val display = this.display ?: return content.toPlainText()
val emoji = this.emoji ?: return content.toPlainText()
return buildMessageChain {
val last = """\[[^]]+]""".toRegex().findAll(content).fold(0) { pos, match ->
val emoji = display.emoji.details.find { it.text == match.value }
val detail = emoji.details.find { it.text == match.value }
val next = match.range.last + 1
if (emoji != null) {
if (detail != null) {
append(content.subSequence(pos, match.range.first))
try {
append(emoji.cache(contact))
append(detail.cache(contact))
} catch (cause: Throwable) {
logger.warning({ "获取BILI表情${emoji.text}图片失败" }, cause)
append(emoji.text)
logger.warning({ "获取BILI表情${detail.text}图片失败" }, cause)
append(detail.text)
}
} else {
append(content.subSequence(pos, next))
Expand Down

0 comments on commit a5c90d6

Please sign in to comment.