module Reddit.Actions.Message
( getInbox
, getInbox'
, getUnread
, getUnread'
, markRead
, sendMessage
, sendMessageWithCaptcha
, replyMessage ) where
import Reddit.Types.Captcha
import Reddit.Types.Empty
import Reddit.Types.Listing
import Reddit.Types.Message
import Reddit.Types.Options
import Reddit.Types.Reddit
import Reddit.Types.Thing
import Reddit.Types.User
import qualified Reddit.Routes.Message as Route
import qualified Reddit.Routes.Thing as Route
import Data.Default.Class
import Data.Text (Text)
import Network.API.Builder.Query
getInbox :: Monad m => RedditT m (Listing MessageKind Message)
getInbox :: RedditT m (Listing MessageKind Message)
getInbox = Route -> RedditT m (Listing MessageKind Message)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m (Listing MessageKind Message))
-> Route -> RedditT m (Listing MessageKind Message)
forall a b. (a -> b) -> a -> b
$ Bool -> Options MessageKind -> Route
Route.inbox Bool
False Options MessageKind
forall a. Default a => a
def
getInbox' :: Monad m => Bool -> Options MessageKind -> RedditT m (Listing MessageKind Message)
getInbox' :: Bool
-> Options MessageKind -> RedditT m (Listing MessageKind Message)
getInbox' Bool
m Options MessageKind
o = Route -> RedditT m (Listing MessageKind Message)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m (Listing MessageKind Message))
-> Route -> RedditT m (Listing MessageKind Message)
forall a b. (a -> b) -> a -> b
$ Bool -> Options MessageKind -> Route
Route.inbox Bool
m Options MessageKind
o
getUnread :: Monad m => RedditT m (Listing MessageKind Message)
getUnread :: RedditT m (Listing MessageKind Message)
getUnread = Route -> RedditT m (Listing MessageKind Message)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m (Listing MessageKind Message))
-> Route -> RedditT m (Listing MessageKind Message)
forall a b. (a -> b) -> a -> b
$ Bool -> Options MessageKind -> Route
Route.unread Bool
False Options MessageKind
forall a. Default a => a
def
getUnread' :: Monad m
=> Bool
-> Options MessageKind
-> RedditT m (Listing MessageKind Message)
getUnread' :: Bool
-> Options MessageKind -> RedditT m (Listing MessageKind Message)
getUnread' Bool
m Options MessageKind
o = Route -> RedditT m (Listing MessageKind Message)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m (Listing MessageKind Message))
-> Route -> RedditT m (Listing MessageKind Message)
forall a b. (a -> b) -> a -> b
$ Bool -> Options MessageKind -> Route
Route.unread Bool
m Options MessageKind
o
markRead :: (ToQuery a, Thing a, Monad m) => a -> RedditT m ()
markRead :: a -> RedditT m ()
markRead = RedditT m Empty -> RedditT m ()
forall (m :: * -> *). Monad m => m Empty -> m ()
nothing (RedditT m Empty -> RedditT m ())
-> (a -> RedditT m Empty) -> a -> RedditT m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Route -> RedditT m Empty
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m Empty) -> (a -> Route) -> a -> RedditT m Empty
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Route
forall a. Thing a => a -> Route
Route.readMessage
sendMessage :: Monad m
=> Username
-> Text
-> Text
-> RedditT m ()
sendMessage :: Username -> Text -> Text -> RedditT m ()
sendMessage Username
u Text
s Text
b = RedditT m Empty -> RedditT m ()
forall (m :: * -> *). Monad m => m Empty -> m ()
nothing (RedditT m Empty -> RedditT m ())
-> RedditT m Empty -> RedditT m ()
forall a b. (a -> b) -> a -> b
$ Route -> RedditT m Empty
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m Empty) -> Route -> RedditT m Empty
forall a b. (a -> b) -> a -> b
$ Username -> Text -> Text -> Route
Route.sendMessage Username
u Text
s Text
b
sendMessageWithCaptcha :: Monad m
=> Username
-> Text
-> Text
-> CaptchaID
-> Text
-> RedditT m ()
sendMessageWithCaptcha :: Username -> Text -> Text -> CaptchaID -> Text -> RedditT m ()
sendMessageWithCaptcha Username
u Text
s Text
b CaptchaID
i Text
c = RedditT m Empty -> RedditT m ()
forall (m :: * -> *). Monad m => m Empty -> m ()
nothing (RedditT m Empty -> RedditT m ())
-> RedditT m Empty -> RedditT m ()
forall a b. (a -> b) -> a -> b
$ Route -> RedditT m Empty
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m Empty) -> Route -> RedditT m Empty
forall a b. (a -> b) -> a -> b
$ Username -> Text -> Text -> Route
Route.sendMessage Username
u Text
s Text
b Route -> (CaptchaID, Text) -> Route
`withCaptcha` (CaptchaID
i, Text
c)
replyMessage :: (Monad m, Thing a)
=> a
-> Text
-> RedditT m MessageID
replyMessage :: a -> Text -> RedditT m MessageID
replyMessage a
t Text
b = do
POSTWrapped MessageID
res <- Route -> RedditT m (POSTWrapped MessageID)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Route -> RedditT m a
runRoute (Route -> RedditT m (POSTWrapped MessageID))
-> Route -> RedditT m (POSTWrapped MessageID)
forall a b. (a -> b) -> a -> b
$ a -> Text -> Route
forall a. Thing a => a -> Text -> Route
Route.reply a
t Text
b
MessageID -> RedditT m MessageID
forall (m :: * -> *) a. Monad m => a -> m a
return MessageID
res