module TD.Query.ToggleCommunityMemberIsBanned
  (ToggleCommunityMemberIsBanned(..)
  , defaultToggleCommunityMemberIsBanned
  ) where

import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I
import qualified TD.Data.MessageSender as MessageSender

-- | Bans or unbans a member of a community; requires can_ban_members administrator right in the community. A banned member is banned in all chats of the community. Administrators of the community can be banned only by the owner of the community and administrators, which can edit administrator rights of the member. If an owner of a chat in the community is banned, then the chat is removed from the community; in this case, can_edit_chat_list administrator right is also required. Returns 'TD.Data.Ok.Ok'
data ToggleCommunityMemberIsBanned
  = ToggleCommunityMemberIsBanned
    { ToggleCommunityMemberIsBanned -> Maybe Int
community_id :: Maybe Int                         -- ^ Identifier of the community
    , ToggleCommunityMemberIsBanned -> Maybe MessageSender
member_id    :: Maybe MessageSender.MessageSender -- ^ Identifier of the member to ban or unban
    , ToggleCommunityMemberIsBanned -> Maybe Bool
is_banned    :: Maybe Bool                        -- ^ Pass true to ban the member; pass false to unban the member
    }
  deriving (ToggleCommunityMemberIsBanned
-> ToggleCommunityMemberIsBanned -> Bool
(ToggleCommunityMemberIsBanned
 -> ToggleCommunityMemberIsBanned -> Bool)
-> (ToggleCommunityMemberIsBanned
    -> ToggleCommunityMemberIsBanned -> Bool)
-> Eq ToggleCommunityMemberIsBanned
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ToggleCommunityMemberIsBanned
-> ToggleCommunityMemberIsBanned -> Bool
== :: ToggleCommunityMemberIsBanned
-> ToggleCommunityMemberIsBanned -> Bool
$c/= :: ToggleCommunityMemberIsBanned
-> ToggleCommunityMemberIsBanned -> Bool
/= :: ToggleCommunityMemberIsBanned
-> ToggleCommunityMemberIsBanned -> Bool
Eq, Int -> ToggleCommunityMemberIsBanned -> ShowS
[ToggleCommunityMemberIsBanned] -> ShowS
ToggleCommunityMemberIsBanned -> String
(Int -> ToggleCommunityMemberIsBanned -> ShowS)
-> (ToggleCommunityMemberIsBanned -> String)
-> ([ToggleCommunityMemberIsBanned] -> ShowS)
-> Show ToggleCommunityMemberIsBanned
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ToggleCommunityMemberIsBanned -> ShowS
showsPrec :: Int -> ToggleCommunityMemberIsBanned -> ShowS
$cshow :: ToggleCommunityMemberIsBanned -> String
show :: ToggleCommunityMemberIsBanned -> String
$cshowList :: [ToggleCommunityMemberIsBanned] -> ShowS
showList :: [ToggleCommunityMemberIsBanned] -> ShowS
Show)

instance I.ShortShow ToggleCommunityMemberIsBanned where
  shortShow :: ToggleCommunityMemberIsBanned -> String
shortShow
    ToggleCommunityMemberIsBanned
      { community_id :: ToggleCommunityMemberIsBanned -> Maybe Int
community_id = Maybe Int
community_id_
      , member_id :: ToggleCommunityMemberIsBanned -> Maybe MessageSender
member_id    = Maybe MessageSender
member_id_
      , is_banned :: ToggleCommunityMemberIsBanned -> Maybe Bool
is_banned    = Maybe Bool
is_banned_
      }
        = String
"ToggleCommunityMemberIsBanned"
          String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
          [ String
"community_id" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
community_id_
          , String
"member_id"    String -> Maybe MessageSender -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe MessageSender
member_id_
          , String
"is_banned"    String -> Maybe Bool -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Bool
is_banned_
          ]

instance AT.ToJSON ToggleCommunityMemberIsBanned where
  toJSON :: ToggleCommunityMemberIsBanned -> Value
toJSON
    ToggleCommunityMemberIsBanned
      { community_id :: ToggleCommunityMemberIsBanned -> Maybe Int
community_id = Maybe Int
community_id_
      , member_id :: ToggleCommunityMemberIsBanned -> Maybe MessageSender
member_id    = Maybe MessageSender
member_id_
      , is_banned :: ToggleCommunityMemberIsBanned -> Maybe Bool
is_banned    = Maybe Bool
is_banned_
      }
        = [Pair] -> Value
A.object
          [ Key
"@type"        Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"toggleCommunityMemberIsBanned"
          , Key
"community_id" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
community_id_
          , Key
"member_id"    Key -> Maybe MessageSender -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe MessageSender
member_id_
          , Key
"is_banned"    Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Bool
is_banned_
          ]

defaultToggleCommunityMemberIsBanned :: ToggleCommunityMemberIsBanned
defaultToggleCommunityMemberIsBanned :: ToggleCommunityMemberIsBanned
defaultToggleCommunityMemberIsBanned =
  ToggleCommunityMemberIsBanned
    { community_id :: Maybe Int
community_id = Maybe Int
forall a. Maybe a
Nothing
    , member_id :: Maybe MessageSender
member_id    = Maybe MessageSender
forall a. Maybe a
Nothing
    , is_banned :: Maybe Bool
is_banned    = Maybe Bool
forall a. Maybe a
Nothing
    }