Skip to content

Commit

Permalink
fix: substring by codepoints (#152)
Browse files Browse the repository at this point in the history
Co-authored-by: Tomachi <8929706+book000@users.noreply.github.com>
  • Loading branch information
yuuahp and book000 authored Jun 15, 2024
1 parent 918f44f commit 3287330
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
5 changes: 3 additions & 2 deletions src/main/kotlin/com/jaoafa/vcspeaker/tts/MessageProcessor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.jaoafa.vcspeaker.tts

import com.jaoafa.vcspeaker.stores.VisionApiCounterStore
import com.jaoafa.vcspeaker.tools.VisionApi
import com.jaoafa.vcspeaker.tts.TextProcessor.substringByCodePoints
import com.kotlindiscord.kord.extensions.utils.download
import com.sksamuel.scrimage.ImmutableImage
import com.sksamuel.scrimage.nio.PngWriter
Expand Down Expand Up @@ -64,9 +65,9 @@ object MessageProcessor {
// 改行は半角スペースに置換する
val firstDescription = textAnnotations.firstOrNull()?.description?.replace("\n", " ") ?: ""
val shortDescription =
if (firstDescription.length > 20) firstDescription.substring(0, 20) + "..." else firstDescription
if (firstDescription.length > 20) firstDescription.substringByCodePoints(0, 20) + "..." else firstDescription
val embedDescription =
if (firstDescription.length > 1000) firstDescription.substring(0, 1000) + "..." else firstDescription
if (firstDescription.length > 1000) firstDescription.substringByCodePoints(0, 1000) + "..." else firstDescription

// 画像解析結果を返信する
val editedImage = visionApi.drawTextAnnotations(binaryArray)
Expand Down
7 changes: 6 additions & 1 deletion src/main/kotlin/com/jaoafa/vcspeaker/tts/TextProcessor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ object TextProcessor {

val markdown = replacedText.toMarkdown().joinToString("") { it.toReadable() }

return markdown.let { if (it.length > 180) it.substring(0, 180) else it }
return markdown.let { if (it.length > 180) it.substringByCodePoints(0, 180) else it }
}

fun extractInlineVoice(text: String, voice: Voice): Pair<String, Voice> {
Expand All @@ -63,4 +63,9 @@ object TextProcessor {

return newText to newVoice
}

fun String.substringByCodePoints(start: Int, end: Int): String {
val codePoints = codePoints().toArray()
return String(codePoints.copyOfRange(start, end), 0, end - start)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.jaoafa.vcspeaker.tools.Steam
import com.jaoafa.vcspeaker.tools.Twitter
import com.jaoafa.vcspeaker.tools.YouTube
import com.jaoafa.vcspeaker.tools.discord.DiscordExtensions.isThread
import com.jaoafa.vcspeaker.tts.TextProcessor.substringByCodePoints
import com.jaoafa.vcspeaker.tts.Token
import dev.kord.common.entity.ChannelType
import dev.kord.common.entity.Snowflake
Expand Down Expand Up @@ -491,7 +492,7 @@ object UrlReplacer : BaseReplacer {
"ユーザー「$userName」のツイートへのリンク"
)

val tweetContent = tweet.readText.substring(
val tweetContent = tweet.readText.substringByCodePoints(
0,
70.coerceAtMost(tweet.readText.length)
) + if (tweet.readText.length > 70) " 以下略" else ""
Expand Down Expand Up @@ -628,5 +629,5 @@ object UrlReplacer : BaseReplacer {
/**
* 文字列を指定した長さに短縮します。短縮後、末尾に「以下略」を付けます。
*/
private fun String.shorten(length: Int) = if (this.length > length) substring(0, length) + " 以下略" else this
private fun String.shorten(length: Int) = if (this.length > length) substringByCodePoints(0, length) + " 以下略" else this
}

0 comments on commit 3287330

Please sign in to comment.