module Reddit.Actions.User
( getUserInfo
, aboutMe
, getUserComments
, getUserComments'
, getUserPosts
, getUserPosts'
, isUsernameAvailable
, getBlockedUsers
, getFriends
, lookupUserFlair
, setUserFlair ) where
import Reddit.Types.Comment
import Reddit.Types.Empty
import Reddit.Types.Flair hiding (user)
import Reddit.Types.Error
import Reddit.Types.Listing
import Reddit.Types.Options
import Reddit.Types.Post
import Reddit.Types.Reddit
import Reddit.Types.Subreddit
import Reddit.Types.User
import qualified Reddit.Routes.User as Route
import Control.Monad
import Data.Default.Class
import Data.Text (Text)
import Network.API.Builder.Error
import qualified Data.Text as Text
getUserInfo :: Monad m => Username -> RedditT m User
getUserInfo = runRoute . Route.aboutUser
getUserComments :: Monad m => Username -> RedditT m CommentListing
getUserComments = getUserComments' def
getUserComments' :: Monad m => Options CommentID -> Username -> RedditT m CommentListing
getUserComments' opts user = runRoute $ Route.userComments opts user
getUserPosts :: Monad m => Username -> RedditT m PostListing
getUserPosts = getUserPosts' def
getUserPosts' :: Monad m => Options PostID -> Username -> RedditT m PostListing
getUserPosts' opts user = runRoute $ Route.userPosts opts user
isUsernameAvailable :: Monad m => Username -> RedditT m Bool
isUsernameAvailable = runRoute . Route.usernameAvailable
aboutMe :: Monad m => RedditT m User
aboutMe = runRoute Route.aboutMe
getBlockedUsers :: Monad m => RedditT m [Relationship]
getBlockedUsers = do
UserList rs <- runRoute Route.blocked
return rs
getFriends :: Monad m => RedditT m [Relationship]
getFriends = do
UserList rs <- runRoute Route.friends
return rs
lookupUserFlair :: Monad m => SubredditName -> Username -> RedditT m Flair
lookupUserFlair r u = do
res <- liftM flistToListing $ runRoute (Route.lookupUserFlair r u)
case res of
Listing _ _ [f] -> return f
_ -> failWith $ APIError InvalidResponseError
setUserFlair :: Monad m => SubredditName -> Username -> Text -> Text -> RedditT m ()
setUserFlair r u txt cls =
if Text.length txt > 64
then fail "Flair text too long!"
else nothing $ runRoute $ Route.setUserFlair r u txt cls