[feature] some logic fixed.

This commit is contained in:
dalbodeule 2025-06-04 15:42:31 +09:00
parent b0be81df20
commit 8a0a507e5b
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65
4 changed files with 42 additions and 9 deletions

View File

@ -207,6 +207,7 @@ class UserHandler(
var messageHandler: MessageHandler
var client: ChzzkClient
var listener: ChzzkUserSession
var chatChannelId: String?
private val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java)
private var _isActive: Boolean
@ -225,14 +226,11 @@ class UserHandler(
val tokens = Connector.client.refreshAccessToken(user.refreshToken!!)
client = Connector.getClient(tokens.first, tokens.second)
UserService.setRefreshToken(user, tokens.first, tokens.second)
chatChannelId = getChzzkChannelId(channel.channelId)
client.loginAsync().join()
client.refreshTokenAsync().join()
listener = ChzzkSessionBuilder(client).buildUserSession()
listener.createAndConnectAsync().join()
messageHandler = MessageHandler(this@UserHandler)
listener.on(SessionChatMessageEvent::class.java) {

View File

@ -353,15 +353,15 @@ class MessageHandler(
// Replace followPattern
result = followPattern.replace(result) { _ ->
try {
val followingDate = getFollowDate(channel.channelId, msg.senderChannelId)
.content?.streamingProperty?.following?.followDate
val followingDate = handler.chatChannelId?.let { getFollowDate(it, msg.senderChannelId) }
?.content?.streamingProperty?.following?.followDate ?: LocalDateTime.now().minusDays(1).toString()
val period = followingDate?.let {
val period = followingDate.let {
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val pastDate = LocalDateTime.parse(it, formatter)
val today = LocalDateTime.now()
ChronoUnit.DAYS.between(pastDate, today)
} ?: 0
} + 1
period.toString()
} catch (e: Exception) {

View File

@ -29,7 +29,7 @@ data class RefreshTokenResponse(
)
fun ChzzkClient.refreshAccessToken(refreshToken: String): Pair<String, String> {
val url = "https://openapi.chzzk.naver.com/auth/v1/token"
val url = "https://chzzk.naver.com/auth/v1/token"
val request = Request.Builder()
.url(url)
.header("Content-Type", "application/json")

View File

@ -52,6 +52,20 @@ data class NicknameColor(
val colorCode: String = ""
)
data class LiveStatus(
val liveTitle: String,
val status: String,
val concurrentUserCount: Int,
val accumulateCount: Int,
val paidPromotion: Boolean,
val adult: Boolean,
val krOnlyViewing: Boolean,
val openDate: String,
val closeDate: String?,
val clipActive: Boolean,
val chatChannelId: String
)
// OkHttpClient에 Interceptor 추가
val client = OkHttpClient.Builder()
.addNetworkInterceptor { chain ->
@ -84,3 +98,24 @@ fun getFollowDate(chatID: String, userId: String) : IData<IFollowContent?> {
}
}
}
fun getChzzkChannelId(channelId: String): String? {
val url = "https://api.chzzk.naver.com/polling/v3/channels/$channelId/live-status?includePlayerRecommendContent=false"
val request = Request.Builder()
.url(url)
.header("Content-Type", "application/json")
.get()
.build()
client.newCall(request).execute().use { response ->
try {
if(!response.isSuccessful) throw IOException("Unexpected code ${response.code}")
val body = response.body?.string()
val data = gson.fromJson(body, object: TypeToken<IData<LiveStatus?>>() {})
return data.content?.chatChannelId
} catch(e: Exception) {
throw e
}
}
}