--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_muc_restrict_nick/README.markdown Tue Jun 15 12:35:17 2021 +0100
@@ -0,0 +1,23 @@
+---
+labels:
+- 'Stage-Alpha'
+summary: 'Require MUC occupant nicknames to match a specific pattern'
+---
+
+Introduction
+============
+
+This checks the nickname of a joining user against a configurable
+[Lua pattern](https://www.lua.org/manual/5.2/manual.html#6.4.1), and prevents
+them from joining if it does not match.
+
+Configuration
+=============
+
+There is a single configuration option, `muc_restrict_nick_pattern` and the
+default is `"^%w+$"` - i.e. allow only alphanumeric characters in nicknames.
+
+Compatibility
+=============
+
+Requires Prosody 0.11 or higher.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_muc_restrict_nick/mod_muc_restrict_nick.lua Tue Jun 15 12:35:17 2021 +0100
@@ -0,0 +1,13 @@
+local jid = require "util.jid";
+local st = require "util.stanza";
+
+local nick_pattern = module:get_option_string("muc_restrict_nick_pattern", "^%w+$");
+
+module:hook("muc-occupant-pre-join", function (event)
+ local nick = jid.resource(event.occupant.nick);
+ if not nick:match(nick_pattern) then
+ local reply = st.error_reply(event.stanza, "modify", "policy-violation", "Unacceptable nickname, please try another");
+ module:send(reply);
+ return true;
+ end
+end);