skype4hs-0.0.0.0: src/Network/Skype/Command/ChatMessage.hs
module Network.Skype.Command.ChatMessage where
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Data.Monoid ((<>))
import Network.Skype.Command.Utils
import Network.Skype.Core
import Network.Skype.Protocol
import qualified Data.ByteString.Char8 as BC
import qualified Data.Text.Encoding as T
-- | Returns the time when message was sent.
getTimestamp :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m Timestamp
getTimestamp chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageTimestamp timestamp) -> return $ Just timestamp
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " TIMESTAMP"
-- | Returns the skype name of the sender of this message.
getSender :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m UserID
getSender chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageFromHandle userHandle) -> return $ Just userHandle
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " FROM_HANDLE"
-- | Returns the displayed name of the sender of this message.
getSenderDisplayName :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m UserDisplayName
getSenderDisplayName chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageFromDisplayName userHandle) -> return $ Just userHandle
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " FROM_DISPNAME"
-- | Returns the message type.
getType :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m ChatMessageType
getType chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageType messageType) -> return $ Just messageType
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID) <> " TYPE"
-- | Returns the message status.
getStatus :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m ChatMessageStatus
getStatus chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageStatus messageStatus) -> return $ Just messageStatus
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " STATUS"
-- | Returns the leave reason.
getLeaveReason :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m (Maybe ChatMessageLeaveReason)
getLeaveReason chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageLeaveReason leaveReason) -> return $ Just leaveReason
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " LEAVEREASON"
-- | Returns the chat which this message belongs.
getChat :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m ChatID
getChat chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageChatName chatID) -> return $ Just chatID
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " CHATNAME"
-- | Returns all users that have been added to the chat.
getAllUsers :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m [UserID]
getAllUsers chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageUsers userIDs) -> return $ Just userIDs
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " USERS"
-- | Indicates if the chat message is editable.
isEditable :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m Bool
isEditable chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageIsEditable editable) -> return $ Just editable
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " IS_EDITABLE"
-- | Returns the content of this chat message.
getBody :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> SkypeT m ChatMessageBody
getBody chatMessageID = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageBody messageBody) -> return $ Just messageBody
_ -> return Nothing
where
command = "GET CHATMESSAGE " <> BC.pack (show chatMessageID) <> " BODY"
-- | Sets the content of this chat message.
setBody :: (MonadBaseControl IO m, MonadIO m, MonadSkype m)
=> ChatMessageID
-> ChatMessageBody
-> SkypeT m ChatMessageBody
setBody chatMessageID content = executeCommandWithID command $ \response ->
case response of
ChatMessage _ (ChatMessageBody messageBody) -> return $ Just messageBody
_ -> return Nothing
where
command = "SET CHATMESSAGE " <> BC.pack (show chatMessageID)
<> " BODY "
<> T.encodeUtf8 content