{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
module Telegram.Bot.API.Methods.SetMyDefaultAdministratorRights 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

-- ** 'setMyDefaultAdministratorRights'

-- | Request parameters for 'setMyDefaultAdministratorRights'.
data SetMyDefaultAdministratorRightsRequest = SetMyDefaultAdministratorRightsRequest
  { SetMyDefaultAdministratorRightsRequest
-> Maybe ChatAdministratorRights
setMyDefaultAdministratorRightsRequestRights      :: Maybe ChatAdministratorRights -- ^ A JSON-serialized object describing new default administrator rights. If not specified, the default administrator rights will be cleared.
  , SetMyDefaultAdministratorRightsRequest -> Maybe Bool
setMyDefaultAdministratorRightsRequestForChannels :: Maybe Bool -- ^ Pass 'True' to change the default administrator rights of the bot in channels. Otherwise, the default administrator rights of the bot for groups and supergroups will be changed.
  }
  deriving (forall x.
 SetMyDefaultAdministratorRightsRequest
 -> Rep SetMyDefaultAdministratorRightsRequest x)
-> (forall x.
    Rep SetMyDefaultAdministratorRightsRequest x
    -> SetMyDefaultAdministratorRightsRequest)
-> Generic SetMyDefaultAdministratorRightsRequest
forall x.
Rep SetMyDefaultAdministratorRightsRequest x
-> SetMyDefaultAdministratorRightsRequest
forall x.
SetMyDefaultAdministratorRightsRequest
-> Rep SetMyDefaultAdministratorRightsRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep SetMyDefaultAdministratorRightsRequest x
-> SetMyDefaultAdministratorRightsRequest
$cfrom :: forall x.
SetMyDefaultAdministratorRightsRequest
-> Rep SetMyDefaultAdministratorRightsRequest x
Generic

instance ToJSON   SetMyDefaultAdministratorRightsRequest where toJSON :: SetMyDefaultAdministratorRightsRequest -> Value
toJSON = SetMyDefaultAdministratorRightsRequest -> Value
forall a (d :: Meta) (f :: * -> *).
(Generic a, GToJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
a -> Value
gtoJSON
instance FromJSON SetMyDefaultAdministratorRightsRequest where parseJSON :: Value -> Parser SetMyDefaultAdministratorRightsRequest
parseJSON = Value -> Parser SetMyDefaultAdministratorRightsRequest
forall a (d :: Meta) (f :: * -> *).
(Generic a, GFromJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
Value -> Parser a
gparseJSON

type SetMyDefaultAdministratorRights = "setMyDefaultAdministratorRights"
  :> ReqBody '[JSON] SetMyDefaultAdministratorRightsRequest
  :> Post '[JSON] (Response Bool)

-- | Use this method to change the default administrator rights requested by the bot when it's added as an administrator to groups or channels. These rights will be suggested to users, but they are are free to modify the list before adding the bot. Returns 'True' on success.
setMyDefaultAdministratorRights
  :: SetMyDefaultAdministratorRightsRequest -> ClientM (Response Bool)
setMyDefaultAdministratorRights :: SetMyDefaultAdministratorRightsRequest -> ClientM (Response Bool)
setMyDefaultAdministratorRights = Proxy SetMyDefaultAdministratorRights
-> Client ClientM SetMyDefaultAdministratorRights
forall api.
HasClient ClientM api =>
Proxy api -> Client ClientM api
client (Proxy SetMyDefaultAdministratorRights
forall k (t :: k). Proxy t
Proxy @SetMyDefaultAdministratorRights)

makeDefault ''SetMyDefaultAdministratorRightsRequest