Lua字符串匹配/查找

我正在尝试使用下面的代码在我们的游戏服务器中捕获不良用户名。目前,它会让任何人通过,而不管他们的用户名如何。我曾经让它停止与单个单词的服务器连接,但目前我正在努力在字符串中捕获被禁止的单词。

local unauthNames = { "admin", "word1", "etc" }

for name in pairs(unauthNames) do
    if string.find(string.lower(GetPlayerName(source)), unauthNames[name]) then
        print(playerName .. "已因使用未授权名称而被踢出游戏")
        setKickReason("您的名称不允许。请检查您的名称是否具有冒犯性或与黑名单组织有关。")
        CancelEvent()
        break
    end
end
点赞
用户14236012
用户14236012
AddEventHandler("playerConnecting", function(playerName, setKickReason)
    playerName = string.gsub(playerName, "%W", ""):lower()
    for k, v in pairs(unauthNames) do
      local g, f = playerName:find(string.lower(v))
      if g or f then
          print(playerName .. " has been kicked for having an unauthorised name")
          setKickReason("Your name is not permitted. Please check your name is not offensive or associated with blacklisted organisations.")
          CancelEvent()
      end
    end
end)
AddEventHandler("playerConnecting", function(playerName, setKickReason)
    playerName = string.gsub(playerName, "%W", ""):lower() --将玩家名字中非字母数字的字符替换为空字符并转为小写
    for k, v in pairs(unauthNames) do
      local g, f = playerName:find(string.lower(v)) --查找是否存在不合规的名字
      if g or f then
          print(playerName .. " has been kicked for having an unauthorised name")
          setKickReason("Your name is not permitted. Please check your name is not offensive or associated with blacklisted organisations.") --设置断开连接的原因,提示不符合规定
          CancelEvent() -- 取消事件,断开连接
      end
    end
end)
2020-09-07 15:47:24
用户14236012
用户14236012
AddEventHandler("playerConnecting", function(playerName, setKickReason)
    playerName = (string.gsub(string.gsub(string.gsub(string.gsub(playerName,  "-", ""), ",", ""), "%.", ""), " ", ""):lower())
    for k, v in pairs(unauthNames) do
      local g, f = playerName:find(string.lower(v))
      if g or f then
        local id = source;
        local ids = ExtractIdentifiers(id);
        local ip = ids.ip;
        local steam = ids.steam:gsub("steam:", "");
        local steamDec = tostring(tonumber(steam,16));
        steam = "https://steamcommunity.com/profiles/" .. steamDec;
        local gameLicense = ids.license;
        local discord = ids.discord;
        local realName = GetPlayerName(source);
        
        print(playerName .. " has been kicked for having an unauthorised name")
        
        -- Discord Integration
        sendToDisc("Anti-abuse - Player kicked for having an unauthorised name",
          'Steam: **' .. steam .. '**\n' ..
          'GameLicense: **' .. gameLicense .. '**\n' ..
          'Discord UID: **' .. discord:gsub('discord:', '') .. '**\n'
          .. 'Name: **' .. realName ..'**\n'
          .. 'Blacklisted Item: **' .. v ..'**\n');
        
        setKickReason("[Anti-abuse] Your name, or part of it, is not permitted. Please check your name is not offensive, does not contain weblinks, odd characters or other restricted content: " ..v)
        CancelEvent()
      end
    end
  end)

这里是带有 Discord 集成的部署版本。

2020-09-08 15:28:04