packages feed

telegram-bot-api-6.5.1: src/Telegram/Bot/API/Methods/SetChatPhoto.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
module Telegram.Bot.API.Methods.SetChatPhoto where

import Control.Monad.IO.Class (liftIO)
import Data.Proxy
import Servant.API
import Servant.Multipart.API
import Servant.Multipart.Client
import Servant.Client hiding (Response)

import qualified Data.Text as T

import Telegram.Bot.API.MakingRequests
import Telegram.Bot.API.Types
import Telegram.Bot.API.Internal.TH

-- ** 'setChatPhoto'

-- | Request parameters for 'setChatPhoto'.
data SetChatPhotoRequest = SetChatPhotoRequest
  { setChatPhotoChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
  , setChatPhotoPhoto :: InputFile -- ^ 	New chat photo, uploaded using multipart/form-data
  }

instance ToMultipart Tmp SetChatPhotoRequest where
  toMultipart SetChatPhotoRequest{..} =
    makeFile "photo" setChatPhotoPhoto (MultipartData fields []) where
    fields =
      [ Input "chat_id" $ case setChatPhotoChatId of
          SomeChatId (ChatId chat_id) -> T.pack $ show chat_id
          SomeChatUsername txt -> txt
      ]

type SetChatPhoto = "setChatPhoto"
  :> MultipartForm Tmp SetChatPhotoRequest
  :> Post '[JSON] (Response Bool)

-- | Use this method to set a new profile
--   photo for the chat. Photos can't be changed
--   for private chats. The bot must be an
--   administrator in the chat for this to work
--   and must have the appropriate administrator rights.
--   Returns True on success.
--
-- *Note*: Only 'InputFile' case might be used in 'SetChatPhotoRequest'.
-- Rest cases will be rejected by Telegram.
setChatPhoto :: SetChatPhotoRequest ->  ClientM (Response Bool)
setChatPhoto r =do
      boundary <- liftIO genBoundary
      client (Proxy @SetChatPhoto) (boundary, r)

makeDefault ''SetChatPhotoRequest