in src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/unfurlProviders/ChatUnfurlProvider.kt [63:125]
suspend fun provideMessageUnfurl(url: Url, channelIdentifier: ChannelIdentifier, messageId: String, spaceClient: SpaceClient): ChatUnfurlRequest.UnfurlDetail? {
val channel = spaceClient.chats.channels.getChannel(channelIdentifier) {
contact {
ext {
name()
}
key()
defaultName()
}
}
val channelUrl = URLBuilder(url).apply {
encodedPath = "/im/${channel.contact.key}"
encodedParameters = ParametersBuilder()
fragment = ""
}.build()
val channelName = (channel.contact.ext as? M2SharedChannelContent)?.name ?: channel.contact.defaultName
val message = spaceClient.chats.messages.getMessage(
ChatMessageIdentifier.InternalId(messageId),
channelIdentifier
) {
author {
details {
user {
name {
firstName()
lastName()
}
}
}
name()
}
created()
text()
}
val authorName = (message.author.details as? CUserPrincipalDetails)?.user?.name?.run { "$firstName $lastName" }
?: message.author.name
val createdAt = message.created.toLocalDateTime(TimeZone.currentSystemDefault())
.toJavaLocalDateTime()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
val messageText = buildString {
val spaceRichText = spaceClient.richText.parseMarkdown(message.text)
appendDocument(spaceRichText)
}
return ChatUnfurlRequest.UnfurlDetail().apply {
blocks = withBlocks {
context {
markdownText("*$authorName* in <$channelUrl|$channelName> ($createdAt)")
}
section {
markdownText(messageText)
}
context {
spaceLogo()
markdownText("<$url|View message>")
}
}
}
}