hand raised
This commit is contained in:
@@ -2,8 +2,11 @@ local st = require "util.stanza";
|
||||
local http = require "net.http";
|
||||
local jid = require "util.jid";
|
||||
local json = require "util.json";
|
||||
local array = require "util.array";
|
||||
local util = module:require "util";
|
||||
local is_admin = util.is_admin;
|
||||
local is_focus = util.is_focus;
|
||||
local internal_room_jid_match_rewrite = util.internal_room_jid_match_rewrite;
|
||||
|
||||
local ROLE_JOINING = module:shared("politictalk/roles/joining");
|
||||
local ROOM_INACTIVE_CALLBACK_URL = module:get_option_string(
|
||||
@@ -144,13 +147,48 @@ local function ensure_room_data(room)
|
||||
room._data.politictalk_host_jids = room._data.politictalk_host_jids or {};
|
||||
room._data.politictalk_participant_jids = room._data.politictalk_participant_jids or {};
|
||||
room._data.politictalk_jid_user_ids = room._data.politictalk_jid_user_ids or {};
|
||||
-- Enables Jitsi AV moderation automatically: hosts can speak, participants
|
||||
-- must be explicitly allowed by a host before they can unmute.
|
||||
room._data.av_can_unmute = false;
|
||||
|
||||
return true;
|
||||
end
|
||||
|
||||
local function enable_audio_moderation_only(room, actor_occupant)
|
||||
if not room or not actor_occupant then
|
||||
return;
|
||||
end
|
||||
|
||||
-- Avoid Jitsi's av_can_unmute shortcut because it enables audio, video, and desktop moderation together.
|
||||
room.av_moderation = room.av_moderation or {};
|
||||
room.av_moderation_actors = room.av_moderation_actors or {};
|
||||
|
||||
if room.av_moderation.audio then
|
||||
room.av_moderation.video = nil;
|
||||
room.av_moderation.desktop = nil;
|
||||
room.av_moderation_actors.video = nil;
|
||||
room.av_moderation_actors.desktop = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
room.av_moderation.audio = array();
|
||||
room.av_moderation.video = nil;
|
||||
room.av_moderation.desktop = nil;
|
||||
|
||||
for _, room_occupant in room:each_occupant() do
|
||||
if room:get_role(room_occupant.nick) == "moderator" and not is_focus(room_occupant.nick) then
|
||||
room.av_moderation.audio:push(internal_room_jid_match_rewrite(room_occupant.nick));
|
||||
end
|
||||
end
|
||||
|
||||
room.jitsiMetadata = room.jitsiMetadata or {};
|
||||
room.jitsiMetadata.startMuted = room.jitsiMetadata.startMuted or {};
|
||||
room.av_moderation_startMuted_restore = room.av_moderation_startMuted_restore or {};
|
||||
room.av_moderation_startMuted_restore.audio = room.jitsiMetadata.startMuted.audio;
|
||||
room.jitsiMetadata.startMuted.audio = true;
|
||||
|
||||
room.av_moderation_actors.audio = actor_occupant.nick;
|
||||
room.av_moderation_actors.video = nil;
|
||||
room.av_moderation_actors.desktop = nil;
|
||||
end
|
||||
|
||||
local function update_room_role_lists(room, user_id, is_moderator)
|
||||
if not room or not user_id then
|
||||
return;
|
||||
@@ -613,10 +651,11 @@ module:hook("muc-occupant-joined", function(event)
|
||||
mark_host(room, occupant, role.user_id);
|
||||
update_room_role_lists(room, role.user_id, true);
|
||||
room:set_affiliation(true, occupant.bare_jid, "owner");
|
||||
enable_audio_moderation_only(room, occupant);
|
||||
remove_duplicate_user_occupants(room, occupant, role.user_id);
|
||||
module:log(
|
||||
"info",
|
||||
"PoliticTalk host joined as moderator with AV moderation: %s room=%s",
|
||||
"PoliticTalk host joined as moderator with audio moderation: %s room=%s",
|
||||
tostring(role.user_id),
|
||||
tostring(room.jid)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user