You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
4 years ago
|
local _jid = require "util.jid";
|
||
|
|
||
|
log('info', 'Loaded Custom Presence identity');
|
||
|
|
||
|
module:hook("pre-presence/full", function (event)
|
||
|
|
||
|
local function get_room_from_jid(jid)
|
||
|
local node, host = _jid.split(jid);
|
||
|
local component = hosts[host];
|
||
|
|
||
|
if component then
|
||
|
local muc = component.modules.muc
|
||
|
if muc and rawget(muc,"rooms") then
|
||
|
-- We're running 0.9.x or 0.10 (old MUC API)
|
||
|
return muc.rooms[jid];
|
||
|
elseif muc and rawget(muc,"get_room_from_jid") then
|
||
|
-- We're running >0.10 (new MUC API)
|
||
|
return muc.get_room_from_jid(jid);
|
||
|
else
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local origin, stanza = event.origin, event.stanza;
|
||
|
local to = _jid.bare(stanza.attr.to);
|
||
|
|
||
|
if get_room_from_jid(to) then
|
||
|
local room = get_room_from_jid(to);
|
||
|
local occupant = room._occupants[tostring(stanza.attr.to)];
|
||
|
|
||
|
if occupant then
|
||
|
local email = stanza:get_child_text("email") or "";
|
||
|
local role = tostring(occupant.role);
|
||
|
|
||
|
if email ~= "" and role == "moderator" then
|
||
|
stanza:maptags(
|
||
|
function(tag)
|
||
|
for k, v in pairs(tag) do
|
||
|
if k == "name" and v == "identity" then
|
||
|
return nil
|
||
|
end
|
||
|
end
|
||
|
return tag
|
||
|
end)
|
||
|
|
||
|
stanza:tag("identity"):tag("user");
|
||
|
stanza:tag("id"):text(email):up();
|
||
|
stanza:up();
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end);
|