【问题标题】:I want the Erling code to determine the length of the visitor nickname我想要 Erling 代码来确定访客昵称的长度
【发布时间】:2020-03-22 11:12:18
【问题描述】:

我使用 Ejabberd 服务器。 如何在房间配置中添加指定访客昵称字符数的选项?

【问题讨论】:

    标签: ejabberd multiuserchat


    【解决方案1】:

    我没有看到限制房间占用者昵称长度的选项。

    【讨论】:

    • 它不在 ejabberd 服务器中,但我想在 mod_muc_room.erl 中添加一个新功能
    • 有些人使用消息的长度和状态和昵称来击败房间里的其他人或使用应用程序炸弹和xmlns击败的联系人
    【解决方案2】:

    这个小补丁将住户昵称的长度限制为 5 个字符或更少。不可配置,直接编辑源码即可:

    diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
    index ea2b069d7..bfc5b143a 100644
    --- a/src/mod_muc_room.erl
    +++ b/src/mod_muc_room.erl
    @@ -1216,26 +1216,33 @@ do_process_presence(Nick, #presence{from = From, type = available, lang = Lang}
            case is_nick_change(From, Nick, StateData) of
            true ->
                case {nick_collision(From, Nick, StateData),
    +             string:length(Nick) > 5,
                  mod_muc:can_use_nick(StateData#state.server_host,
                               StateData#state.host,
                               From, Nick),
                  {(StateData#state.config)#config.allow_visitor_nickchange,
                   is_visitor(From, StateData)}} of
    -           {_, _, {false, true}} ->
    +           {_, true, _, _} ->
    +               Packet1 = Packet#presence{sub_els = [#muc{}]},
    +               ErrText = ?T("That nickname exceeds the maximum allowed length"),
    +               Err = xmpp:err_conflict(ErrText, Lang),
    +               ejabberd_router:route_error(Packet1, Err),
    +               StateData;
    +           {_, _, _, {false, true}} ->
                    Packet1 = Packet#presence{sub_els = [#muc{}]},
                    ErrText = ?T("Visitors are not allowed to change their "
                         "nicknames in this room"),
                    Err = xmpp:err_not_allowed(ErrText, Lang),
                    ejabberd_router:route_error(Packet1, Err),
                    StateData;
    -           {true, _, _} ->
    +           {true, _, _, _} ->
                    Packet1 = Packet#presence{sub_els = [#muc{}]},
                    ErrText = ?T("That nickname is already in use by another "
                         "occupant"),
                    Err = xmpp:err_conflict(ErrText, Lang),
                    ejabberd_router:route_error(Packet1, Err),
                    StateData;
    -           {_, false, _} ->
    +           {_, _, false, _} ->
                    Packet1 = Packet#presence{sub_els = [#muc{}]},
                    Err = case Nick of
                          <<>> ->
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-17
      • 2012-01-19
      • 2010-09-22
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多