view mod_motd_sequential/mod_motd_sequential.lua @ 3955:017f60608fc8

mod_smacks: also count outgoing MAM messages mod_smacks doesn't count outgoing MAM messages, which causes warnings in Prosody such as: > The client says it handled 41 new stanzas, but we only sent 2 It seems mod_smacks is in the wrong here and that it's too strict in trying to determine what is a valid stanza to count. In RFC6120: > Definition of XML Stanza: An XML stanza is the basic unit of meaning > in XMPP. A stanza is a first-level element (at depth=1 of the stream) > whose element name is "message", "presence", or "iq" and whose > qualifying namespace is 'jabber:client' or 'jabber:server'.
author JC Brand <jc@opkode.com>
date Thu, 26 Mar 2020 11:57:02 +0100
parents 8412592f3011
children
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
-- Copyright (C) 2010 Jeff Mitchell
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--

local core_route_stanza = prosody.core_route_stanza;
local host = module:get_host();
local motd_jid = module:get_option("motd_jid") or host;
local datamanager = require "util.datamanager";
local ipairs = ipairs;
local motd_sequential_messages = module:get_option("motd_sequential_messages") or {};
local motd_messagesets = {};
local max = 1;
for i, message in ipairs(motd_sequential_messages) do
    motd_messagesets[i] = message;
    max = i;
end

local st = require "util.stanza";

module:hook("resource-bind",
    function (event)
            local session = event.session;
    local alreadyseen_list = datamanager.load(session.username, session.host, "motd_sequential_seen") or { max = 0 };
    local alreadyseen = alreadyseen_list["max"] + 1;
    local motd_stanza;
    for i = alreadyseen, max do
            motd_stanza =
                    st.message({ to = session.username..'@'..session.host, from = motd_jid },
                            motd_messagesets[i]);
            core_route_stanza(hosts[host], motd_stanza);
            module:log("debug", "MOTD send to user %s@%s", session.username, session.host);
    end
    alreadyseen_list["max"] = max;
    datamanager.store(session.username, session.host, "motd_sequential_seen", alreadyseen_list);
end);