aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp-vala/src/module/xep')
-rw-r--r--xmpp-vala/src/module/xep/0424_message_retraction.vala15
-rw-r--r--xmpp-vala/src/module/xep/0425_message_moderation.vala19
2 files changed, 30 insertions, 4 deletions
diff --git a/xmpp-vala/src/module/xep/0424_message_retraction.vala b/xmpp-vala/src/module/xep/0424_message_retraction.vala
index 747f4c08..3e60eb2b 100644
--- a/xmpp-vala/src/module/xep/0424_message_retraction.vala
+++ b/xmpp-vala/src/module/xep/0424_message_retraction.vala
@@ -1,12 +1,19 @@
namespace Xmpp.Xep.MessageRetraction {
- private const string NS_URI = "urn:xmpp:message-retract:1";
+ public const string NS_URI = "urn:xmpp:message-retract:1";
public static string? get_retract_id(MessageStanza message) {
- StanzaNode? node = message.stanza.get_subnode("retract", NS_URI);
- if (node == null) return null;
+ StanzaNode? retract_node = message.stanza.get_subnode("retract", NS_URI);
+ if (retract_node == null) return null;
- return node.get_attribute("id");
+ return retract_node.get_attribute("id");
+ }
+
+ public static void set_retract_id(MessageStanza message, string message_id) {
+ StanzaNode retract_node = (new StanzaNode.build("retract", NS_URI))
+ .add_self_xmlns()
+ .put_attribute("id", message_id);
+ message.stanza.put_node(retract_node);
}
public class Module : XmppStreamModule {
diff --git a/xmpp-vala/src/module/xep/0425_message_moderation.vala b/xmpp-vala/src/module/xep/0425_message_moderation.vala
new file mode 100644
index 00000000..80fab905
--- /dev/null
+++ b/xmpp-vala/src/module/xep/0425_message_moderation.vala
@@ -0,0 +1,19 @@
+namespace Xmpp.Xep.MessageModeration {
+
+ public const string NS_URI = "urn:xmpp:message-moderate:1";
+
+
+ /**
+ * @return whether the moderation was successful
+ */
+ public static async bool moderate(XmppStream stream, Jid muc_jid, string message_id) {
+ StanzaNode moderate_node = new StanzaNode.build("moderate", NS_URI)
+ .add_self_xmlns()
+ .put_attribute("id", message_id)
+ .put_node(new StanzaNode.build("retract", Xep.MessageRetraction.NS_URI).add_self_xmlns());
+ Iq.Stanza iq = new Iq.Stanza.set(moderate_node) { to = muc_jid };
+
+ Iq.Stanza result_stanza = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ return !result_stanza.is_error();
+ }
+} \ No newline at end of file