tightrope 0.1.0.1 → 0.2.0.0
raw patch · 3 files changed
+27/−27 lines, 3 filesdep ~aesondep ~lensdep ~waiPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aeson, lens, wai, wreq
API changes (from Hackage documentation)
- Network.Tightrope: destination :: HasDestination c_aavL e_aavM => Lens' c_aavL e_aavM
- Network.Tightrope: instance HasDestination Message Room
- Network.Tightrope: instance ToJSON Message
- Network.Tightrope: iconEmoji :: HasIconEmoji c_aavL e_aavM => Lens' c_aavL e_aavM
+ Network.Tightrope: iconEmoji :: HasIconEmoji c_aadj e_aadk => Lens' c_aadj e_aadk
- Network.Tightrope: message :: Icon -> Text -> Text -> Room -> Message
+ Network.Tightrope: message :: Icon -> Text -> Text -> Message
- Network.Tightrope: name :: HasName c_aatp e_aatq => Lens' c_aatp e_aatq
+ Network.Tightrope: name :: HasName c_aab8 e_aab9 => Lens' c_aab8 e_aab9
- Network.Tightrope: say :: Message -> Slack (Response ByteString)
+ Network.Tightrope: say :: Message -> Room -> Slack (Response ByteString)
- Network.Tightrope: source :: HasSource c_aatp e_aatq => Lens' c_aatp e_aatq
+ Network.Tightrope: source :: HasSource c_aab8 e_aab9 => Lens' c_aab8 e_aab9
- Network.Tightrope: text :: HasText c_aatp e_aatq => Lens' c_aatp e_aatq
+ Network.Tightrope: text :: HasText c_aab8 e_aab9 => Lens' c_aab8 e_aab9
- Network.Tightrope: user :: HasUser c_aatp e_aatq => Lens' c_aatp e_aatq
+ Network.Tightrope: user :: HasUser c_aab8 e_aab9 => Lens' c_aab8 e_aab9
- Network.Tightrope: username :: HasUsername c_aavL e_aavM => Lens' c_aavL e_aavM
+ Network.Tightrope: username :: HasUsername c_aadj e_aadk => Lens' c_aadj e_aadk
Files
- Network/Tightrope.hs +17/−21
- changelog.md +4/−0
- tightrope.cabal +6/−6
Network/Tightrope.hs view
@@ -11,13 +11,14 @@ User(..), Channel(..), Icon(..), Room(..), say, bot, message, defaultMessage, Account(..),- source, user, name, text,- iconEmoji, destination, username,+ source, user, name,+ text,+ iconEmoji, username, liftIO ) where import qualified Network.Wai as Wai import qualified Network.Wreq as Wreq-import Control.Lens hiding ((.=))+import Control.Lens (makeFields, (^.), (&), (.~)) import qualified Data.Aeson as Aeson import Data.Aeson ((.=)) import Data.Text (Text)@@ -48,7 +49,6 @@ $(makeFields ''Command) data Message = Message { _messageIconEmoji :: Icon- , _messageDestination :: Room , _messageUsername :: Text , _messageText :: Text }@@ -59,14 +59,12 @@ (Icon "ghost") "Tightrope Bot" "I love Tightrope"- (Public $ Channel "general") -message :: Icon -> Text -> Text -> Room -> Message-message icon username text room =- Message { _messageIconEmoji = icon- , _messageDestination = room- , _messageUsername = username- , _messageText = text+message :: Icon -> Text -> Text -> Message+message i u t =+ Message { _messageIconEmoji = i+ , _messageUsername = u+ , _messageText = t } type Token = String@@ -86,21 +84,19 @@ instance Aeson.ToJSON Icon where toJSON (Icon i) = Aeson.String (mconcat [":", i, ":"]) -instance Aeson.ToJSON Message where- toJSON m = Aeson.object [ "channel" .= (m ^. destination)- , "icon_emoji" .= (m ^. iconEmoji)- , "username" .= (m ^. username)- , "text" .= (m ^. text)- ]- newtype Slack m = Slack (ReaderT Account IO m) deriving (Functor, Applicative, Monad, MonadIO, MonadReader Account) -say :: Message -> Slack (Wreq.Response ByteString)-say msg = do+say :: Message -> Room -> Slack (Wreq.Response ByteString)+say msg room = do Account token path <- ask let opts = Wreq.defaults & Wreq.param "token" .~ [Text.pack token]- liftIO $ Wreq.postWith opts path (Aeson.toJSON msg)+ liftIO $ Wreq.postWith opts path (Aeson.toJSON payload)+ where payload = Aeson.object [ "channel" .= room+ , "icon_emoji" .= (msg ^. iconEmoji)+ , "username" .= (msg ^. username)+ , "text" .= (msg ^. text)+ ] roomFromText :: User -> Text -> Room roomFromText u "directmessage" = Private u
+ changelog.md view
@@ -0,0 +1,4 @@+# 0.2.0.0 - Jul 27 2014++- `say` now takes an explicit room argument+- removed `destination` from `Message`s
tightrope.cabal view
@@ -1,5 +1,5 @@ name: tightrope-version: 0.1.0.1+version: 0.2.0.0 synopsis: Nice API for a Slackbot description: Making bots for Slack is hard! But wait: now it's easy. license: MIT@@ -9,7 +9,7 @@ -- copyright: category: Web build-type: Simple--- extra-source-files:+extra-source-files: changelog.md cabal-version: >=1.10 source-repository head@@ -22,11 +22,11 @@ -- other-extensions: build-depends: wai-extra == 3.*, base == 4.*,- wai,- wreq,- aeson,+ wai == 3.*,+ wreq == 0.1.*,+ aeson == 0.8.*, bytestring,- lens,+ lens == 4.3.*, mtl, text, containers,