diff --git a/Emulsion.Tests/Telegram/FunogramTests.fs b/Emulsion.Tests/Telegram/FunogramTests.fs index 9875fdb3..a2dadb3b 100644 --- a/Emulsion.Tests/Telegram/FunogramTests.fs +++ b/Emulsion.Tests/Telegram/FunogramTests.fs @@ -9,8 +9,12 @@ open Emulsion open Emulsion.Telegram open Emulsion.Telegram.Funogram +[] let private selfUserId = 100500L +[] let private groupId = 200600L +[] +let private chatName = "test_room" let private createUser username firstName lastName = { Id = 0L @@ -24,6 +28,8 @@ let private createUser username firstName lastName = { let private currentChat = { defaultChat with Id = groupId + Username = Some chatName + Type = SuperGroup } let private createMessage from text : Funogram.Telegram.Types.Message = @@ -65,6 +71,21 @@ let private createStickerMessage from emoji = } } +let private createPhoto() = seq { + { FileId = "" + Width = 0 + Height = 0 + FileSize = None + } +} + +let private createPhotoMessage from = + { defaultMessage with + From = Some from + Chat = currentChat + Photo = Some <| createPhoto() + } + let private createMessageWithCaption from caption = { defaultMessage with From = Some from @@ -316,6 +337,23 @@ module ReadMessageTests = readMessage message ) + [] + let readPhotoMessage() = + let message = createPhotoMessage originalUser + Assert.Equal( + authoredTelegramMessage "@originalUser" "[Photo]: https://t.me/test_room/1", + readMessage message + ) + + [] + let readPhotoWithCaptionMessage() = + let message = { createMessageWithCaption originalUser "test" with + Photo = Some <| createPhoto() } + Assert.Equal( + authoredTelegramMessage "@originalUser" "[Photo with caption \"test\"]: https://t.me/test_room/1", + readMessage message + ) + [] let readPollMessage() = let message = createPoll originalUser "Question?" [|"Option 1"; "Option 2"|] diff --git a/Emulsion/Telegram/Funogram.fs b/Emulsion/Telegram/Funogram.fs index fa7f8dd4..7fbd51c7 100644 --- a/Emulsion/Telegram/Funogram.fs +++ b/Emulsion/Telegram/Funogram.fs @@ -102,10 +102,23 @@ module MessageConverter = formatWithAuthor author text |> markAsQuote quoteSettings.linePrefix + let private getLinkToMessage (message: FunogramMessage) = + match message with + | { MessageId = id + Chat = { Type = SuperGroup + Username = Some chatName } } -> + sprintf "https://t.me/%s/%d" chatName id + | _ -> "[DATA UNRECOGNIZED]" + let private getAuthoredMessageBodyText (message: FunogramMessage) = let text = match message with | { Text = Some text } -> applyEntities message.Entities text + | { Photo = Some _; Caption = Some caption} -> + let caption = applyEntities message.CaptionEntities caption + sprintf "[Photo with caption \"%s\"]: %s" caption (getLinkToMessage message) + | { Photo = Some _ } -> + sprintf "[Photo]: %s" (getLinkToMessage message) | { Caption = Some caption } -> let caption = applyEntities message.CaptionEntities caption sprintf "[Content with caption \"%s\"]" caption