diff --git a/src/Grinder/Funogram.fs b/src/Grinder/Funogram.fs index 430e396..2674c2a 100644 --- a/src/Grinder/Funogram.fs +++ b/src/Grinder/Funogram.fs @@ -32,7 +32,8 @@ let callApiWithDefaultRetry config = callApiWithRetry config 5 module ApiExt = type UnbanChatMemberReq = { ChatId: ChatId - UserId: int64 } + UserId: int64 + OnlyIfBanned: Boolean } interface IRequestBase with member __.MethodName = "unbanChatMember" @@ -54,8 +55,8 @@ module ApiExt = interface IRequestBase with member __.MethodName = "restrictChatMember" - let unbanChatMemberByChatNameExt chatName userId : UnbanChatMemberReq = - { ChatId = ChatId.String chatName; UserId = userId } + let unbanChatMemberByChatNameExt chatName userId onlyIfBanned : UnbanChatMemberReq = + { ChatId = ChatId.String chatName; UserId = userId; OnlyIfBanned = onlyIfBanned } let restrictChatMemberBaseExt chatId userId (untilDate: DateTime) canSendMessages canSendMediaMessages canSendOtherMessages canAddWebPagePreviews = let seconds = int64 (untilDate.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds @@ -92,11 +93,11 @@ module ApiExt = return Error <| sprintf "Failed to ban %i in chat %s. Description: %s" userId chat e.Description } - let unbanUserByUsername context chat username = async { + let unbanUserByUsername context chat username onlyIfBanned = async { match! Datastore.findUserIdByUsername username with | UserIdFound userId -> let! unbanResult = - unbanChatMemberByChatNameExt chat userId + unbanChatMemberByChatNameExt chat userId onlyIfBanned |> callApiWithDefaultRetry context match unbanResult with | Ok _ -> diff --git a/src/Grinder/Program.fs b/src/Grinder/Program.fs index 590b1db..3edf391 100644 --- a/src/Grinder/Program.fs +++ b/src/Grinder/Program.fs @@ -82,7 +82,7 @@ module Program = member __.UnbanUser chatUsername username: Async> = sprintf "Unbanning user %A in chat %A" username chatUsername |> logInfo - ApiExt.unbanUserByUsername config %chatUsername %username + ApiExt.unbanUserByUsername config %chatUsername %username true // Do nothing if user not banned member __.SendTextMessage chatId text: Async = sprintf "Sending {%s} into chat %A" text chatId