Current section

Files

Jump to
discord_gleam src discord_gleam@event_handler.erl
Raw

src/discord_gleam@event_handler.erl

-module(discord_gleam@event_handler).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([handle_event/3]).
-export_type([packet/0]).
-type packet() :: {message_packet,
discord_gleam@ws@packets@message:message_packet()} |
{ready_packet, discord_gleam@ws@packets@ready:ready_packet()} |
{unknown_packet, discord_gleam@ws@packets@generic:generic_packet()} |
{message_delete_packet,
discord_gleam@ws@packets@message_delete:message_delete_packet()}.
-spec decode_packet(binary()) -> packet().
decode_packet(Msg) ->
Generic_packet = discord_gleam@ws@packets@generic:string_to_data(Msg),
case erlang:element(2, Generic_packet) of
<<"MESSAGE_CREATE"/utf8>> ->
_pipe = discord_gleam@ws@packets@message:string_to_data(Msg),
_pipe@1 = gleam@result:map(
_pipe,
fun(Field@0) -> {message_packet, Field@0} end
),
gleam@result:unwrap(_pipe@1, {unknown_packet, Generic_packet});
<<"READY"/utf8>> ->
_pipe@2 = discord_gleam@ws@packets@ready:string_to_data(Msg),
_pipe@3 = gleam@result:map(
_pipe@2,
fun(Field@0) -> {ready_packet, Field@0} end
),
gleam@result:unwrap(_pipe@3, {unknown_packet, Generic_packet});
<<"MESSAGE_DELETE"/utf8>> ->
_pipe@4 = discord_gleam@ws@packets@message_delete:string_to_data(
Msg
),
_pipe@5 = gleam@result:map(
_pipe@4,
fun(Field@0) -> {message_delete_packet, Field@0} end
),
gleam@result:unwrap(_pipe@5, {unknown_packet, Generic_packet});
_ ->
{unknown_packet, Generic_packet}
end.
-spec handle_event(
discord_gleam@types@bot:bot(),
binary(),
list(fun((discord_gleam@types@bot:bot(), packet()) -> nil))
) -> nil.
handle_event(Bot, Msg, Handlers) ->
Packet = decode_packet(Msg),
gleam@list:each(Handlers, fun(Handler) -> Handler(Bot, Packet) end).