content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE TypeApplications #-}
  {-# LANGUAGE TypeOperators #-}
  module Telegram.Bot.API.Methods.SetChatPermissions where
  
  
  import Data.Aeson (FromJSON (..), ToJSON (..))
  import Data.Proxy
  import GHC.Generics (Generic)
  import Servant.API
  import Servant.Client hiding (Response)
  
  import Telegram.Bot.API.Internal.Utils
  import Telegram.Bot.API.MakingRequests
  import Telegram.Bot.API.Types
  import Telegram.Bot.API.Internal.TH
  
  -- ** 'setChatPermissions'
  
  -- | Request parameters for 'setChatPermissions'.
  data SetChatPermissionsRequest = SetChatPermissionsRequest
    { setChatPermissionsChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
    , setChatPermissionsPermissions :: ChatPermissions -- ^ A JSON-serialized object for new default chat permissions.
    , setChatPermissionsUseIndependentChatPermissions :: Maybe Bool -- ^ Pass 'True' if chat permissions are set independently. Otherwise, the @can_send_other_messages@ and @can_add_web_page_previews@ permissions will imply the @can_send_messages@, @can_send_audios@, @can_send_documents@, @can_send_photos@, @can_send_videos@, @can_send_video_notes@, and @can_send_voice_notes@ permissions; the @can_send_polls@ permission will imply the @can_send_messages@ permission.
    }
    deriving Generic
  
  instance ToJSON   SetChatPermissionsRequest where toJSON = gtoJSON
  instance FromJSON SetChatPermissionsRequest where parseJSON = gparseJSON
  
  type SetChatPermissions = "setChatPermissions"
    :> ReqBody '[JSON] SetChatPermissionsRequest
    :> Post '[JSON] (Response Bool)
  
  -- | Use this method to set default chat
  --   permissions for all members. The bot
  --   must be an administrator in the group
  --   or a supergroup for this to work and must
  --   have the can_restrict_members administrator rights.
  --   Returns True on success.
  setChatPermissions :: SetChatPermissionsRequest ->  ClientM (Response Bool)
  setChatPermissions = client (Proxy @SetChatPermissions)
  
  makeDefault ''SetChatPermissionsRequest
  