@@ -1141,14 +1141,37 @@ iq_get_register_info(ServerHost, Host, From, Lang) ->
11411141 xdata = X }.
11421142
11431143set_nick (ServerHost , Host , From , Nick ) ->
1144- LServer = jid :nameprep (ServerHost ),
1145- Mod = gen_mod :db_mod (LServer , ? MODULE ),
1146- Mod :set_nick (LServer , Host , From , Nick ).
1144+ case ejabberd_hooks :run_fold (registering_nickmuc ,
1145+ ServerHost ,
1146+ true ,
1147+ [ServerHost , Host , From , Nick ]) of
1148+ false ->
1149+ {atomic , false };
1150+ true ->
1151+ LServer = jid :nameprep (ServerHost ),
1152+ Mod = gen_mod :db_mod (LServer , ? MODULE ),
1153+ Mod :set_nick (LServer , Host , From , Nick )
1154+ end .
1155+
1156+ set_nick (ServerHost , From , Nick ) ->
1157+ lists :foreach (
1158+ fun (MucHost ) ->
1159+ set_nick (ServerHost , MucHost , From , Nick )
1160+ end ,
1161+ gen_mod :get_module_opt_hosts (ServerHost , mod_muc )).
11471162
11481163iq_set_register_info (ServerHost , Host , From , Nick ,
11491164 Lang ) ->
1165+ OldNick = case mod_muc :get_register_nick (ServerHost , Host , From ) of
1166+ error -> <<" " >>;
1167+ ON when is_binary (ON ) -> ON
1168+ end ,
11501169 case set_nick (ServerHost , Host , From , Nick ) of
1151- {atomic , ok } -> {result , undefined };
1170+ {atomic , ok } ->
1171+ ejabberd_hooks :run (registered_nickmuc ,
1172+ ServerHost ,
1173+ [ServerHost , Host , From , Nick , OldNick ]),
1174+ {result , undefined };
11521175 {atomic , false } ->
11531176 ErrText = ? T (" That nickname is registered by another person" ),
11541177 {error , xmpp :err_conflict (ErrText , Lang )};
0 commit comments