diff --git a/src/plugins/mod.rs b/src/plugins/mod.rs index a6c8b7c..2a54781 100644 --- a/src/plugins/mod.rs +++ b/src/plugins/mod.rs @@ -8,3 +8,4 @@ pub mod ibb; pub mod stanza; pub mod stanza_debug; pub mod unhandled_iq; +pub mod muc; diff --git a/src/plugins/muc.rs b/src/plugins/muc.rs new file mode 100644 index 0000000..95b9aa7 --- /dev/null +++ b/src/plugins/muc.rs @@ -0,0 +1,53 @@ +use std::collections::BTreeMap; + +use jid::Jid; +use error::Error; +use plugin::PluginProxy; + +pub use xmpp_parsers::muc::Muc; +pub use xmpp_parsers::presence::{Presence, Type, Show}; + +pub struct MucPlugin { + proxy: PluginProxy, +} + +impl MucPlugin { + pub fn new() -> MucPlugin { + MucPlugin { + proxy: PluginProxy::new(), + } + } + + pub fn join_room(&self, room: Jid) -> Result<(), Error> { + let presence = Presence { + from: None, + to: Some(room), + id: None, + type_: Type::None, + show: Show::None, + priority: 0i8, + statuses: BTreeMap::new(), + payloads: vec![Muc.into()], + }; + self.proxy.send(presence.into()); + + Ok(()) + } + + pub fn leave_room(&self, room: Jid) -> Result<(), Error> { + let presence = Presence { + from: None, + to: Some(room), + id: None, + type_: Type::None, + show: Show::None, + priority: 0i8, + statuses: BTreeMap::new(), + payloads: vec![Muc.into()], + }; + self.proxy.send(presence.into()); + Ok(()) + } +} + +impl_plugin!(MucPlugin, proxy, []);