Skip to content

Instantly share code, notes, and snippets.

@shawnchin
shawnchin / mod_lobby_autostart.lua
Created October 23, 2022 16:12
Legacy version of mod_lobby_autostart.lua
-- This module auto-activates lobby for all rooms.
--
-- IMPORTANT: do not use this unless you have some mechanism for moderators to bypass the lobby, otherwise everybody
-- stops at the lobby with nobody to admit them.
--
-- This module should be added to the main virtual host domain.
-- It assumes you have properly configured the muc_lobby_rooms module and lobby muc component.
--
--
@shawnchin
shawnchin / muc_owner_allow_kick.patch
Created December 14, 2021 20:07
muc_owner_allow_kick.patch for prosody 0.11.10
--- muc.lib.lua 2021-12-14 19:48:43.195680418 +0000
+++ muc.lib.lua 2021-12-14 20:01:22.865824156 +0000
@@ -1390,15 +1390,16 @@
if actor == true then
actor = nil -- So we can pass it safely to 'publicise_occupant_status' below
else
+ local actor_affiliation = self:get_affiliation(actor);
+
-- Can't do anything to other owners or admins
local occupant_affiliation = self:get_affiliation(occupant.bare_jid);
@shawnchin
shawnchin / mod_close_on_mod_leave.lua
Last active March 18, 2022 17:34
Jisi Prosody plugin to close room when last moderator leaves
--- Jitsi prosody module to delete room after all moderators left room.
--- Installation:
--- 1. Download this script to the Prosody plugins folder (/usr/share/jitsi-meet/prosody-plugins/)
--- 2. Enable module in your prosody config. E.g.
---
--- Component "conference.meet.mydomain.com" "muc"
--- modules_enabled = {
--- ...
--- ...
--- "close_on_mod_leave";
local jid = require("util.jid")
local is_healthcheck_room = module:require 'util'.is_healthcheck_room;
local max_occupants_for_room = module:get_option("max_occupants_for_room", {});
if next(max_occupants_for_room) ~= nil then
module:hook("muc-room-created", function(event)
local room = event.room;
@shawnchin
shawnchin / body.html
Last active September 8, 2021 20:16
Jitsi Prejoin Page -- inject email input field
<script>
const INCLUDE_LABEL = false; // "false" to match new prejoin page UX, "true" to match jitsi meet 6173 or earlier
function getLocallyStoredEmail() {
// loads email from localStorage so we can pre-populate with email users set before
const settings = JSON.parse(window.localStorage.getItem('features/base/settings') || '{}');
return settings.email || ''
}
function injectEmailInputsToPrejoinForm(formContainer) {
@shawnchin
shawnchin / mod_event_sync_component.lua
Last active July 8, 2021 19:38
Jitsi prosody component to POST to external API on room/occupant events
--- Component to trigger an HTTP POST call on room/occupant events
--
-- Example config:
--
-- Component "event_sync.mydomain.com" "event_sync_component"
-- muc_component = "conference.mydomain.com"
--
-- api_prefix = "http://external_app.mydomain.com/api"
--
-- --- The following are all optional
@shawnchin
shawnchin / mod_frozen_nick.lua
Created June 9, 2021 10:52
Jitsi prosody plugin to stop users from changing display name if name provided by JWT
--- Stop users from changing nick (display name) if name is provided provided by jisi_meet_context_user
-- For all received presence messages, if jitsi_meet_context_user.name value is set in the session, then we simply
-- override nick with that value.
function on_message(event)
if event and event["stanza"] then
if event.origin and event.origin.jitsi_meet_context_user then
local name = event.origin.jitsi_meet_context_user['name'];
# https://www.hackerrank.com/challenges/coin-change/problem
def cc_dp(target, coins):
current = [0] * (target + 1)
current[0] = 1
prev = current[:]
for c in coins:
for t in xrange(target + 1):
@shawnchin
shawnchin / palette_pubu.py
Created February 17, 2017 08:34
Colour Palettes
colours = [(255.0, 245.0, 250.0),
(255.0, 244.0, 253.0),
(253.0, 244.0, 255.0),
(249.0, 244.0, 255.0),
(244.0, 243.0, 255.0),
(243.0, 245.0, 255.0),
(242.0, 249.0, 255.0),
(242.0, 253.0, 254.0),
(242.0, 254.0, 251.0),
(241.0, 254.0, 246.0),
@shawnchin
shawnchin / Lex Font.ttf
Last active October 14, 2016 13:36
Cat Showroom