Mercurial > prosody-modules
view mod_stanza_counter/mod_stanza_counter.lua @ 4515:2e33eeafe962
mod_muc_markers: Prevent any markers from reaching the archive, even if untracked
Original intention was to leave alone things that this module isn't
handling. However markers in archives are just problematic without
more advanced logic about what is markable and what is not. It also
requires a more advanced query in mod_muc_rai to determine the latest
markable message instead of the latest archived message.
I'd rather keep the "is archivable" and "is markable" definition the
same for simplicity. I don't want to introduce yet another set of rules
for no reason.
No markers in MAM.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 22 Mar 2021 15:55:02 +0000 |
parents | 7dbde05b48a9 |
children |
line wrap: on
line source
-- (C) 2011, Marco Cirillo (LW.Org) -- General Stanzas' Counter. local jid_bare = require "util.jid".bare -- Setup, Init functions. -- initialize function counter table on the global object on start local function init_counter() prosody.stanza_counter = { iq = { incoming=0, outgoing=0 }, message = { incoming=0, outgoing=0 }, presence = { incoming=0, outgoing=0 } } end -- Setup on server start local function setup() init_counter() end -- Basic Stanzas' Counters local function iq_callback(check) return function(self) local origin, stanza = self.origin, self.stanza if not prosody.stanza_counter then init_counter() end if check then if not stanza.attr.to or hosts[jid_bare(stanza.attr.to)] then return nil else prosody.stanza_counter.iq["outgoing"] = prosody.stanza_counter.iq["outgoing"] + 1 end else prosody.stanza_counter.iq["incoming"] = prosody.stanza_counter.iq["incoming"] + 1 end end end local function mes_callback(check) return function(self) local origin, stanza = self.origin, self.stanza if not prosody.stanza_counter then init_counter() end if check then if not stanza.attr.to or hosts[jid_bare(stanza.attr.to)] then return nil else prosody.stanza_counter.message["outgoing"] = prosody.stanza_counter.message["outgoing"] + 1 end else prosody.stanza_counter.message["incoming"] = prosody.stanza_counter.message["incoming"] + 1 end end end local function pre_callback(check) return function(self) local origin, stanza = self.origin, self.stanza if not prosody.stanza_counter then init_counter() end if check then if not stanza.attr.to or hosts[jid_bare(stanza.attr.to)] then return nil else prosody.stanza_counter.presence["outgoing"] = prosody.stanza_counter.presence["outgoing"] + 1 end else prosody.stanza_counter.presence["incoming"] = prosody.stanza_counter.presence["incoming"] + 1 end end end -- Hook all pre-stanza events. module:hook("pre-iq/bare", iq_callback(true), 140) module:hook("pre-iq/full", iq_callback(true), 140) module:hook("pre-iq/host", iq_callback(true), 140) module:hook("pre-message/bare", mes_callback(true), 140) module:hook("pre-message/full", mes_callback(true), 140) module:hook("pre-message/host", mes_callback(true), 140) module:hook("pre-presence/bare", pre_callback(true), 140) module:hook("pre-presence/full", pre_callback(true), 140) module:hook("pre-presence/host", pre_callback(true), 140) -- Hook all stanza events. module:hook("iq/bare", iq_callback(false), 140) module:hook("iq/full", iq_callback(false), 140) module:hook("iq/host", iq_callback(false), 140) module:hook("message/bare", mes_callback(false), 140) module:hook("message/full", mes_callback(false), 140) module:hook("message/host", mes_callback(false), 140) module:hook("presence/bare", pre_callback(false), 140) module:hook("presence/full", pre_callback(false), 140) module:hook("presence/host", pre_callback(false), 140) -- Hook server start to initialize the counter. module:hook("server-started", setup)