I'm looking for as many ways as possible to improve my chat commands, making it efficient and easy to use. I would really appreciate if someone could suggest better methods I could apply to my current code. Thanks!


Code:


local plrService = game:GetService("Players")
local plrsPermitted = require(game.ServerStorage.PlayerNamesPermitted)
local ValidCmds = require(game.ServerStorage.ValidCommands)
local WarnEvent = game.ReplicatedStorage.ToWarn
function CheckPlayersPermisson(PlayerToCheck,ModuleToSearch)
    local PlayerVar
    for _, permittedPlayer in pairs(ModuleToSearch) do
        if PlayerToCheck.Name == permittedPlayer then
            PlayerVar = PlayerToCheck
        end
    end
    if PlayerVar ~= nil then
        return true
    else
        return false
    end
end

function SearchForClosestMatch(String, CurrentTableOfPlayers)
    for _, plr in pairs(CurrentTableOfPlayers) do
        if string.match(plr.Name, "^"..String) then
            return plr
        else
            return nil
        end
    end
end

function CheckCmd(CmdString, ModuleToSearch)
    for _, validCmd in pairs(ModuleToSearch) do
        if CmdString == validCmd then
            return true
        end
    end
end

plrService.PlayerAdded:Connect(function(Player)
    local WarnsValue = Instance.new("NumberValue")
    WarnsValue.Value = 0 
    WarnsValue.Parent = Player
    WarnsValue.Name = "Warns"
    local Allowed = false
    if CheckPlayersPermisson(Player, plrsPermitted) then
        Allowed = true
    end
    Player.Chatted:Connect(function(StringMsg)
        if Allowed then
            local BrokenUpMessage = StringMsg:split(" ") --Table
            local Cmd = BrokenUpMessage[1]
            if CheckCmd(Cmd, ValidCmds) then
                if Cmd == ValidCmds[1] then
                    local TargPlrAbrv = BrokenUpMessage[2]
                    if SearchForClosestMatch(TargPlrAbrv, plrService:GetPlayers()) ~= nil then
                        local FoundPlr = SearchForClosestMatch(TargPlrAbrv,plrService:GetPlayers())
                        local Reason = StringMsg:split(TargPlrAbrv)[2]
                        FoundPlr:Kick(Reason)
                    else
                        warn("Didn't Find Player")
                    end
                end
            end
            if CheckCmd(Cmd, ValidCmds) then
                if Cmd == ValidCmds[2] then
                    local TargetedPlrString = BrokenUpMessage[2]
                    local ActualPlayer = SearchForClosestMatch(TargetedPlrString, plrService:GetPlayers()) 
                    local WarnValInTarPlr =SearchForClosestMatch(TargetedPlrString, plrService:GetPlayers()):FindFirstChild("Warns")
                    if WarnValInTarPlr then
                       WarnEvent:FireClient(ActualPlayer)
                        WarnValInTarPlr.Value += 1
                        if WarnValInTarPlr.Value == 3 then
                            WarnValInTarPlr.Parent:Kick("Max Warns")
                        end
                    end
                end
            end 
        end
    end)
end)

P.S. Sorry for the big ask, I'm just looking for ways to become a better Scripter.