Deterministic command parser for normalized inbound message text.
The parser is intentionally bounded and conservative for hot-path safety.
Summary
Functions
Returns normalized command prefixes.
Parses a command envelope from text.
Re-tags a parser envelope with a specific parse source.
Types
@type command_envelope() :: %{ status: parse_status(), source: :body | :mention_stripped, prefix: String.t() | nil, name: String.t() | nil, args: String.t() | nil, argv: [String.t()], reason: reason() | nil, text_bytes: non_neg_integer() }
@type parse_status() :: :ok | :none | :error
@type reason() ::
:empty_text
| :not_command
| :text_too_long
| :missing_command_name
| :invalid_command_name
| :invalid_prefixes
| :invalid_text
Functions
Returns normalized command prefixes.
@spec parse( String.t() | nil, keyword() ) :: command_envelope()
Parses a command envelope from text.
Options
:prefixes- accepted command prefixes (default:["/", "!"]):max_text_bytes- upper bound for parser evaluation (default:2048)
@spec with_source(command_envelope(), :body | :mention_stripped) :: command_envelope()
Re-tags a parser envelope with a specific parse source.