Skip to content

Hooks

This document describes the hooks available in the Word Filter module for managing chat word filtering and content moderation.


FilterCheckFailed

Purpose

Called when a word filter check fails (filtered word detected).

Parameters

  • player (Player): The player who used the filtered word.
  • text (string): The original text that was filtered.
  • bad (string): The specific word that was filtered.

Realm

Server.

When Called

This hook is triggered when: - A player's message contains a filtered word - After FilteredWordUsed hook - After PostFilterCheck hook with false result

Example Usage

-- Track filter check failures
hook.Add("FilterCheckFailed", "TrackFilterCheckFailures", function(player, text, bad)
    local char = player:getChar()
    if char then
        local filterFailures = char:getData("filter_check_failures", 0)
        char:setData("filter_check_failures", filterFailures + 1)

        -- Track specific filtered words
        local filteredWords = char:getData("filtered_words_used", {})
        filteredWords[bad] = (filteredWords[bad] or 0) + 1
        char:setData("filtered_words_used", filteredWords)
    end

    lia.log.add(player, "filterCheckFailed", bad, text)
end)

-- Apply filter failure effects
hook.Add("FilterCheckFailed", "FilterFailureEffects", function(player, text, bad)
    -- Play failure sound
    player:EmitSound("buttons/button16.wav", 75, 100)

    -- Apply screen effect
    player:ScreenFade(SCREENFADE.IN, Color(255, 0, 0, 10), 0.5, 0)

    -- Notify player
    player:notify("Your message contained a filtered word: " .. bad)

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(player:GetPos())
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track filter failure patterns
hook.Add("FilterCheckFailed", "TrackFilterFailurePatterns", function(player, text, bad)
    local char = player:getChar()
    if char then
        -- Track failure frequency
        local failureFrequency = char:getData("filter_failure_frequency", 0)
        char:setData("filter_failure_frequency", failureFrequency + 1)

        -- Track failure patterns
        local failurePatterns = char:getData("filter_failure_patterns", {})
        table.insert(failurePatterns, {
            word = bad,
            text = text,
            time = os.time()
        })
        char:setData("filter_failure_patterns", failurePatterns)
    end
end)

FilterCheckPassed

Purpose

Called when a word filter check passes (no filtered words detected).

Parameters

  • player (Player): The player whose message passed the filter.
  • text (string): The text that passed the filter.

Realm

Server.

When Called

This hook is triggered when: - A player's message passes the word filter - After PostFilterCheck hook with true result - When no filtered words are found

Example Usage

-- Track filter check passes
hook.Add("FilterCheckPassed", "TrackFilterCheckPasses", function(player, text)
    local char = player:getChar()
    if char then
        local filterPasses = char:getData("filter_check_passes", 0)
        char:setData("filter_check_passes", filterPasses + 1)

        -- Track clean messages
        local cleanMessages = char:getData("clean_messages", 0)
        char:setData("clean_messages", cleanMessages + 1)
    end
end)

-- Apply filter pass effects
hook.Add("FilterCheckPassed", "FilterPassEffects", function(player, text)
    -- Play pass sound
    player:EmitSound("buttons/button14.wav", 75, 100)

    -- Apply screen effect
    player:ScreenFade(SCREENFADE.IN, Color(0, 255, 0, 5), 0.3, 0)

    -- Notify player
    player:notify("Message sent successfully!")
end)

-- Track filter pass patterns
hook.Add("FilterCheckPassed", "TrackFilterPassPatterns", function(player, text)
    local char = player:getChar()
    if char then
        -- Track pass frequency
        local passFrequency = char:getData("filter_pass_frequency", 0)
        char:setData("filter_pass_frequency", passFrequency + 1)

        -- Track pass patterns
        local passPatterns = char:getData("filter_pass_patterns", {})
        table.insert(passPatterns, {
            text = text,
            time = os.time()
        })
        char:setData("filter_pass_patterns", passPatterns)
    end
end)

FilteredWordUsed

Purpose

Called when a filtered word is detected in a player's message.

Parameters

  • player (Player): The player who used the filtered word.
  • bad (string): The specific word that was filtered.
  • text (string): The original text that contained the filtered word.

Realm

Server.

When Called

This hook is triggered when: - A player's message contains a filtered word - After PreFilterCheck hook - Before PostFilterCheck hook with false result

Example Usage

-- Track filtered word usage
hook.Add("FilteredWordUsed", "TrackFilteredWordUsage", function(player, bad, text)
    local char = player:getChar()
    if char then
        local filteredWordUsage = char:getData("filtered_word_usage", 0)
        char:setData("filtered_word_usage", filteredWordUsage + 1)

        -- Track specific filtered words
        local filteredWords = char:getData("filtered_words_used", {})
        filteredWords[bad] = (filteredWords[bad] or 0) + 1
        char:setData("filtered_words_used", filteredWords)
    end

    lia.log.add(player, "filteredWordUsed", bad, text)
end)

-- Apply filtered word effects
hook.Add("FilteredWordUsed", "FilteredWordEffects", function(player, bad, text)
    -- Play filtered word sound
    player:EmitSound("buttons/button17.wav", 75, 100)

    -- Apply screen effect
    player:ScreenFade(SCREENFADE.IN, Color(255, 255, 0, 10), 0.5, 0)

    -- Notify player
    player:notify("Filtered word detected: " .. bad)

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(player:GetPos())
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track filtered word patterns
hook.Add("FilteredWordUsed", "TrackFilteredWordPatterns", function(player, bad, text)
    local char = player:getChar()
    if char then
        -- Track filtered word frequency
        local filteredWordFrequency = char:getData("filtered_word_frequency", 0)
        char:setData("filtered_word_frequency", filteredWordFrequency + 1)

        -- Track filtered word patterns
        local filteredWordPatterns = char:getData("filtered_word_patterns", {})
        table.insert(filteredWordPatterns, {
            word = bad,
            text = text,
            time = os.time()
        })
        char:setData("filtered_word_patterns", filteredWordPatterns)
    end
end)

PostFilterCheck

Purpose

Called after a word filter check has been completed.

Parameters

  • player (Player): The player whose message was checked.
  • text (string): The text that was checked.
  • passed (boolean): Whether the filter check passed (true) or failed (false).

Realm

Server.

When Called

This hook is triggered when: - A word filter check has been completed - After PreFilterCheck hook - After all filtering logic has been processed

Example Usage

-- Track filter check completion
hook.Add("PostFilterCheck", "TrackFilterCheckCompletion", function(player, text, passed)
    local char = player:getChar()
    if char then
        local filterChecks = char:getData("filter_checks", 0)
        char:setData("filter_checks", filterChecks + 1)

        -- Track filter check results
        local filterResults = char:getData("filter_results", {})
        filterResults[passed and "passed" or "failed"] = (filterResults[passed and "passed" or "failed"] or 0) + 1
        char:setData("filter_results", filterResults)
    end
end)

-- Apply filter check completion effects
hook.Add("PostFilterCheck", "FilterCheckCompletionEffects", function(player, text, passed)
    if passed then
        -- Play pass sound
        player:EmitSound("buttons/button14.wav", 75, 100)

        -- Apply screen effect
        player:ScreenFade(SCREENFADE.IN, Color(0, 255, 0, 5), 0.3, 0)
    else
        -- Play fail sound
        player:EmitSound("buttons/button16.wav", 75, 100)

        -- Apply screen effect
        player:ScreenFade(SCREENFADE.IN, Color(255, 0, 0, 10), 0.5, 0)
    end
end)

-- Track filter check statistics
hook.Add("PostFilterCheck", "TrackFilterCheckStats", function(player, text, passed)
    local char = player:getChar()
    if char then
        -- Track filter check frequency
        local filterCheckFrequency = char:getData("filter_check_frequency", 0)
        char:setData("filter_check_frequency", filterCheckFrequency + 1)

        -- Track filter check patterns
        local filterCheckPatterns = char:getData("filter_check_patterns", {})
        table.insert(filterCheckPatterns, {
            text = text,
            passed = passed,
            time = os.time()
        })
        char:setData("filter_check_patterns", filterCheckPatterns)
    end
end)

PreFilterCheck

Purpose

Called before a word filter check is performed on a player's message.

Parameters

  • player (Player): The player whose message will be checked.
  • text (string): The text that will be checked.

Realm

Server.

When Called

This hook is triggered when: - A player sends a message - Before the word filter check begins - Before any filtering logic is processed

Example Usage

-- Validate filter check
hook.Add("PreFilterCheck", "ValidateFilterCheck", function(player, text)
    local char = player:getChar()
    if char then
        -- Check if filter is disabled
        if char:getData("word_filter_disabled", false) then
            player:notify("Word filter is disabled!")
            return false
        end

        -- Check filter cooldown
        local lastFilter = char:getData("last_filter_check_time", 0)
        if os.time() - lastFilter < 1 then -- 1 second cooldown
            player:notify("Please wait before sending another message!")
            return false
        end

        -- Update last filter time
        char:setData("last_filter_check_time", os.time())
    end
end)

-- Track filter check attempts
hook.Add("PreFilterCheck", "TrackFilterCheckAttempts", function(player, text)
    local char = player:getChar()
    if char then
        local filterAttempts = char:getData("filter_check_attempts", 0)
        char:setData("filter_check_attempts", filterAttempts + 1)

        -- Track message patterns
        local messagePatterns = char:getData("message_patterns", {})
        table.insert(messagePatterns, {
            text = text,
            time = os.time()
        })
        char:setData("message_patterns", messagePatterns)
    end
end)

-- Apply pre-filter effects
hook.Add("PreFilterCheck", "PreFilterEffects", function(player, text)
    -- Play pre-filter sound
    player:EmitSound("ui/buttonclick.wav", 75, 100)

    -- Apply screen effect
    player:ScreenFade(SCREENFADE.IN, Color(0, 0, 255, 5), 0.2, 0)
end)

WordAddedToFilter

Purpose

Called when a word is added to the filter list.

Parameters

  • word (string): The word that was added to the filter.

Realm

Server.

When Called

This hook is triggered when: - A word is added to the word filter - After the word is saved to the database - When the filter list is updated

Example Usage

-- Track word additions
hook.Add("WordAddedToFilter", "TrackWordAdditions", function(word)
    lia.log.add(nil, "wordAddedToFilter", word)

    -- Notify all players
    for _, ply in player.Iterator() do
        ply:notify("Word '" .. word .. "' added to filter!")
    end
end)

-- Apply word addition effects
hook.Add("WordAddedToFilter", "WordAdditionEffects", function(word)
    -- Play addition sound
    for _, ply in player.Iterator() do
        ply:EmitSound("buttons/button14.wav", 75, 100)
    end

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(Vector(0, 0, 0))
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track word addition statistics
hook.Add("WordAddedToFilter", "TrackWordAdditionStats", function(word)
    -- Track total words added
    local totalWordsAdded = lia.data.get("total_words_added", 0)
    lia.data.set("total_words_added", totalWordsAdded + 1)

    -- Track word addition frequency
    local wordAdditionFrequency = lia.data.get("word_addition_frequency", 0)
    lia.data.set("word_addition_frequency", wordAdditionFrequency + 1)
end)

WordRemovedFromFilter

Purpose

Called when a word is removed from the filter list.

Parameters

  • word (string): The word that was removed from the filter.

Realm

Server.

When Called

This hook is triggered when: - A word is removed from the word filter - After the word is removed from the database - When the filter list is updated

Example Usage

-- Track word removals
hook.Add("WordRemovedFromFilter", "TrackWordRemovals", function(word)
    lia.log.add(nil, "wordRemovedFromFilter", word)

    -- Notify all players
    for _, ply in player.Iterator() do
        ply:notify("Word '" .. word .. "' removed from filter!")
    end
end)

-- Apply word removal effects
hook.Add("WordRemovedFromFilter", "WordRemovalEffects", function(word)
    -- Play removal sound
    for _, ply in player.Iterator() do
        ply:EmitSound("buttons/button16.wav", 75, 100)
    end

    -- Create particle effect
    local effect = EffectData()
    effect:SetOrigin(Vector(0, 0, 0))
    effect:SetMagnitude(1)
    effect:SetScale(1)
    util.Effect("Explosion", effect)
end)

-- Track word removal statistics
hook.Add("WordRemovedFromFilter", "TrackWordRemovalStats", function(word)
    -- Track total words removed
    local totalWordsRemoved = lia.data.get("total_words_removed", 0)
    lia.data.set("total_words_removed", totalWordsRemoved + 1)

    -- Track word removal frequency
    local wordRemovalFrequency = lia.data.get("word_removal_frequency", 0)
    lia.data.set("word_removal_frequency", wordRemovalFrequency + 1)
end)