From d84e502fbb546f91322e9b36d7880017b0f9436a Mon Sep 17 00:00:00 2001 From: Friedrich von Never Date: Tue, 29 Jun 2021 22:48:55 +0700 Subject: [PATCH] Fix #133: process Telegram errors properly --- Emulsion.Tests/Telegram/FunogramTests.fs | 18 ++++++++++++++---- Emulsion/Telegram/Client.fs | 2 +- Emulsion/Telegram/Funogram.fs | 14 +++++--------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Emulsion.Tests/Telegram/FunogramTests.fs b/Emulsion.Tests/Telegram/FunogramTests.fs index 5e9474cc..2415d82c 100644 --- a/Emulsion.Tests/Telegram/FunogramTests.fs +++ b/Emulsion.Tests/Telegram/FunogramTests.fs @@ -3,11 +3,11 @@ module Emulsion.Tests.Telegram.Client open System open Funogram.Telegram.Types +open Funogram.Types open Xunit open Emulsion open Emulsion.Telegram -open Emulsion.Telegram.Funogram [] let private selfUserId = 100500L @@ -140,7 +140,7 @@ let private replyingUser = createUser (Some "replyingUser") "" None let private forwardingUser = createUser (Some "forwardingUser") "" None module ReadMessageTests = - let readMessage = MessageConverter.read selfUserId + let readMessage = Funogram.MessageConverter.read selfUserId [] let readMessageWithUnknownUser() = @@ -317,7 +317,7 @@ module ReadMessageTests = [] let multilineForwardShouldBeUnlimited(): unit = - let messageLinesLimit = MessageConverter.DefaultMessageLinesLimit + let messageLinesLimit = Funogram.MessageConverter.DefaultMessageLinesLimit let multilineMessage = String.init messageLinesLimit (fun _ -> "test\n") + "test" let forwardedMessage = createMessage (Some originalUser) (Some multilineMessage) let message = createForwardedMessage forwardingUser forwardedMessage @@ -331,7 +331,7 @@ module ReadMessageTests = [] let longForwardShouldBeUnlimited(): unit = - let messageLengthLimit = MessageConverter.DefaultMessageLengthLimit + let messageLengthLimit = Funogram.MessageConverter.DefaultMessageLengthLimit let longString = String.init (messageLengthLimit + 1) (fun _ -> "A") let forwardedMessage = createMessage (Some originalUser) (Some longString) let message = createForwardedMessage forwardingUser forwardedMessage @@ -543,6 +543,16 @@ module ProcessMessageTests = Chat = defaultChat } Assert.Equal(None, processMessage message) +module ProcessSendResultTests = + [] + let processResultShouldDoNothingOnOk(): unit = + Assert.Equal((), Funogram.processSendResult(Ok())) + + [] + let processResultShouldThrowOnError(): unit = + let result = Error({ ErrorCode = 502; Description = "Error" }) + Assert.ThrowsAny(fun () -> Funogram.processSendResult result) |> ignore + module FlattenMessageTests = let private flattenMessage = Funogram.MessageConverter.flatten Funogram.MessageConverter.DefaultQuoteSettings let private flattenMessageLineLimit limit = diff --git a/Emulsion/Telegram/Client.fs b/Emulsion/Telegram/Client.fs index eae2be66..e4352685 100644 --- a/Emulsion/Telegram/Client.fs +++ b/Emulsion/Telegram/Client.fs @@ -16,4 +16,4 @@ type Client(ctx: ServiceContext, cancellationToken: CancellationToken, settings: } override _.Send message = - Funogram.send ctx.Logger settings botConfig message + Funogram.send settings botConfig message diff --git a/Emulsion/Telegram/Funogram.fs b/Emulsion/Telegram/Funogram.fs index 2a7c7aa9..0c927abe 100644 --- a/Emulsion/Telegram/Funogram.fs +++ b/Emulsion/Telegram/Funogram.fs @@ -297,15 +297,11 @@ module MessageConverter = else extractMessageContent replyTo { main = mainMessage; replyTo = Some replyToMessage } -let private processResultWithValue (logger: ILogger) (result: Result<'a, ApiResponseError>) = +let internal processSendResult(result: Result<'a, ApiResponseError>): unit = match result with - | Ok v -> Some v + | Ok _ -> () | Error e -> - logger.Error("Telegram API call processing error: {Error}", e) - None - -let private processResult logger (result: Result<'a, ApiResponseError>) = - processResultWithValue logger result |> ignore + failwith $"Telegram API Call processing error {e.ErrorCode}: {e.Description}" let internal processMessage (context: {| SelfUserId: int64; GroupId: int64 |}) (message: FunogramMessage): TelegramMessage option = @@ -334,7 +330,7 @@ let internal prepareHtmlMessage: Message -> string = function | Authored {author = author; text = text} -> sprintf "%s\n%s" (Html.escape author) (Html.escape text) | Event {text = text} -> sprintf "%s" (Html.escape text) -let send (logger: ILogger) (settings: TelegramSettings) (botConfig: BotConfig) (OutgoingMessage content): Async = +let send (settings: TelegramSettings) (botConfig: BotConfig) (OutgoingMessage content): Async = let sendHtmlMessage groupId text = Api.sendMessageBase groupId text (Some ParseMode.HTML) None None None None @@ -342,7 +338,7 @@ let send (logger: ILogger) (settings: TelegramSettings) (botConfig: BotConfig) ( let message = prepareHtmlMessage content async { let! result = api botConfig (sendHtmlMessage groupId message) - return processResult logger result + return processSendResult result } let run (logger: ILogger)