Moderation behaviour and utilities for message filtering.
Provides a behaviour for implementing content moderation strategies, plus utilities for composing and applying moderators.
Implementing a Moderator
defmodule MyApp.SpamFilter do
@behaviour Jido.Messaging.Moderation
@impl true
def moderate(message, _opts) do
if contains_spam?(message) do
{:reject, :spam, "Message contains spam"}
else
:allow
end
end
defp contains_spam?(_message), do: false
endModeration Results
:allow- Message passes moderation{:reject, reason, description}- Message is rejected{:flag, reason, description}- Message is flagged for review but allowed{:modify, message}- Message is modified (e.g., content filtered)
Summary
Callbacks
Moderate a message before it is processed.
Functions
Check if a moderation result allows the message.
Apply a list of moderators to a message in sequence.
Types
@type description() :: String.t()
@type reason() :: atom()
@type result() :: :allow | {:reject, reason(), description()} | {:flag, reason(), description()} | {:modify, Jido.Messaging.Message.t()}
Callbacks
@callback moderate(message :: Jido.Messaging.Message.t(), opts :: keyword()) :: result()
Moderate a message before it is processed.
Returns a moderation result indicating whether the message should be allowed, rejected, flagged, or modified.
Functions
Check if a moderation result allows the message.
Apply a list of moderators to a message in sequence.
Stops at the first rejection. Flags are accumulated. Modifications are applied in order.
Returns {:ok, message, flags} or {:error, reason, description}.