-module(discord_gleam@event_handler). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/discord_gleam/event_handler.gleam"). -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() :: {ready_packet, discord_gleam@ws@packets@ready:ready_packet()} | {interaction_create_packet, discord_gleam@ws@packets@interaction_create:interaction_create_packet()} | {message_delete_packet, discord_gleam@ws@packets@message_delete:message_delete_packet()} | {message_packet, discord_gleam@ws@packets@message:message_packet()} | {message_update_packet, discord_gleam@ws@packets@message_update:message_update_packet()} | {message_delete_bulk_packet, discord_gleam@ws@packets@message_delete_bulk:message_delete_bulk_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()} | {guild_ban_add_packet, discord_gleam@ws@packets@guild_ban_add:guild_ban_add_packet()} | {guild_ban_remove_packet, discord_gleam@ws@packets@guild_ban_remove:guild_ban_remove_packet()} | {guild_role_create_packet, discord_gleam@ws@packets@guild_role_create:guild_role_create_packet()} | {guild_role_update_packet, discord_gleam@ws@packets@guild_role_update:guild_role_update_packet()} | {guild_role_delete_packet, discord_gleam@ws@packets@guild_role_delete:guild_role_delete_packet()} | {guild_member_add_packet, discord_gleam@ws@packets@guild_member_add:guild_member_add()} | {guild_member_update_packet, discord_gleam@ws@packets@guild_member_update:guild_member_update()} | {guild_member_remove_packet, discord_gleam@ws@packets@guild_member_remove:guild_member_remove()} | {guild_members_chunk_packet, discord_gleam@ws@packets@guild_members_chunk:guild_members_chunk_packet()} | {presence_update_packet, discord_gleam@ws@packets@presence_update:presence_update_packet()} | {unknown_packet, discord_gleam@ws@packets@generic:generic_packet()}. -file("src/discord_gleam/event_handler.gleam", 84). ?DOC(" For handling some events the library needs to handle, for functionality\n"). -spec internal_handler( discord_gleam@types@bot:bot(), packet(), booklet:booklet(gleam@dict:dict(binary(), binary())) ) -> nil. internal_handler(Bot, Packet, State_ets) -> case Packet of {message_packet, Msg} -> booklet_ffi:update( erlang:element(2, erlang:element(5, Bot)), fun(Cache) -> gleam@dict:insert( Cache, erlang:element(3, erlang:element(5, Msg)), erlang:element(5, Msg) ) end ), nil; {message_update_packet, Msg@1} -> booklet_ffi:update( erlang:element(2, erlang:element(5, Bot)), fun(Cache@1) -> gleam@dict:insert( Cache@1, erlang:element(3, erlang:element(5, Msg@1)), erlang:element(5, Msg@1) ) end ), nil; {ready_packet, Ready} -> booklet_ffi:update( State_ets, fun(Cache@2) -> Cache@3 = gleam@dict:insert( Cache@2, <<"session_id"/utf8>>, erlang:element(5, erlang:element(5, Ready)) ), gleam@dict:insert( Cache@3, <<"resume_gateway_url"/utf8>>, erlang:element(6, erlang:element(5, Ready)) ) end ), nil; _ -> nil end. -file("src/discord_gleam/event_handler.gleam", 133). -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 <<"READY"/utf8>> -> case discord_gleam@ws@packets@ready:string_to_data(Msg) of {ok, Data} -> {ready_packet, Data}; {error, Err} -> logging:log( error, <<"Failed to decode READY packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err ))/binary>> ), {unknown_packet, Generic_packet} end; <<"MESSAGE_CREATE"/utf8>> -> case discord_gleam@ws@packets@message:string_to_data(Msg) of {ok, Data@1} -> {message_packet, Data@1}; {error, Err@1} -> logging:log( error, <<"Failed to decode MESSAGE_CREATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@1 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"MESSAGE_UPDATE"/utf8>> -> case discord_gleam@ws@packets@message_update:string_to_data(Msg) of {ok, Data@2} -> {message_update_packet, Data@2}; {error, Err@2} -> logging:log( error, <<"Failed to decode MESSAGE_UPDATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@2 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"MESSAGE_DELETE"/utf8>> -> case discord_gleam@ws@packets@message_delete:string_to_data(Msg) of {ok, Data@3} -> {message_delete_packet, Data@3}; {error, Err@3} -> logging:log( error, <<"Failed to decode MESSAGE_DELETE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@3 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"MESSAGE_DELETE_BULK"/utf8>> -> case discord_gleam@ws@packets@message_delete_bulk:string_to_data( Msg ) of {ok, Data@4} -> {message_delete_bulk_packet, Data@4}; {error, Err@4} -> logging:log( error, <<"Failed to decode MESSAGE_DELETE_BULK packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@4 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"INTERACTION_CREATE"/utf8>> -> case discord_gleam@ws@packets@interaction_create:string_to_data(Msg) of {ok, Data@5} -> {interaction_create_packet, Data@5}; {error, Err@5} -> logging:log( error, <<"Failed to decode INTERACTION_CREATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@5 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"CHANNEL_CREATE"/utf8>> -> case discord_gleam@ws@packets@channel_create:string_to_data(Msg) of {ok, Data@6} -> {channel_create_packet, Data@6}; {error, Err@6} -> logging:log( error, <<"Failed to decode CHANNEL_CREATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@6 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"CHANNEL_DELETE"/utf8>> -> case discord_gleam@ws@packets@channel_delete:string_to_data(Msg) of {ok, Data@7} -> {channel_delete_packet, Data@7}; {error, Err@7} -> logging:log( error, <<"Failed to decode CHANNEL_DELETE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@7 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"CHANNEL_UPDATE"/utf8>> -> case discord_gleam@ws@packets@channel_update:string_to_data(Msg) of {ok, Data@8} -> {channel_update_packet, Data@8}; {error, Err@8} -> logging:log( error, <<"Failed to decode CHANNEL_UPDATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@8 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_BAN_ADD"/utf8>> -> case discord_gleam@ws@packets@guild_ban_add:string_to_data(Msg) of {ok, Data@9} -> {guild_ban_add_packet, Data@9}; {error, Err@9} -> logging:log( error, <<"Failed to decode GUILD_BAN_ADD packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@9 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_BAN_REMOVE"/utf8>> -> case discord_gleam@ws@packets@guild_ban_remove:string_to_data(Msg) of {ok, Data@10} -> {guild_ban_remove_packet, Data@10}; {error, Err@10} -> logging:log( error, <<"Failed to decode GUILD_BAN_REMOVE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@10 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_ROLE_CREATE"/utf8>> -> case discord_gleam@ws@packets@guild_role_create:string_to_data(Msg) of {ok, Data@11} -> {guild_role_create_packet, Data@11}; {error, Err@11} -> logging:log( error, <<"Failed to decode GUILD_ROLE_CREATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@11 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_ROLE_UPDATE"/utf8>> -> case discord_gleam@ws@packets@guild_role_update:string_to_data(Msg) of {ok, Data@12} -> {guild_role_update_packet, Data@12}; {error, Err@12} -> logging:log( error, <<"Failed to decode GUILD_ROLE_UPDATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@12 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_ROLE_DELETE"/utf8>> -> case discord_gleam@ws@packets@guild_role_delete:string_to_data(Msg) of {ok, Data@13} -> {guild_role_delete_packet, Data@13}; {error, Err@13} -> logging:log( error, <<"Failed to decode GUILD_ROLE_DELETE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@13 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_MEMBER_ADD"/utf8>> -> case discord_gleam@ws@packets@guild_member_add:string_to_data(Msg) of {ok, Data@14} -> {guild_member_add_packet, Data@14}; {error, Err@14} -> logging:log( error, <<"Failed to decode GUILD_MEMBER_ADD packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@14 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_MEMBER_UPDATE"/utf8>> -> case discord_gleam@ws@packets@guild_member_update:string_to_data( Msg ) of {ok, Data@15} -> {guild_member_update_packet, Data@15}; {error, Err@15} -> logging:log( error, <<"Failed to decode GUILD_MEMBER_UPDATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@15 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_MEMBER_REMOVE"/utf8>> -> case discord_gleam@ws@packets@guild_member_remove:string_to_data( Msg ) of {ok, Data@16} -> {guild_member_remove_packet, Data@16}; {error, Err@16} -> logging:log( error, <<"Failed to decode GUILD_MEMBER_REMOVE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@16 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"GUILD_MEMBERS_CHUNK"/utf8>> -> case discord_gleam@ws@packets@guild_members_chunk:string_to_data( Msg ) of {ok, Data@17} -> {guild_members_chunk_packet, Data@17}; {error, Err@17} -> logging:log( error, <<"Failed to decode GUILD_MEMBERS_CHUNK packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@17 ))/binary>> ), {unknown_packet, Generic_packet} end; <<"PRESENCE_UPDATE"/utf8>> -> case discord_gleam@ws@packets@presence_update:string_to_data(Msg) of {ok, Data@18} -> {presence_update_packet, Data@18}; {error, Err@18} -> logging:log( error, <<"Failed to decode PRESENCE_UPDATE packet: "/utf8, (discord_gleam@internal@error:json_decode_error_to_string( Err@18 ))/binary>> ), {unknown_packet, Generic_packet} end; _ -> {unknown_packet, Generic_packet} end. -file("src/discord_gleam/event_handler.gleam", 121). ?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)), booklet:booklet(gleam@dict:dict(binary(), binary())) ) -> nil. handle_event(Bot, Msg, Handlers, State_ets) -> Packet = decode_packet(Msg), internal_handler(Bot, Packet, State_ets), gleam@list:each(Handlers, fun(Handler) -> Handler(Bot, Packet) end).