module Network.XMPP.MUC where
import Network.XMPP.XMPPMonad
import Network.XMPP.Stanzas
import Network.XMPP.XMLParse
import Network.XMPP.JID
matchesBare :: String -> StanzaPredicate
matchesBare bare = attributeMatches "from" ((==bare).getBareJid)
joinGroupchat :: String
-> String
-> String
-> XMPP Integer
joinGroupchat nick room password = do
let joinStanza' = if null password then joinStanza
else joinPassStanza
joinStanza = XML "presence"
[("to",room++"/"++nick)]
[XML "x" [("xmlns","http://jabber.org/protocol/muc")] []]
joinPassStanza = XML "presence"
[("to",room++"/"++nick)]
[XML "x" [("xmlns","http://jabber.org/protocol/muc")]
[XML "password" [] [CData password]]]
sendStanza joinStanza'
return $ 0
leaveGroupchat :: String -> XMPP ()
leaveGroupchat room = sendStanza $ XML "presence"
[("to",room),("type","unavailable")] []
isGroupchatMessage :: StanzaPredicate
isGroupchatMessage = isMessage `conj` attributeMatches "type" (=="groupchat")
isGroupchatPrivmsg :: String -> StanzaPredicate
isGroupchatPrivmsg room = matchesBare room `conj` attributeMatches "type" (=="chat")
`conj` attributeMatches "from" ((/="") . getResource)
sendGroupchatMessage :: String
-> String
-> XMPP ()
sendGroupchatMessage room body =
sendStanza $ XML "message"
[("to",room),
("type","groupchat")]
[XML "body" [] [CData body]]
sendGroupchatPrivateMessage :: String
-> String
-> String
-> XMPP ()
sendGroupchatPrivateMessage nick room body =
sendStanza $ XML "message"
[("to",room++"/"++nick),
("type","chat")]
[XML "body" [] [CData body]]