telega 0.1.0 → 0.1.1
raw patch · 8 files changed
+76/−12 lines, 8 files
Files
- CHANGELOG.md +5/−0
- Network/Telegram/API/Bot/Capacity.hs +1/−0
- Network/Telegram/API/Bot/Capacity/Droppable.hs +28/−0
- Network/Telegram/API/Bot/Object.hs +6/−5
- Network/Telegram/API/Bot/Object/Callback.hs +2/−3
- Network/Telegram/API/Bot/Object/Notification.hs +16/−0
- Network/Telegram/API/Bot/Object/Update.hs +15/−3
- telega.cabal +3/−1
CHANGELOG.md view
@@ -0,0 +1,5 @@+# 0.1.1+* Define `chat` lens for `Update` datatype+* Add string identificator to `Callback` datatype+* Define `Notification` datatype+* Define `Droppable` typeclass
Network/Telegram/API/Bot/Capacity.hs view
@@ -3,3 +3,4 @@ import Network.Telegram.API.Bot.Capacity.Purgeable as Exports import Network.Telegram.API.Bot.Capacity.Postable as Exports import Network.Telegram.API.Bot.Capacity.Editable as Exports+import Network.Telegram.API.Bot.Capacity.Droppable as Exports
+ Network/Telegram/API/Bot/Capacity/Droppable.hs view
@@ -0,0 +1,28 @@+module Network.Telegram.API.Bot.Capacity.Droppable (Droppable (..), Drop) where++import "aeson" Data.Aeson (Value, decode)+import "base" Control.Exception (try)+import "base" Control.Monad (join, void)+import "base" Data.Maybe (fromJust)+import "http-client" Network.HTTP.Client (Response (responseBody))+import "text" Data.Text (unpack)+import "transformers" Control.Monad.Trans.Class (lift)+import "transformers" Control.Monad.Trans.Except (ExceptT (ExceptT))+import "transformers" Control.Monad.Trans.Reader (ask)++import qualified "wreq" Network.Wreq.Session as Wreq (post)++import Network.Telegram.API.Bot.Core (Telegram, Token (Token), Ok, result)++type family Drop a = r | r -> a++class Droppable a where+ {-# MINIMAL drop_value, drop_endpoint #-}+ drop_value :: Drop a -> Value+ drop_endpoint :: Drop a -> String++ drop :: Drop a -> Telegram e ()+ drop x = snd <$> ask >>= \(session, Token token) -> void . lift . ExceptT . try+ . fmap (fromJust . join . fmap result . decode @(Ok ()) . responseBody)+ . flip (Wreq.post session) (drop_value x) $+ "https://api.telegram.org/" <> unpack token <> "/" <> drop_endpoint x
Network/Telegram/API/Bot/Object.hs view
@@ -1,9 +1,10 @@ module Network.Telegram.API.Bot.Object (module Exports) where -import Network.Telegram.API.Bot.Object.Chat as Exports+import Network.Telegram.API.Bot.Object.Update as Exports+import Network.Telegram.API.Bot.Object.Notification 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-import Network.Telegram.API.Bot.Object.Button as Exports+import Network.Telegram.API.Bot.Object.Chat as Exports import Network.Telegram.API.Bot.Object.Callback as Exports-import Network.Telegram.API.Bot.Object.Keyboard as Exports-import Network.Telegram.API.Bot.Object.Message as Exports-import Network.Telegram.API.Bot.Object.Update as Exports+import Network.Telegram.API.Bot.Object.Button as Exports
Network/Telegram/API/Bot/Object/Callback.hs view
@@ -3,11 +3,10 @@ import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:)) import "text" Data.Text (Text) -import Network.Telegram.API.Bot.Object.From (From) import Network.Telegram.API.Bot.Object.Message (Message) -data Callback = Datatext From Message Text deriving Show+data Callback = Datatext Text Message Text deriving Show instance FromJSON Callback where parseJSON = withObject "Callback" $ \v ->- Datatext <$> v .: "from" <*> v .: "message" <*> v .: "data"+ Datatext <$> v .: "id" <*> v .: "message" <*> v .: "data"
+ Network/Telegram/API/Bot/Object/Notification.hs view
@@ -0,0 +1,16 @@+module Network.Telegram.API.Bot.Object.Notification (Notification) where++import "aeson" Data.Aeson (object, (.=))+import "text" Data.Text (Text)++import Network.Telegram.API.Bot.Capacity.Droppable+ (Drop, Droppable (drop_value, drop_endpoint))++data Notification++type instance Drop Notification = (Text, Text)++instance Droppable Notification where+ drop_value (cbq_id, text) =+ object ["callback_query_id" .= cbq_id, "text" .= text]+ drop_endpoint _ = "answerCallbackQuery"
Network/Telegram/API/Bot/Object/Update.hs view
@@ -1,11 +1,13 @@-module Network.Telegram.API.Bot.Object.Update (Update (..)) where+module Network.Telegram.API.Bot.Object.Update (Update (..), chat) 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.Object.Callback (Callback)-import Network.Telegram.API.Bot.Object.Message (Message)+import Network.Telegram.API.Bot.Object.Callback (Callback (Datatext))+import Network.Telegram.API.Bot.Object.Chat (Chat)+import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command)) import Network.Telegram.API.Bot.Property.Identifiable (Identifiable (identificator), Identificator) @@ -28,3 +30,13 @@ 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_
telega.cabal view
@@ -1,5 +1,5 @@ name: telega-version: 0.1.0+version: 0.1.1 synopsis: Telegram Bot API binding description: High-level bindings, typed entities, inline mode only homepage: https://github.com/iokasimov/telega@@ -28,8 +28,10 @@ Network.Telegram.API.Bot.Object.Callback Network.Telegram.API.Bot.Object.Keyboard Network.Telegram.API.Bot.Object.Message+ Network.Telegram.API.Bot.Object.Notification Network.Telegram.API.Bot.Object.Update Network.Telegram.API.Bot.Capacity+ Network.Telegram.API.Bot.Capacity.Droppable Network.Telegram.API.Bot.Capacity.Editable Network.Telegram.API.Bot.Capacity.Postable Network.Telegram.API.Bot.Capacity.Purgeable