telega 0.1.8 → 0.1.9
raw patch · 9 files changed
+158/−35 lines, 9 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Network.Telegram.API.Bot.Object.Update.Message: Directly :: Messaging
- Network.Telegram.API.Bot.Object.Update.Message: Forwarding :: Messaging
- Network.Telegram.API.Bot.Object.Update.Message: Replying :: Messaging
- Network.Telegram.API.Bot.Object.Update.Message: data Messaging
- Network.Telegram.API.Bot.Property.Persistable: Edit :: Capacity
- Network.Telegram.API.Bot.Property.Persistable: Fetch :: Capacity
- Network.Telegram.API.Bot.Property.Persistable: Post :: Capacity
- Network.Telegram.API.Bot.Property.Persistable: Purge :: Capacity
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Object.Update.Message.Directly Network.Telegram.API.Bot.Object.Update.Message.Message
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Object.Update.Message.Forwarding Network.Telegram.API.Bot.Object.Update.Message.Message
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Object.Update.Message.Replying Network.Telegram.API.Bot.Object.Update.Message.Message
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Edit Network.Telegram.API.Bot.Object.Update.Message.Keyboard.Keyboard
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Fetch Network.Telegram.API.Bot.Object.Member.Member
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Fetch Network.Telegram.API.Bot.Object.Sender.Sender
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Post Network.Telegram.API.Bot.Object.Update.Callback.Notification.Notification
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Post Network.Telegram.API.Bot.Object.Update.Message.Keyboard.Keyboard
- Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable 'Network.Telegram.API.Bot.Property.Persistable.Purge Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Object: type family Object (a :: *) :: Constraint
+ Network.Telegram.API.Bot.Object.Member.Powers: Powers :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Powers
+ Network.Telegram.API.Bot.Object.Member.Powers: data Powers
+ Network.Telegram.API.Bot.Object.Member.Powers: instance Data.Aeson.Types.FromJSON.FromJSON Network.Telegram.API.Bot.Object.Member.Powers.Powers
+ Network.Telegram.API.Bot.Object.Member.Powers: instance GHC.Show.Show Network.Telegram.API.Bot.Object.Member.Powers.Powers
+ Network.Telegram.API.Bot.Object.Member.Restrictions: Restrictions :: Bool -> Bool -> Bool -> Bool -> Restrictions
+ Network.Telegram.API.Bot.Object.Member.Restrictions: data Restrictions
+ Network.Telegram.API.Bot.Object.Member.Restrictions: instance Data.Aeson.Types.FromJSON.FromJSON Network.Telegram.API.Bot.Object.Member.Restrictions.Restrictions
+ Network.Telegram.API.Bot.Object.Member.Restrictions: instance GHC.Show.Show Network.Telegram.API.Bot.Object.Member.Restrictions.Restrictions
+ Network.Telegram.API.Bot.Object.Update.Message.Content.Location: instance Data.Aeson.Types.ToJSON.ToJSON Network.Telegram.API.Bot.Object.Update.Message.Content.Location.Location
+ Network.Telegram.API.Bot.Property.Identifiable: type family Identificator o = i
+ Network.Telegram.API.Bot.Property.Persistable: Direct' :: Capacity -> Message'
+ Network.Telegram.API.Bot.Property.Persistable: Edit' :: Capacity
+ Network.Telegram.API.Bot.Property.Persistable: Fetch' :: Capacity
+ Network.Telegram.API.Bot.Property.Persistable: Forward' :: Capacity -> Message'
+ Network.Telegram.API.Bot.Property.Persistable: Post' :: Capacity
+ Network.Telegram.API.Bot.Property.Persistable: Purge' :: Capacity
+ Network.Telegram.API.Bot.Property.Persistable: Reply' :: Capacity -> Message'
+ Network.Telegram.API.Bot.Property.Persistable: data Message'
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Edit' Network.Telegram.API.Bot.Object.Update.Message.Keyboard.Keyboard
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Edit' Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Fetch' Network.Telegram.API.Bot.Object.Member.Member
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Fetch' Network.Telegram.API.Bot.Object.Sender.Sender
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Post' Network.Telegram.API.Bot.Object.Update.Callback.Notification.Notification
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Post' Network.Telegram.API.Bot.Object.Update.Message.Keyboard.Keyboard
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Capacity 'Network.Telegram.API.Bot.Property.Persistable.Purge' Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Contact' ('Network.Telegram.API.Bot.Property.Persistable.Direct' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Contact' ('Network.Telegram.API.Bot.Property.Persistable.Reply' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Point' ('Network.Telegram.API.Bot.Property.Persistable.Direct' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Point' ('Network.Telegram.API.Bot.Property.Persistable.Reply' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Venue' ('Network.Telegram.API.Bot.Property.Persistable.Direct' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Info' ('Network.Telegram.API.Bot.Property.Persistable.Venue' ('Network.Telegram.API.Bot.Property.Persistable.Reply' 'Network.Telegram.API.Bot.Property.Persistable.Post')) Network.Telegram.API.Bot.Object.Update.Message.Content.Info.Info
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Member' 'Network.Telegram.API.Bot.Property.Persistable.Kick' Network.Telegram.API.Bot.Object.Member.Member
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Member' 'Network.Telegram.API.Bot.Property.Persistable.Unban' Network.Telegram.API.Bot.Object.Member.Member
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Message' ('Network.Telegram.API.Bot.Property.Persistable.Direct' 'Network.Telegram.API.Bot.Property.Persistable.Post') Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Message' ('Network.Telegram.API.Bot.Property.Persistable.Forward' 'Network.Telegram.API.Bot.Property.Persistable.Post') Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Property.Persistable: instance Network.Telegram.API.Bot.Property.Persistable.Persistable Network.Telegram.API.Bot.Property.Persistable.Message' ('Network.Telegram.API.Bot.Property.Persistable.Reply' 'Network.Telegram.API.Bot.Property.Persistable.Post') Network.Telegram.API.Bot.Object.Update.Message.Message
+ Network.Telegram.API.Bot.Property.Persistable: type family Payload (c :: k) o = r | r -> o c
- Network.Telegram.API.Bot.Object.Member: Administrator :: Sender -> Member
+ Network.Telegram.API.Bot.Object.Member: Administrator :: Sender -> Bool -> Powers -> Member
- Network.Telegram.API.Bot.Object.Member: Restricted :: Sender -> POSIXTime -> Member
+ Network.Telegram.API.Bot.Object.Member: Restricted :: Sender -> Restrictions -> POSIXTime -> Member
- Network.Telegram.API.Bot.Object.Sender: Bot :: Int -> (Maybe Text) -> Text -> (Maybe Text) -> (Maybe Text) -> Sender
+ Network.Telegram.API.Bot.Object.Sender: Bot :: Int -> Maybe Text -> Text -> Maybe Text -> Maybe Text -> Sender
- Network.Telegram.API.Bot.Object.Sender: User :: Int -> (Maybe Text) -> Text -> (Maybe Text) -> (Maybe Text) -> Sender
+ Network.Telegram.API.Bot.Object.Sender: User :: Int -> Maybe Text -> Text -> Maybe Text -> Maybe Text -> Sender
- Network.Telegram.API.Bot.Object.Update.Message.Content: Attachment :: (Maybe Text) -> File -> Content
+ Network.Telegram.API.Bot.Object.Update.Message.Content: Attachment :: Maybe Text -> File -> Content
- Network.Telegram.API.Bot.Object.Update.Message.Content.File: Animation :: Text -> Int -> Int -> Int -> (Maybe Size) -> (Maybe Text) -> (Maybe Text) -> (Maybe Int) -> File
+ Network.Telegram.API.Bot.Object.Update.Message.Content.File: Animation :: Text -> Int -> Int -> Int -> Maybe Size -> Maybe Text -> Maybe Text -> Maybe Int -> File
- Network.Telegram.API.Bot.Object.Update.Message.Content.File: Audio :: Text -> Int -> (Maybe Text) -> (Maybe Text) -> (Maybe Text) -> (Maybe Int) -> (Maybe Size) -> File
+ Network.Telegram.API.Bot.Object.Update.Message.Content.File: Audio :: Text -> Int -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Int -> Maybe Size -> File
- Network.Telegram.API.Bot.Object.Update.Message.Content.File: Document :: Text -> (Maybe Size) -> (Maybe Text) -> (Maybe Text) -> (Maybe Int) -> File
+ Network.Telegram.API.Bot.Object.Update.Message.Content.File: Document :: Text -> Maybe Size -> Maybe Text -> Maybe Text -> Maybe Int -> File
- Network.Telegram.API.Bot.Object.Update.Message.Content.File: Video :: Text -> Int -> Int -> Int -> (Maybe Size) -> (Maybe Text) -> (Maybe Int) -> File
+ Network.Telegram.API.Bot.Object.Update.Message.Content.File: Video :: Text -> Int -> Int -> Int -> Maybe Size -> Maybe Text -> Maybe Int -> File
- Network.Telegram.API.Bot.Object.Update.Message.Content.File: Voice :: Text -> Int -> (Maybe Text) -> (Maybe Int) -> File
+ Network.Telegram.API.Bot.Object.Update.Message.Content.File: Voice :: Text -> Int -> Maybe Text -> Maybe Int -> File
- Network.Telegram.API.Bot.Object.Update.Message.Content.Info: Contact :: (Maybe Int) -> Text -> (Maybe Text) -> Text -> (Maybe Text) -> Info
+ Network.Telegram.API.Bot.Object.Update.Message.Content.Info: Contact :: Maybe Int -> Text -> Maybe Text -> Text -> Maybe Text -> Info
- Network.Telegram.API.Bot.Object.Update.Message.Content.Info: Venue :: Location -> Text -> Text -> (Maybe Text) -> (Maybe Text) -> Info
+ Network.Telegram.API.Bot.Object.Update.Message.Content.Info: Venue :: Location -> Text -> Text -> Maybe Text -> Maybe Text -> Info
- Network.Telegram.API.Bot.Object.Update.Message.Content.Size: Size :: Text -> Int -> Int -> (Maybe Int) -> Size
+ Network.Telegram.API.Bot.Object.Update.Message.Content.Size: Size :: Text -> Int -> Int -> Maybe Int -> Size
Files
- CHANGELOG.md +7/−0
- Network/Telegram/API/Bot/Object.hs +1/−0
- Network/Telegram/API/Bot/Object/Member.hs +10/−6
- Network/Telegram/API/Bot/Object/Member/Powers.hs +21/−0
- Network/Telegram/API/Bot/Object/Member/Restrictions.hs +17/−0
- Network/Telegram/API/Bot/Object/Update/Message.hs +1/−3
- Network/Telegram/API/Bot/Object/Update/Message/Content/Location.hs +5/−1
- Network/Telegram/API/Bot/Property/Persistable.hs +91/−22
- telega.cabal +5/−3
CHANGELOG.md view
@@ -62,3 +62,10 @@ * Define `Messaging` datatype to separate direct, reply and forward `Message` * Make first argument of `Payload` type family poly kinded (enable `PolyKinds`) * Define `Persistable` instance for `Directly`, `Forwarding` and `Replying` `Message`++# 0.1.9+* Move `Messaging` datatype to `Persistable` module and make it over `Capacity` parameter+* Define `Persistable` instances for `Info` datatype (for direct and reply messages)+* Add ticks to all constructors of `Capacity` to surround them from two sides in promoted versions+* Define `Persistable` instance for `Member` (for kicking and unbanning only)+* Define `Powers` and `Restrictions` datatypes within created `Member` submodule
Network/Telegram/API/Bot/Object.hs view
@@ -18,3 +18,4 @@ type instance Object Origin = () type instance Object Callback = () type instance Object Button = ()+type instance Object Info = ()
Network/Telegram/API/Bot/Object/Member.hs view
@@ -1,8 +1,12 @@-module Network.Telegram.API.Bot.Object.Member (Member (..)) where+module Network.Telegram.API.Bot.Object.Member (Member (..), module Exports) where -import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import Network.Telegram.API.Bot.Object.Member.Powers as Exports+import Network.Telegram.API.Bot.Object.Member.Restrictions as Exports++import "aeson" Data.Aeson (FromJSON (parseJSON), Value (Object), withObject, (.:)) import "base" Control.Applicative (Applicative ((<*>))) import "base" Control.Monad (Monad ((>>=)), fail)+import "base" Data.Bool (Bool) import "base" Data.Function (($)) import "base" Data.Functor ((<$>)) import "base" Text.Show (Show)@@ -13,9 +17,9 @@ data Member = Creator Sender- | Administrator Sender+ | Administrator Sender Bool Powers | Member Sender- | Restricted Sender POSIXTime+ | Restricted Sender Restrictions POSIXTime | Left Sender | Kicked Sender POSIXTime deriving Show@@ -23,9 +27,9 @@ instance FromJSON Member where parseJSON = withObject "Member" $ \v -> v .: "status" >>= \case ("creator" :: Text) -> Creator <$> v .: "user"- ("administrator" :: Text) -> Administrator <$> v .: "user"+ ("administrator" :: Text) -> Administrator <$> v .: "user" <*> v .: "can_be_edited" <*> parseJSON (Object v) ("member" :: Text) -> Member <$> v .: "user"- ("restricted" :: Text) -> Restricted <$> v .: "user" <*> v .: "until_date"+ ("restricted" :: Text) -> Restricted <$> v .: "user" <*> parseJSON (Object v) <*> v .: "until_date" ("left" :: Text) -> Left <$> v .: "user" ("kicked" :: Text) -> Kicked <$> v .: "user" <*> v.: "until_date" _ -> fail "Status of chat member is not defined"
+ Network/Telegram/API/Bot/Object/Member/Powers.hs view
@@ -0,0 +1,21 @@+module Network.Telegram.API.Bot.Object.Member.Powers (Powers (..)) where++import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import "base" Data.Bool (Bool)+import "base" Control.Applicative ((<*>))+import "base" Data.Function (($))+import "base" Data.Functor ((<$>))+import "base" Text.Show (Show)++data Powers = Powers Bool Bool Bool Bool Bool Bool Bool Bool deriving Show++instance FromJSON Powers where+ parseJSON = withObject "Powers" $ \v -> Powers+ <$> v .: "can_change_info"+ <*> v .: "can_post_messages"+ <*> v .: "can_edit_messages"+ <*> v .: "can_delete_messages"+ <*> v .: "can_invite_users"+ <*> v .: "can_restrict_members"+ <*> v .: "can_pin_messages"+ <*> v .: "can_promote_members"
+ Network/Telegram/API/Bot/Object/Member/Restrictions.hs view
@@ -0,0 +1,17 @@+module Network.Telegram.API.Bot.Object.Member.Restrictions (Restrictions (..)) where++import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import "base" Data.Bool (Bool)+import "base" Control.Applicative ((<*>))+import "base" Data.Function (($))+import "base" Data.Functor ((<$>))+import "base" Text.Show (Show)++data Restrictions = Restrictions Bool Bool Bool Bool deriving Show++instance FromJSON Restrictions where+ parseJSON = withObject "Restrictions" $ \v -> Restrictions+ <$> v .: "can_send_messages"+ <*> v .: "can_send_media_messages"+ <*> v .: "can_send_other_messages"+ <*> v .: "can_add_web_page_previews"
Network/Telegram/API/Bot/Object/Update/Message.hs view
@@ -1,4 +1,4 @@-module Network.Telegram.API.Bot.Object.Update.Message (Message (..), Messaging (..), module Exports) where+module Network.Telegram.API.Bot.Object.Update.Message (Message (..), module Exports) where import Network.Telegram.API.Bot.Object.Update.Message.Content as Exports import Network.Telegram.API.Bot.Object.Update.Message.Keyboard as Exports@@ -16,8 +16,6 @@ import Network.Telegram.API.Bot.Object.Update.Message.Content (Content) import Network.Telegram.API.Bot.Object.Update.Message.Origin (Origin (Private, Group, Supergroup, Channel))--data Messaging = Directly | Forwarding | Replying data Message = Direct Int Origin Content
Network/Telegram/API/Bot/Object/Update/Message/Content/Location.hs view
@@ -1,6 +1,6 @@ module Network.Telegram.API.Bot.Object.Update.Message.Content.Location (Location (..)) where -import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import "aeson" Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), object, withObject, (.:), (.=)) import "base" Control.Applicative ((<*>)) import "base" Data.Function (($)) import "base" Data.Functor ((<$>))@@ -13,3 +13,7 @@ instance FromJSON Location where parseJSON = withObject "Location" $ \v -> Location <$> v .: "longitude" <*> v .: "latitude"++instance ToJSON Location where+ toJSON (Location latitude longitude) = object+ ["latitude" .= latitude, "longitude" .= longitude]
Network/Telegram/API/Bot/Property/Persistable.hs view
@@ -1,4 +1,5 @@-module Network.Telegram.API.Bot.Property.Persistable (Persistable (..), Payload, PL (..), Capacity (..)) where+module Network.Telegram.API.Bot.Property.Persistable+ (Persistable (..), Payload, PL (..), Capacity (..), Message' (..)) where import "aeson" Data.Aeson (FromJSON, Value, decode, object, (.=)) import "base" Control.Exception (try)@@ -6,7 +7,7 @@ import "base" Data.Function (flip, (.), ($)) import "base" Data.Functor (Functor (fmap), (<$>)) import "base" Data.Int (Int, Int64)-import "base" Data.Maybe (fromJust)+import "base" Data.Maybe (Maybe, fromJust) import "base" Data.Semigroup (Semigroup ((<>))) import "base" Data.String (String) import "base" Data.Tuple (snd)@@ -19,25 +20,44 @@ import Network.Telegram.API.Bot.Core (Telegram, Token (Token), Ok, result) import Network.Telegram.API.Bot.Object (Object, Keyboard, Notification, Member, Sender)-import Network.Telegram.API.Bot.Object.Update.Message (Message, Messaging (Directly, Forwarding, Replying))+import Network.Telegram.API.Bot.Object.Update.Message (Message)+import Network.Telegram.API.Bot.Object.Update.Message.Content.Info (Info)+import Network.Telegram.API.Bot.Object.Update.Message.Content.Location (Location) -data Capacity = Fetch | Post | Edit | Purge+data Capacity = Post' | Fetch' | Edit' | Purge' newtype PL c o a = PL a type family Payload (c :: k) o = r | r -> o c -type instance Payload 'Post Keyboard = PL 'Post Keyboard (Int64, Text, Keyboard)-type instance Payload 'Edit Keyboard = PL 'Edit Keyboard (Int64, Int, Keyboard)-type instance Payload 'Fetch Member = PL 'Fetch Member (Int64, Int)-type instance Payload 'Purge Message = PL 'Purge Message (Int64, Int)-type instance Payload 'Post Notification = PL 'Post Notification (Text, Text)-type instance Payload 'Fetch Sender = PL 'Fetch Sender ()+type instance Payload 'Post' Keyboard = PL 'Post' Keyboard (Int64, Text, Keyboard)+type instance Payload 'Edit' Keyboard = PL 'Edit' Keyboard (Int64, Int, Keyboard)+type instance Payload 'Fetch' Member = PL 'Fetch' Member (Int64, Int)+type instance Payload 'Edit' Message = PL 'Edit' Message (Int64, Int, Text)+type instance Payload 'Purge' Message = PL 'Purge' Message (Int64, Int)+type instance Payload 'Post' Notification = PL 'Post' Notification (Text, Text)+type instance Payload 'Fetch' Sender = PL 'Fetch' Sender () -type instance Payload 'Directly Message = PL 'Directly Message (Int64, Text)-type instance Payload 'Forwarding Message = PL 'Forwarding Message (Int64, Int64, Int)-type instance Payload 'Replying Message = PL 'Replying Message (Int64, Int, Text)+data Message' = Direct' Capacity | Forward' Capacity | Reply' Capacity +type instance Payload ('Direct' 'Post') Message = PL ('Direct' 'Post') Message (Int64, Text)+type instance Payload ('Forward' 'Post') Message = PL ('Forward' 'Post') Message (Int64, Int64, Int)+type instance Payload ('Reply' 'Post') Message = PL ('Reply' 'Post') Message (Int64, Int, Text)++data Info' = Point' Message' | Contact' Message' | Venue' Message'++type instance Payload ('Point' ('Direct' 'Post')) Info = PL ('Point' ('Direct' 'Post')) Info (Int64, Location, Int)+type instance Payload ('Contact' ('Direct' 'Post')) Info = PL ('Contact' ('Direct' 'Post')) Info (Int64, Text, Text, Maybe Text, Maybe Text)+type instance Payload ('Venue' ('Direct' 'Post')) Info = PL ('Venue' ('Direct' 'Post')) Info (Int64, Location, Text, Text, Maybe Text, Maybe Text)+type instance Payload ('Point' ('Reply' 'Post')) Info = PL ('Point' ('Reply' 'Post')) Info (Int64, Int, Location, Int)+type instance Payload ('Contact' ('Reply' 'Post')) Info = PL ('Contact' ('Reply' 'Post')) Info (Int64, Int, Text, Text, Maybe Text, Maybe Text)+type instance Payload ('Venue' ('Reply' 'Post')) Info = PL ('Venue' ('Reply' 'Post')) Info (Int64, Int, Location, Text, Text, Maybe Text, Maybe Text)++data Member' = Kick' | Unban'++type instance Payload 'Kick' Member = PL 'Kick' Member (Int64, Int, Int)+type instance Payload 'Unban' Member = PL 'Unban' Member (Int64, Int)+ class Object o => Persistable c o where {-# MINIMAL payload, endpoint #-} payload :: Payload c o -> Value@@ -50,42 +70,91 @@ . fmap (fromJust . join . fmap result . decode @(Ok a) . responseBody) . flip (post session) p $ "https://api.telegram.org/" <> unpack token <> "/" <> e -instance Persistable 'Edit Keyboard where+instance Persistable 'Edit' Keyboard where payload (PL (chat_id, message_id, reply_markup)) = object ["chat_id" .= chat_id, "message_id" .= message_id, "reply_markup" .= reply_markup] endpoint _ = "editMessageReplyMarkup" -instance Persistable 'Post Keyboard where+instance Persistable 'Post' Keyboard where payload (PL (chat_id, text, kb)) = object ["chat_id" .= chat_id, "text" .= text, "reply_markup" .= kb] endpoint _ = "sendMessage" -instance Persistable 'Fetch Member where+instance Persistable 'Fetch' Member where payload (PL (chat_id, user_id)) = object ["chat_id" .= chat_id, "user_id" .= user_id] endpoint _ = "getChatMember" -instance Persistable 'Directly Message where+instance Persistable ('Direct' 'Post') Message where payload (PL (chat_id, text)) = object ["chat_id" .= chat_id, "text" .= text] endpoint _ = "sendMessage" -instance Persistable 'Forwarding Message where+instance Persistable ('Forward' 'Post') Message where payload (PL (chat_id, from_chat_id, message_id)) = object ["chat_id" .= chat_id, "from_chat_id" .= from_chat_id, "message_id" .= message_id] endpoint _ = "forwardMessage" -instance Persistable 'Replying Message where+instance Persistable ('Reply' 'Post') Message where payload (PL (chat_id, reply_to_message_id, text)) = object ["chat_id" .= chat_id, "reply_to_message_id" .= reply_to_message_id, "text" .= text] endpoint _ = "sendMessage" -instance Persistable 'Purge Message where+instance Persistable 'Purge' Message where payload (PL (chat_id, message_id)) = object ["chat_id" .= chat_id, "message_id" .= message_id] endpoint _ = "deleteMessage" -instance Persistable 'Post Notification where+instance Persistable 'Post' Notification where payload (PL (cbq_id, text)) = object ["callback_query_id" .= cbq_id, "text" .= text] endpoint _ = "answerCallbackQuery" -instance Persistable 'Fetch Sender where+instance Persistable 'Fetch' Sender where payload (PL ()) = object [] endpoint _ = "getMe"++instance Persistable 'Edit' Message where+ payload (PL (chat_id, message_id, text)) = object+ ["chat_id" .= chat_id, "message_id" .= message_id, "text" .= text]+ endpoint _ = "editMessageText"++instance Persistable ('Point' ('Direct' 'Post')) Info where+ payload (PL (chat_id, location, live_period)) = object+ ["chat_id" .= chat_id, "location" .= location, "live_period" .= live_period]+ endpoint _ = "sendLocation"++instance Persistable ('Contact' ('Direct' 'Post')) Info where+ payload (PL (chat_id, phone_number, first_name, last_name, vcard)) =+ object ["chat_id" .= chat_id, "phone_number" .= phone_number,+ "first_name" .= first_name, "last_name" .= last_name, "vcard" .= vcard]+ endpoint _ = "sendContact"++instance Persistable ('Venue' ('Direct' 'Post')) Info where+ payload (PL (chat_id, location, title, address, foursquare_id, foursquare_type)) = object+ ["chat_id" .= chat_id, "location" .= location, "title" .= title, "address" .= address,+ "foursquare_id" .= foursquare_id, "foursquare_type" .= foursquare_type]+ endpoint _ = "sendVenue"++instance Persistable ('Point' ('Reply' 'Post')) Info where+ payload (PL (chat_id, reply_to_message_id, location, live_period)) = object+ ["chat_id" .= chat_id, "reply_to_message_id" .= reply_to_message_id,+ "location" .= location, "live_period" .= live_period]+ endpoint _ = "sendLocation"++instance Persistable ('Contact' ('Reply' 'Post')) Info where+ payload (PL (chat_id, reply_to_message_id, phone_number, first_name, last_name, vcard)) = object+ ["chat_id" .= chat_id, "reply_to_message_id" .= reply_to_message_id, "phone_number" .= phone_number,+ "first_name" .= first_name, "last_name" .= last_name, "vcard" .= vcard]+ endpoint _ = "sendContact"++instance Persistable ('Venue' ('Reply' 'Post')) Info where+ payload (PL (chat_id, reply_to_message_id, location, title, address, foursquare_id, foursquare_type)) = object+ ["chat_id" .= chat_id, "reply_to_message_id" .= reply_to_message_id, "location" .= location, "title" .= title,+ "address" .= address, "foursquare_id" .= foursquare_id, "foursquare_type" .= foursquare_type]+ endpoint _ = "sendVenue"++instance Persistable 'Kick' Member where+ payload (PL (chat_id, user_id, until_date)) = object+ ["chat_id" .= chat_id, "user_id" .= user_id, "until_date" .= until_date]+ endpoint _ = "kickChatMember"++instance Persistable 'Unban' Member where+ payload (PL (chat_id, user_id)) = object ["chat_id" .= chat_id, "user_id" .= user_id]+ endpoint _ = "unbanChatMember"
telega.cabal view
@@ -1,5 +1,5 @@ name: telega-version: 0.1.8+version: 0.1.9 synopsis: Telegram Bot API binding description: High-level bindings, typed entities, inline mode only homepage: https://github.com/iokasimov/telega@@ -23,6 +23,8 @@ Network.Telegram.API.Bot.Core Network.Telegram.API.Bot.Object Network.Telegram.API.Bot.Object.Member+ Network.Telegram.API.Bot.Object.Member.Powers+ Network.Telegram.API.Bot.Object.Member.Restrictions Network.Telegram.API.Bot.Object.Sender Network.Telegram.API.Bot.Object.Update Network.Telegram.API.Bot.Object.Update.Callback@@ -44,6 +46,6 @@ build-depends: base == 4.*, transformers, lens, aeson, text, time, http-client, wreq default-extensions: DataKinds, LambdaCase, OverloadedStrings, NoImplicitPrelude, PackageImports, AllowAmbiguousTypes, MultiParamTypeClasses, ScopedTypeVariables, UndecidableInstances, UndecidableSuperClasses,- TypeApplications, TypeFamilies, TypeFamilyDependencies, TypeOperators, PolyKinds+ FlexibleInstances, TypeApplications, TypeFamilies, TypeFamilyDependencies, TypeOperators, PolyKinds default-language: Haskell2010- ghc-options: -Wall -fno-warn-tabs+ ghc-options: -Wall -fno-warn-tabs -fprint-explicit-kinds