packages feed

telega 0.1.0 → 0.1.1

raw patch · 8 files changed

+76/−12 lines, 8 files

Files

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