Skip to content

Commit cd40c72

Browse files
committed
Add DeleteMessage request
I was mostly cargo-culting the existing code, no idea if I did it all right
1 parent 303d987 commit cd40c72

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/Web/Telegram/API/Bot/API/Messages.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ module Web.Telegram.API.Bot.API.Messages
2020
, uploadDocumentM
2121
, sendDocument
2222
, sendDocumentM
23+
, deleteMessage
24+
, deleteMessageM
2325
, uploadSticker
2426
, uploadStickerM
2527
, sendSticker
@@ -90,6 +92,9 @@ type TelegramBotMessagesAPI =
9092
:<|> TelegramToken :> "sendDocument"
9193
:> ReqBody '[JSON] (SendDocumentRequest Text)
9294
:> Post '[JSON] MessageResponse
95+
:<|> TelegramToken :> "deleteMessage"
96+
:> ReqBody '[JSON] DeleteMessageRequest
97+
:> Post '[JSON] Bool
9398
:<|> TelegramToken :> "sendSticker"
9499
:> MultipartFormDataReqBody (SendStickerRequest FileUpload)
95100
:> Post '[JSON] MessageResponse
@@ -145,6 +150,7 @@ uploadAudio_ :: Token -> SendAudioRequest FileUpload -> ClientM Me
145150
sendAudio_ :: Token -> SendAudioRequest Text -> ClientM MessageResponse
146151
uploadDocument_ :: Token -> SendDocumentRequest FileUpload -> ClientM MessageResponse
147152
sendDocument_ :: Token -> SendDocumentRequest Text -> ClientM MessageResponse
153+
deleteMessage_ :: Token -> DeleteMessageRequest -> ClientM Bool
148154
uploadSticker_ :: Token -> SendStickerRequest FileUpload -> ClientM MessageResponse
149155
sendSticker_ :: Token -> SendStickerRequest Text -> ClientM MessageResponse
150156
uploadVideo_ :: Token -> SendVideoRequest FileUpload -> ClientM MessageResponse
@@ -167,6 +173,7 @@ sendMessage_
167173
:<|> sendAudio_
168174
:<|> uploadDocument_
169175
:<|> sendDocument_
176+
:<|> deleteMessage_
170177
:<|> uploadSticker_
171178
:<|> sendSticker_
172179
:<|> uploadVideo_
@@ -251,6 +258,22 @@ sendDocument = runM sendDocumentM
251258
sendDocumentM :: SendDocumentRequest Text -> TelegramClient MessageResponse
252259
sendDocumentM = run_ sendDocument_
253260

261+
-- |Use this method to delete a message, including service messages, with the following limitations:
262+
-- - A message can only be deleted if it was sent less than 48 hours ago.
263+
-- - A dice message in a private chat can only be deleted if it was sent more than 24 hours ago.
264+
-- - Bots can delete outgoing messages in private chats, groups, and supergroups.
265+
-- - Bots can delete incoming messages in private chats.
266+
-- - Bots granted can_post_messages permissions can delete outgoing messages in channels.
267+
-- - If the bot is an administrator of a group, it can delete any message there.
268+
-- - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there.
269+
-- Returns True on success.
270+
deleteMessage :: Token -> DeleteMessageRequest -> Manager -> IO (Either ClientError Bool)
271+
deleteMessage = runM deleteMessageM
272+
273+
-- | See 'deleteMessage'
274+
deleteMessageM :: DeleteMessageRequest -> TelegramClient Bool
275+
deleteMessageM = run_ deleteMessage_
276+
254277
-- | Use this method to upload and send .webp stickers. On success, the sent 'Message' is returned.
255278
uploadSticker :: Token -> SendStickerRequest FileUpload -> Manager -> IO (Either ClientError MessageResponse)
256279
uploadSticker = runM uploadStickerM

src/Web/Telegram/API/Bot/Requests.hs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Web.Telegram.API.Bot.Requests
1515
, SendPhotoRequest (..)
1616
, SendAudioRequest (..)
1717
, SendDocumentRequest (..)
18+
, DeleteMessageRequest (..)
1819
, SendStickerRequest (..)
1920
, SendVideoRequest (..)
2021
, SendVoiceRequest (..)
@@ -56,6 +57,7 @@ module Web.Telegram.API.Bot.Requests
5657
, uploadAudioRequest
5758
, sendDocumentRequest
5859
, uploadDocumentRequest
60+
, deleteMessageRequest
5961
, sendStickerRequest
6062
, uploadStickerRequest
6163
, sendVideoRequest
@@ -396,6 +398,23 @@ sendDocumentRequest chatId document = SendDocumentRequest chatId document Nothin
396398
uploadDocumentRequest :: ChatId -> FileUpload -> SendDocumentRequest FileUpload
397399
uploadDocumentRequest chatId document = SendDocumentRequest chatId document Nothing Nothing Nothing Nothing
398400

401+
-- | This object represents request for 'deleteMessage'
402+
data DeleteMessageRequest = DeleteMessageRequest
403+
{
404+
_delete_chat_id :: ChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @@channelusername@)
405+
, _delete_message_id :: Int -- ^ Identifier of the message to delete
406+
} deriving (Show, Generic)
407+
408+
instance ToJSON DeleteMessageRequest where
409+
toJSON = toJsonDrop 2
410+
411+
instance FromJSON DeleteMessageRequest where
412+
parseJSON = parseJsonDrop 2
413+
414+
deleteMessageRequest :: ChatId -> Int -> DeleteMessageRequest
415+
deleteMessageRequest chatId messageId = DeleteMessageRequest chatId messageId
416+
417+
399418
-- | This object represents request for 'sendVideo'
400419
data SendVideoRequest payload = SendVideoRequest
401420
{

0 commit comments

Comments
 (0)