Packages

A Gleam library for interacting with the Discord API

Current section

Files

Jump to
shimmer src shimmer.erl
Raw

src/shimmer.erl

-module(shimmer).
-compile(no_auto_import).
-export([handlers_builder/0, on_ready/2, on_message/2, handlers_from_builder/1, connect/1]).
-export_type([handlers_builder/0, handlers/0, client/0]).
-type handlers_builder() :: {handlers_builder,
gleam@option:option(fun(() -> nil)),
gleam@option:option(fun((shimmer@types@message:message()) -> nil))}.
-type handlers() :: {handlers,
fun(() -> nil),
fun((shimmer@types@message:message()) -> nil)}.
-type client() :: {client, binary(), handlers(), integer()}.
-spec handlers_builder() -> handlers_builder().
handlers_builder() ->
{handlers_builder, none, none}.
-spec on_ready(handlers_builder(), fun(() -> nil)) -> handlers_builder().
on_ready(Builder, F) ->
erlang:setelement(2, Builder, {some, F}).
-spec on_message(
handlers_builder(),
fun((shimmer@types@message:message()) -> nil)
) -> handlers_builder().
on_message(Builder, F) ->
erlang:setelement(3, Builder, {some, F}).
-spec handlers_from_builder(handlers_builder()) -> handlers().
handlers_from_builder(Builder) ->
{handlers,
begin
_pipe = erlang:element(2, Builder),
gleam@option:unwrap(_pipe, fun() -> nil end)
end,
begin
_pipe@1 = erlang:element(3, Builder),
gleam@option:unwrap(_pipe@1, fun(_) -> nil end)
end}.
-spec connect(client()) -> nil.
connect(Client) ->
shimmer@ws@event_loop:websocket_actor(
{identify_info, erlang:element(2, Client), erlang:element(4, Client)}
),
nil.