suspend fun provideMessageUnfurl()

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>")
                }
            }
        }
    }