Jido.Messaging.Moderation behaviour (Jido Messaging v1.0.0)

Copy Markdown View Source

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
end

Moderation 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

description()

@type description() :: String.t()

reason()

@type reason() :: atom()

result()

@type result() ::
  :allow
  | {:reject, reason(), description()}
  | {:flag, reason(), description()}
  | {:modify, Jido.Messaging.Message.t()}

Callbacks

moderate(message, opts)

@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

allowed?(arg1)

Check if a moderation result allows the message.

apply_moderators(message, moderators, opts \\ [])

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}.