prosody-modules/mod_mix/mix.lib.lua

95 lines
2.6 KiB
Lua

local st = require("util.stanza");
local helpers = module:require("mix/helpers");
Participant = {};
Participant.__index = Participant;
function Participant:new(jid, nick)
return setmetatable({
jid = jid,
nick = nick,
}, Participant);
end
function Participant:from(config)
return setmetatable(config, Participant);
end
Channel = {}
Channel.__index = Channel;
function Channel:new(jid, name, description, participants, subscriptions, spid, contacts, adhoc)
return setmetatable({
jid = jid,
name = name,
description = description,
participants = participants,
subscriptions = subscriptions,
spid = spid,
contacts = contacts,
adhoc = adhoc,
}, Channel);
end
function Channel:from(config)
-- Turn a channel into a Channel object
local o = setmetatable(config, Channel);
for i, _ in pairs(o.participants) do
o.participants[i] = Participant:from(o.participants[i]);
end
return o;
end
function Channel:get_spid(jid)
-- Returns the Stable Participant ID for the *BARE* jid
return self.spid[jid];
end
function Channel:set_spid(jid, spid)
-- Sets the Stable Participant ID for the *BARE* jid
self.spid[jid] = spid;
end
function Channel:find_participant(jid)
-- Returns the index of a participant in a channel. Returns -1
-- if the participant is not found
return helpers.find(self.participants, function(p) return p.jid == jid end);
end
function Channel:is_participant(jid)
-- Returns true if jid is a participant of the channel. False otherwise.
local i, _ = self:find_participant(jid);
return i ~= -1;
end
function Channel:is_subscribed(jid, node)
-- Returns true of JID is subscribed to node on this channel. Returns false
-- otherwise.
return helpers.find_str(self.subscriptions[jid], node) ~= -1;
end
function Channel:debug_print()
module:log("debug", "Channel %s (%s)", self.jid, self.name);
module:log("debug", "'%s'", self.description);
for _, p in pairs(self.participants) do
module:log("debug", "=> %s (%s)", p.jid, p.nick);
end
module:log("debug", "Contacts:");
for _, c in pairs(self.contacts) do
module:log("debug", "=> %s", c);
end
if self.subscriptions then
module:log("debug", "Subscriptions:");
for user, subs in pairs(self.subscriptions) do
module:log("debug", "[%s]", user);
for _, sub in pairs(subs) do
module:log("debug", "=> %s", sub);
end
end
end
end
return {
Channel = Channel,
Participant = Participant
};