Current section
Files
Jump to
Current section
Files
lib/fl_hook/event.ex
defmodule FLHook.Event do
@moduledoc """
An event that is sent by the client in event mode when something happens on
the server.
"""
alias FLHook.Params
@event_types [
"baseenter",
"baseexit",
"chat",
"connect",
"disconnect",
"jumpin",
"kill",
"launch",
"login",
"spawn",
"switchout"
]
defstruct [:type, params: %{}]
@type t :: %__MODULE__{
type: String.t(),
params: Params.params()
}
@doc false
@spec __event_types__() :: [String.t()]
def __event_types__, do: @event_types
@doc false
@spec parse(String.t()) :: {:ok, t} | :error
def parse(""), do: :error
def parse(payload) when is_binary(payload) do
case String.split(payload, " ", parts: 2) do
[type, raw_params] when type in @event_types ->
params = Params.parse(raw_params, spread: "text")
{:ok, %__MODULE__{type: type, params: params}}
_ ->
:error
end
end
end