From 529ca15180f3dde8924fba33d716ae6356a80874 Mon Sep 17 00:00:00 2001 From: Maharramoff <9804406+Maharramoff@users.noreply.github.com> Date: Wed, 15 Apr 2020 17:26:26 +0400 Subject: [PATCH 1/2] SmackMyBitch in Haskell --- Haskell/SmackMyBitch.hs | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Haskell/SmackMyBitch.hs diff --git a/Haskell/SmackMyBitch.hs b/Haskell/SmackMyBitch.hs new file mode 100644 index 0000000..26ec220 --- /dev/null +++ b/Haskell/SmackMyBitch.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ExtendedDefaultRules #-} +{-# LANGUAGE RankNTypes #-} + +module SmackMyBitch + ( sendMsg + ) where + +import Network.HTTP.Client +import Network.HTTP.Client.TLS (tlsManagerSettings) +import Network.HTTP.Types.Status (statusCode) +import LoadEnv +import System.Environment +import System.Random (randomRIO) +import System.Process (readProcess) +import Control.Applicative +import qualified Data.ByteString as B +import qualified Data.ByteString.UTF8 as BU +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import Control.Monad (when) + + +getEnvBS :: String -> IO B.ByteString +getEnvBS = fmap (T.encodeUtf8 . T.pack) . getEnv + +pickRandomMsg :: [msg] -> IO msg +pickRandomMsg msg = (msg !!) Control.Applicative.<$> randomRIO (0, Prelude.length msg - 1) + +apiResponse :: Int -> String +apiResponse code + | code >= 200 = "Message Sent Successfully" + | otherwise = "Failed to send SMS" + +sendMsg :: IO () +sendMsg = do + loadEnv + user <- getEnvBS "USER" + stdout <- readProcess "whoami" [] [] + when (user `B.isInfixOf` BU.fromString stdout) $ do + sid <- getEnvBS "TWILIO_ACCOUNT_SID" + token <- getEnvBS "TWILIO_AUTH_TOKEN" + myNumber <- getEnvBS "MY_NUMBER" + herNumber <- getEnvBS "HER_NUMBER" + manager <- newManager tlsManagerSettings + msgBody <- pickRandomMsg ["Working hard", "Gotta ship this feature", "Someone fucked up the system again"] + let msgPrefix = "Late at work. " + let body = [("Body", msgPrefix <> msgBody), ("From", myNumber), ("To", herNumber)] + let url = "https://api.twilio.com/2010-04-01/Accounts/" ++ BU.toString sid ++ "/Messages.json" + initialRequest <- parseRequest url + let request = applyBasicAuth sid token $ urlEncodedBody body $ initialRequest {method = "POST"} + response <- httpLbs request manager + print (apiResponse (statusCode $ responseStatus response)) From 3e36760d8450470ad0fef3595f9882ca38edb130 Mon Sep 17 00:00:00 2001 From: Maharramoff <9804406+Maharramoff@users.noreply.github.com> Date: Wed, 15 Apr 2020 21:39:27 +0400 Subject: [PATCH 2/2] fix status code handling --- Haskell/SmackMyBitch.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Haskell/SmackMyBitch.hs b/Haskell/SmackMyBitch.hs index 26ec220..52c178d 100644 --- a/Haskell/SmackMyBitch.hs +++ b/Haskell/SmackMyBitch.hs @@ -29,7 +29,7 @@ pickRandomMsg msg = (msg !!) Control.Applicative.<$> randomRIO (0, Prelude.lengt apiResponse :: Int -> String apiResponse code - | code >= 200 = "Message Sent Successfully" + | code == 201 = "Message Sent Successfully" | otherwise = "Failed to send SMS" sendMsg :: IO ()