From 303d987c0875d55364c4a5c1f822728268cf8f6b Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Sun, 5 Apr 2020 16:12:45 +0200 Subject: [PATCH 1/3] Relax dependency on servant-client so that 0.16.0.1 is allowed --- telegram-api.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram-api.cabal b/telegram-api.cabal index 3b4228b..04a15a4 100644 --- a/telegram-api.cabal +++ b/telegram-api.cabal @@ -51,7 +51,7 @@ library , http-api-data , http-client , servant - , servant-client == 0.16 + , servant-client == 0.16.* , servant-client-core , mtl , text From cd40c72fb97475c9ec49376194a3f704fdc9bbb7 Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Sun, 5 Apr 2020 16:43:08 +0200 Subject: [PATCH 2/3] Add DeleteMessage request I was mostly cargo-culting the existing code, no idea if I did it all right --- src/Web/Telegram/API/Bot/API/Messages.hs | 23 +++++++++++++++++++++++ src/Web/Telegram/API/Bot/Requests.hs | 19 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/Web/Telegram/API/Bot/API/Messages.hs b/src/Web/Telegram/API/Bot/API/Messages.hs index 32e4f50..22d77de 100644 --- a/src/Web/Telegram/API/Bot/API/Messages.hs +++ b/src/Web/Telegram/API/Bot/API/Messages.hs @@ -20,6 +20,8 @@ module Web.Telegram.API.Bot.API.Messages , uploadDocumentM , sendDocument , sendDocumentM + , deleteMessage + , deleteMessageM , uploadSticker , uploadStickerM , sendSticker @@ -90,6 +92,9 @@ type TelegramBotMessagesAPI = :<|> TelegramToken :> "sendDocument" :> ReqBody '[JSON] (SendDocumentRequest Text) :> Post '[JSON] MessageResponse + :<|> TelegramToken :> "deleteMessage" + :> ReqBody '[JSON] DeleteMessageRequest + :> Post '[JSON] Bool :<|> TelegramToken :> "sendSticker" :> MultipartFormDataReqBody (SendStickerRequest FileUpload) :> Post '[JSON] MessageResponse @@ -145,6 +150,7 @@ uploadAudio_ :: Token -> SendAudioRequest FileUpload -> ClientM Me sendAudio_ :: Token -> SendAudioRequest Text -> ClientM MessageResponse uploadDocument_ :: Token -> SendDocumentRequest FileUpload -> ClientM MessageResponse sendDocument_ :: Token -> SendDocumentRequest Text -> ClientM MessageResponse +deleteMessage_ :: Token -> DeleteMessageRequest -> ClientM Bool uploadSticker_ :: Token -> SendStickerRequest FileUpload -> ClientM MessageResponse sendSticker_ :: Token -> SendStickerRequest Text -> ClientM MessageResponse uploadVideo_ :: Token -> SendVideoRequest FileUpload -> ClientM MessageResponse @@ -167,6 +173,7 @@ sendMessage_ :<|> sendAudio_ :<|> uploadDocument_ :<|> sendDocument_ + :<|> deleteMessage_ :<|> uploadSticker_ :<|> sendSticker_ :<|> uploadVideo_ @@ -251,6 +258,22 @@ sendDocument = runM sendDocumentM sendDocumentM :: SendDocumentRequest Text -> TelegramClient MessageResponse sendDocumentM = run_ sendDocument_ +-- |Use this method to delete a message, including service messages, with the following limitations: +-- - A message can only be deleted if it was sent less than 48 hours ago. +-- - A dice message in a private chat can only be deleted if it was sent more than 24 hours ago. +-- - Bots can delete outgoing messages in private chats, groups, and supergroups. +-- - Bots can delete incoming messages in private chats. +-- - Bots granted can_post_messages permissions can delete outgoing messages in channels. +-- - If the bot is an administrator of a group, it can delete any message there. +-- - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there. +-- Returns True on success. +deleteMessage :: Token -> DeleteMessageRequest -> Manager -> IO (Either ClientError Bool) +deleteMessage = runM deleteMessageM + +-- | See 'deleteMessage' +deleteMessageM :: DeleteMessageRequest -> TelegramClient Bool +deleteMessageM = run_ deleteMessage_ + -- | Use this method to upload and send .webp stickers. On success, the sent 'Message' is returned. uploadSticker :: Token -> SendStickerRequest FileUpload -> Manager -> IO (Either ClientError MessageResponse) uploadSticker = runM uploadStickerM diff --git a/src/Web/Telegram/API/Bot/Requests.hs b/src/Web/Telegram/API/Bot/Requests.hs index 5531bc9..2ba8e9c 100644 --- a/src/Web/Telegram/API/Bot/Requests.hs +++ b/src/Web/Telegram/API/Bot/Requests.hs @@ -15,6 +15,7 @@ module Web.Telegram.API.Bot.Requests , SendPhotoRequest (..) , SendAudioRequest (..) , SendDocumentRequest (..) + , DeleteMessageRequest (..) , SendStickerRequest (..) , SendVideoRequest (..) , SendVoiceRequest (..) @@ -56,6 +57,7 @@ module Web.Telegram.API.Bot.Requests , uploadAudioRequest , sendDocumentRequest , uploadDocumentRequest + , deleteMessageRequest , sendStickerRequest , uploadStickerRequest , sendVideoRequest @@ -396,6 +398,23 @@ sendDocumentRequest chatId document = SendDocumentRequest chatId document Nothin uploadDocumentRequest :: ChatId -> FileUpload -> SendDocumentRequest FileUpload uploadDocumentRequest chatId document = SendDocumentRequest chatId document Nothing Nothing Nothing Nothing +-- | This object represents request for 'deleteMessage' +data DeleteMessageRequest = DeleteMessageRequest + { + _delete_chat_id :: ChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @@channelusername@) + , _delete_message_id :: Int -- ^ Identifier of the message to delete + } deriving (Show, Generic) + +instance ToJSON DeleteMessageRequest where + toJSON = toJsonDrop 2 + +instance FromJSON DeleteMessageRequest where + parseJSON = parseJsonDrop 2 + +deleteMessageRequest :: ChatId -> Int -> DeleteMessageRequest +deleteMessageRequest chatId messageId = DeleteMessageRequest chatId messageId + + -- | This object represents request for 'sendVideo' data SendVideoRequest payload = SendVideoRequest { From a5cfdbc31e756d9ba39b46443ea40a3c4e45866f Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Sun, 5 Apr 2020 16:59:16 +0200 Subject: [PATCH 3/3] Return a response --- src/Web/Telegram/API/Bot/API/Messages.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Web/Telegram/API/Bot/API/Messages.hs b/src/Web/Telegram/API/Bot/API/Messages.hs index 22d77de..9e655b3 100644 --- a/src/Web/Telegram/API/Bot/API/Messages.hs +++ b/src/Web/Telegram/API/Bot/API/Messages.hs @@ -94,7 +94,7 @@ type TelegramBotMessagesAPI = :> Post '[JSON] MessageResponse :<|> TelegramToken :> "deleteMessage" :> ReqBody '[JSON] DeleteMessageRequest - :> Post '[JSON] Bool + :> Post '[JSON] (Response Bool) :<|> TelegramToken :> "sendSticker" :> MultipartFormDataReqBody (SendStickerRequest FileUpload) :> Post '[JSON] MessageResponse @@ -150,7 +150,7 @@ uploadAudio_ :: Token -> SendAudioRequest FileUpload -> ClientM Me sendAudio_ :: Token -> SendAudioRequest Text -> ClientM MessageResponse uploadDocument_ :: Token -> SendDocumentRequest FileUpload -> ClientM MessageResponse sendDocument_ :: Token -> SendDocumentRequest Text -> ClientM MessageResponse -deleteMessage_ :: Token -> DeleteMessageRequest -> ClientM Bool +deleteMessage_ :: Token -> DeleteMessageRequest -> ClientM (Response Bool) uploadSticker_ :: Token -> SendStickerRequest FileUpload -> ClientM MessageResponse sendSticker_ :: Token -> SendStickerRequest Text -> ClientM MessageResponse uploadVideo_ :: Token -> SendVideoRequest FileUpload -> ClientM MessageResponse @@ -267,11 +267,11 @@ sendDocumentM = run_ sendDocument_ -- - If the bot is an administrator of a group, it can delete any message there. -- - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there. -- Returns True on success. -deleteMessage :: Token -> DeleteMessageRequest -> Manager -> IO (Either ClientError Bool) +deleteMessage :: Token -> DeleteMessageRequest -> Manager -> IO (Either ClientError (Response Bool)) deleteMessage = runM deleteMessageM -- | See 'deleteMessage' -deleteMessageM :: DeleteMessageRequest -> TelegramClient Bool +deleteMessageM :: DeleteMessageRequest -> TelegramClient (Response Bool) deleteMessageM = run_ deleteMessage_ -- | Use this method to upload and send .webp stickers. On success, the sent 'Message' is returned.