telega 0.1.1 → 0.1.2
raw patch · 7 files changed
+65/−25 lines, 7 files
Files
- CHANGELOG.md +6/−0
- Network/Telegram/API/Bot.hs +1/−0
- Network/Telegram/API/Bot/Has.hs +6/−0
- Network/Telegram/API/Bot/Object.hs +1/−0
- Network/Telegram/API/Bot/Object/Member.hs +19/−0
- Network/Telegram/API/Bot/Object/Update.hs +26/−14
- telega.cabal +6/−11
CHANGELOG.md view
@@ -3,3 +3,9 @@ * Add string identificator to `Callback` datatype * Define `Notification` datatype * Define `Droppable` typeclass++# 0.1.2+* Define `Member` datatype+* Add new `Membership` constructor to `Update` datatype+* Define `Has` typeclass to get access objects within other objects+* Replace `chat` lens on `Has Update Chat` instance
Network/Telegram/API/Bot.hs view
@@ -3,4 +3,5 @@ import Network.Telegram.API.Bot.Property as Exports import Network.Telegram.API.Bot.Capacity as Exports import Network.Telegram.API.Bot.Object as Exports+import Network.Telegram.API.Bot.Has as Exports import Network.Telegram.API.Bot.Core as Exports
+ Network/Telegram/API/Bot/Has.hs view
@@ -0,0 +1,6 @@+module Network.Telegram.API.Bot.Has (Has (..)) where++import "lens" Control.Lens (Lens')++class Has source target where+ focus :: Lens' source target
Network/Telegram/API/Bot/Object.hs view
@@ -2,6 +2,7 @@ import Network.Telegram.API.Bot.Object.Update as Exports import Network.Telegram.API.Bot.Object.Notification as Exports+import Network.Telegram.API.Bot.Object.Member as Exports import Network.Telegram.API.Bot.Object.Message as Exports import Network.Telegram.API.Bot.Object.Keyboard as Exports import Network.Telegram.API.Bot.Object.From as Exports
+ Network/Telegram/API/Bot/Object/Member.hs view
@@ -0,0 +1,19 @@+module Network.Telegram.API.Bot.Object.Member (Member (..)) where++import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import "aeson" Data.Aeson.Types (Object, Parser)+import "base" Control.Applicative (Alternative ((<|>)))++import Network.Telegram.API.Bot.Object.Chat (Chat)+import Network.Telegram.API.Bot.Object.From (From)++data Member = Gone Chat From | Joined Chat [From] deriving Show++instance FromJSON Member where+ parseJSON = withObject "Member" $ \v -> gone v <|> joined v where++ gone :: Object -> Parser Member+ gone v = Gone <$> v .: "chat" <*> v .: "left_chat_member"++ joined :: Object -> Parser Member+ joined v = Joined <$> v .: "chat" <*> v .: "new_chat_members"
Network/Telegram/API/Bot/Object/Update.hs view
@@ -1,42 +1,54 @@-module Network.Telegram.API.Bot.Object.Update (Update (..), chat) where+module Network.Telegram.API.Bot.Object.Update (Update (..)) where import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:)) import "aeson" Data.Aeson.Types (Object, Parser) import "base" Control.Applicative (Alternative ((<|>))) import "lens" Control.Lens (Lens') +import Network.Telegram.API.Bot.Has (Has (focus)) import Network.Telegram.API.Bot.Object.Callback (Callback (Datatext)) import Network.Telegram.API.Bot.Object.Chat (Chat)+import Network.Telegram.API.Bot.Object.Member (Member (Gone, Joined)) import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command)) import Network.Telegram.API.Bot.Property.Identifiable (Identifiable (identificator), Identificator) data Update- = Incoming Int Message- | Query Int Callback+ = Query Int Callback+ | Membership Int Member+ | Incoming Int Message deriving Show type instance Identificator Update = Int instance Identifiable Update where- identificator (Incoming i _) = i identificator (Query i _) = i+ identificator (Membership i _) = i+ identificator (Incoming i _) = i instance FromJSON Update where- parseJSON = withObject "Update" $ \v -> query v <|> incoming v where+ parseJSON = withObject "Update" $ \v ->+ query v <|> membership v <|> incoming v where query :: Object -> Parser Update query v = Query <$> v .: "update_id" <*> v .: "callback_query" + membership :: Object -> Parser Update+ membership v = Membership <$> v .: "update_id" <*> v .: "message"+ incoming :: Object -> Parser Update incoming v = Incoming <$> v .: "update_id" <*> v .: "message" -chat :: Lens' Update Chat-chat f (Incoming upd_id (Command msg_id chat_ from cmd)) =- (\chat' -> Incoming upd_id (Command msg_id chat' from cmd)) <$> f chat_-chat f (Incoming upd_id (Textual msg_id chat_ from txt)) =- (\chat' -> Incoming upd_id (Textual msg_id chat' from txt)) <$> f chat_-chat f (Query upd_id (Datatext cq_id (Command msg_id chat_ from cmd) dttxt)) =- (\chat' -> Query upd_id (Datatext cq_id (Command msg_id chat' from cmd) dttxt)) <$> f chat_-chat f (Query upd_id (Datatext cq_id (Textual msg_id chat_ from txt) dttxt)) =- (\chat' -> Query upd_id (Datatext cq_id (Textual msg_id chat' from txt) dttxt)) <$> f chat_+instance Has Update Chat where+ focus f (Incoming upd_id (Command msg_id chat_ from cmd)) =+ (\chat' -> Incoming upd_id (Command msg_id chat' from cmd)) <$> f chat_+ focus f (Incoming upd_id (Textual msg_id chat_ from txt)) =+ (\chat' -> Incoming upd_id (Textual msg_id chat' from txt)) <$> f chat_+ focus f (Query upd_id (Datatext cq_id (Command msg_id chat_ from cmd) dttxt)) =+ (\chat' -> Query upd_id (Datatext cq_id (Command msg_id chat' from cmd) dttxt)) <$> f chat_+ focus f (Query upd_id (Datatext cq_id (Textual msg_id chat_ from txt) dttxt)) =+ (\chat' -> Query upd_id (Datatext cq_id (Textual msg_id chat' from txt) dttxt)) <$> f chat_+ focus f (Membership upd_id (Gone chat_ users)) =+ (\chat' -> Membership upd_id (Gone chat' users)) <$> f chat_+ focus f (Membership upd_id (Joined chat_ users)) =+ (\chat' -> Membership upd_id (Joined chat' users)) <$> f chat_
telega.cabal view
@@ -1,5 +1,5 @@ name: telega-version: 0.1.1+version: 0.1.2 synopsis: Telegram Bot API binding description: High-level bindings, typed entities, inline mode only homepage: https://github.com/iokasimov/telega@@ -21,12 +21,14 @@ exposed-modules: Network.Telegram.API.Bot Network.Telegram.API.Bot.Core+ Network.Telegram.API.Bot.Has Network.Telegram.API.Bot.Object Network.Telegram.API.Bot.Object.Chat Network.Telegram.API.Bot.Object.From Network.Telegram.API.Bot.Object.Button Network.Telegram.API.Bot.Object.Callback Network.Telegram.API.Bot.Object.Keyboard+ Network.Telegram.API.Bot.Object.Member Network.Telegram.API.Bot.Object.Message Network.Telegram.API.Bot.Object.Notification Network.Telegram.API.Bot.Object.Update@@ -38,15 +40,8 @@ Network.Telegram.API.Bot.Property Network.Telegram.API.Bot.Property.Identifiable build-depends: base == 4.*, transformers, lens, aeson, text, http-client, wreq- default-extensions:- DataKinds- LambdaCase- OverloadedStrings- PackageImports- ScopedTypeVariables- TypeApplications- TypeFamilies- TypeFamilyDependencies- TypeOperators+ default-extensions: DataKinds, LambdaCase, OverloadedStrings,+ MultiParamTypeClasses, PackageImports, ScopedTypeVariables,+ TypeApplications, TypeFamilies, TypeFamilyDependencies, TypeOperators default-language: Haskell2010 ghc-options: -Wall -fno-warn-tabs