Current section
Files
Jump to
Current section
Files
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/4]).
-export_type([packet/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type packet() :: {message_packet,
discord_gleam@ws@packets@message:message_packet()} |
{message_update_packet,
discord_gleam@ws@packets@message_update:message_update_packet()} |
{ready_packet, discord_gleam@ws@packets@ready:ready_packet()} |
{message_delete_packet,
discord_gleam@ws@packets@message_delete:message_delete_packet()} |
{interaction_create_packet,
discord_gleam@ws@packets@interaction_create:interaction_create_packet()} |
{channel_create_packet,
discord_gleam@ws@packets@channel_create:channel_create_packet()} |
{channel_delete_packet,
discord_gleam@ws@packets@channel_delete:channel_delete_packet()} |
{channel_update_packet,
discord_gleam@ws@packets@channel_update:channel_update_packet()} |
{unknown_packet, discord_gleam@ws@packets@generic:generic_packet()}.
-file("src/discord_gleam/event_handler.gleam", 43).
?DOC(" For handling some events the library needs to handle, for functionality\n").
-spec internal_handler(
discord_gleam@types@bot:bot(),
packet(),
bravo@uset:u_set({binary(), binary()})
) -> nil.
internal_handler(Bot, Packet, State_uset) ->
case Packet of
{message_packet, Msg} ->
case erlang:element(2, erlang:element(5, Bot)) of
{some, Cache} ->
bravo@uset:insert(
Cache,
[{erlang:element(3, erlang:element(5, Msg)),
erlang:element(5, Msg)}]
),
nil;
none ->
nil
end,
nil;
{message_update_packet, Msg@1} ->
case erlang:element(2, erlang:element(5, Bot)) of
{some, Cache@1} ->
bravo@uset:insert(
Cache@1,
[{erlang:element(3, erlang:element(5, Msg@1)),
erlang:element(5, Msg@1)}]
),
nil;
none ->
nil
end;
{ready_packet, Ready} ->
bravo@uset:insert(
State_uset,
[{<<"session_id"/utf8>>,
erlang:element(4, erlang:element(5, Ready))}]
),
bravo@uset:insert(
State_uset,
[{<<"resume_gateway_url"/utf8>>,
erlang:element(5, erlang:element(5, Ready))}]
),
nil;
_ ->
nil
end.
-file("src/discord_gleam/event_handler.gleam", 104).
-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});
<<"MESSAGE_UPDATE"/utf8>> ->
_pipe@2 = discord_gleam@ws@packets@message_update:string_to_data(
Msg
),
_pipe@3 = gleam@result:map(
_pipe@2,
fun(Field@0) -> {message_update_packet, Field@0} end
),
gleam@result:unwrap(_pipe@3, {unknown_packet, Generic_packet});
<<"READY"/utf8>> ->
_pipe@4 = discord_gleam@ws@packets@ready:string_to_data(Msg),
_pipe@5 = gleam@result:map(
_pipe@4,
fun(Field@0) -> {ready_packet, Field@0} end
),
gleam@result:unwrap(_pipe@5, {unknown_packet, Generic_packet});
<<"MESSAGE_DELETE"/utf8>> ->
_pipe@6 = discord_gleam@ws@packets@message_delete:string_to_data(
Msg
),
_pipe@7 = gleam@result:map(
_pipe@6,
fun(Field@0) -> {message_delete_packet, Field@0} end
),
gleam@result:unwrap(_pipe@7, {unknown_packet, Generic_packet});
<<"INTERACTION_CREATE"/utf8>> ->
_pipe@8 = discord_gleam@ws@packets@interaction_create:string_to_data(
Msg
),
_pipe@9 = gleam@result:map(
_pipe@8,
fun(Field@0) -> {interaction_create_packet, Field@0} end
),
gleam@result:unwrap(_pipe@9, {unknown_packet, Generic_packet});
<<"CHANNEL_CREATE"/utf8>> ->
_pipe@10 = discord_gleam@ws@packets@channel_create:string_to_data(
Msg
),
_pipe@11 = gleam@result:map(
_pipe@10,
fun(Field@0) -> {channel_create_packet, Field@0} end
),
gleam@result:unwrap(_pipe@11, {unknown_packet, Generic_packet});
<<"CHANNEL_DELETE"/utf8>> ->
_pipe@12 = discord_gleam@ws@packets@channel_delete:string_to_data(
Msg
),
_pipe@13 = gleam@result:map(
_pipe@12,
fun(Field@0) -> {channel_delete_packet, Field@0} end
),
gleam@result:unwrap(_pipe@13, {unknown_packet, Generic_packet});
<<"CHANNEL_UPDATE"/utf8>> ->
_pipe@14 = discord_gleam@ws@packets@channel_update:string_to_data(
Msg
),
_pipe@15 = gleam@result:map(
_pipe@14,
fun(Field@0) -> {channel_update_packet, Field@0} end
),
gleam@result:unwrap(_pipe@15, {unknown_packet, Generic_packet});
_ ->
{unknown_packet, Generic_packet}
end.
-file("src/discord_gleam/event_handler.gleam", 92).
?DOC(" Handle an event from the Discord API, using a set of event handlers.\n").
-spec handle_event(
discord_gleam@types@bot:bot(),
binary(),
list(fun((discord_gleam@types@bot:bot(), packet()) -> nil)),
bravo@uset:u_set({binary(), binary()})
) -> nil.
handle_event(Bot, Msg, Handlers, State_uset) ->
Packet = decode_packet(Msg),
internal_handler(Bot, Packet, State_uset),
gleam@list:each(Handlers, fun(Handler) -> Handler(Bot, Packet) end).