-module(discord_gleam@http@endpoints). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([me/1, send_message/3, kick_member/4, ban_member/4, delete_message/4, register_slash_command/3, interaction_send_text/2]). -spec me(binary()) -> {ok, discord_gleam@types@user:user()} | {error, discord_gleam@internal@error:discord_error()}. me(Token) -> Request = discord_gleam@http@request:new_auth( get, <<"/users/@me"/utf8>>, Token ), case gleam@hackney:send(Request) of {ok, Resp} -> case gleam@http@response:get_header(Resp, <<"content-type"/utf8>>) of {ok, <<"application/json"/utf8>>} -> discord_gleam@types@user:from_json_string( erlang:element(4, Resp) ); _ -> {error, {invalid_format, {decode_error, <<"application/json content-type"/utf8>>, <<"unknown"/utf8>>, []}}} end; {error, Err} -> {error, {http_error, Err}} end. -spec send_message(binary(), binary(), discord_gleam@types@message:message()) -> nil. send_message(Token, Channel_id, Message) -> Data = discord_gleam@types@message:to_string(Message), gleam@io:debug(Data), logging:log(debug, <<"Sending message: "/utf8, Data/binary>>), Request = discord_gleam@http@request:new_auth_post( post, <<<<"/channels/"/utf8, Channel_id/binary>>/binary, "/messages"/utf8>>, Token, Data ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Message sent"/utf8>>), nil; _ -> logging:log(error, <<"Failed to send message"/utf8>>), gleam@io:debug(erlang:element(4, Resp)), nil end, nil; {error, Err} -> logging:log(error, <<"Failed to send message: "/utf8>>), gleam@io:debug(Err), nil end. -spec kick_member(binary(), binary(), binary(), binary()) -> {binary(), binary()}. kick_member(Token, Guild_id, User_id, Reason) -> Request = discord_gleam@http@request:new_auth_with_header( delete, <<<<<<"/guilds/"/utf8, Guild_id/binary>>/binary, "/members/"/utf8>>/binary, User_id/binary>>, Token, {<<"X-Audit-Log-Reason"/utf8>>, Reason} ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Kicked member"/utf8>>), {<<"OK"/utf8>>, erlang:element(4, Resp)}; _ -> logging:log(error, <<"Failed to kick member"/utf8>>), gleam@io:debug(erlang:element(4, Resp)), {<<"FAILED"/utf8>>, erlang:element(4, Resp)} end; {error, Err} -> logging:log(error, <<"Failed to kick member: "/utf8>>), gleam@io:debug(Err), {<<"FAILED"/utf8>>, <<"ERROR"/utf8>>} end. -spec ban_member(binary(), binary(), binary(), binary()) -> {binary(), binary()}. ban_member(Token, Guild_id, User_id, Reason) -> Request = discord_gleam@http@request:new_auth_with_header( put, <<<<<<"/guilds/"/utf8, Guild_id/binary>>/binary, "/bans/"/utf8>>/binary, User_id/binary>>, Token, {<<"X-Audit-Log-Reason"/utf8>>, Reason} ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Banned member"/utf8>>), {<<"OK"/utf8>>, erlang:element(4, Resp)}; _ -> logging:log(error, <<"Failed to ban member"/utf8>>), gleam@io:debug(erlang:element(4, Resp)), {<<"FAILED"/utf8>>, erlang:element(4, Resp)} end; {error, Err} -> logging:log(error, <<"Failed to ban member: "/utf8>>), gleam@io:debug(Err), {<<"FAILED"/utf8>>, <<"ERROR"/utf8>>} end. -spec delete_message(binary(), binary(), binary(), binary()) -> {binary(), binary()}. delete_message(Token, Channel_id, Message_id, Reason) -> Request = discord_gleam@http@request:new_auth_with_header( delete, <<<<<<"/channels/"/utf8, Channel_id/binary>>/binary, "/messages/"/utf8>>/binary, Message_id/binary>>, Token, {<<"X-Audit-Log-Reason"/utf8>>, Reason} ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Deleted Message"/utf8>>), {<<"OK"/utf8>>, erlang:element(4, Resp)}; _ -> logging:log(error, <<"Failed to delete message"/utf8>>), gleam@io:debug(erlang:element(4, Resp)), {<<"FAILED"/utf8>>, erlang:element(4, Resp)} end; {error, Err} -> logging:log(error, <<"Failed to delete message"/utf8>>), gleam@io:debug(Err), {<<"FAILED"/utf8>>, <<"ERROR"/utf8>>} end. -spec register_slash_command( binary(), binary(), discord_gleam@types@slash_command:slash_command() ) -> {binary(), binary()}. register_slash_command(Token, Client_id, Command) -> Request = discord_gleam@http@request:new_auth_post( post, <<<<"/applications/"/utf8, Client_id/binary>>/binary, "/commands"/utf8>>, Token, discord_gleam@types@slash_command:command_to_string(Command) ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 201 -> logging:log( debug, <<"Added Slash Command "/utf8, (erlang:element(2, Command))/binary>> ), {<<"OK"/utf8>>, erlang:element(4, Resp)}; 200 -> logging:log( debug, <<"Updated Slash Command "/utf8, (erlang:element(2, Command))/binary>> ), {<<"OK"/utf8>>, erlang:element(4, Resp)}; _ -> logging:log( error, <<"Failed to add Slash Command"/utf8, (erlang:element(2, Command))/binary>> ), gleam@io:debug(erlang:element(4, Resp)), {<<"FAILED"/utf8>>, erlang:element(4, Resp)} end; {error, Err} -> logging:log( error, <<"Failed to add Slash Command"/utf8, (erlang:element(2, Command))/binary>> ), gleam@io:debug(Err), {<<"FAILED"/utf8>>, <<"ERROR"/utf8>>} end. -spec interaction_send_text( discord_gleam@ws@packets@interaction_create:interaction_create(), binary() ) -> {binary(), binary()}. interaction_send_text(Interaction, Message) -> Request = discord_gleam@http@request:new_post( post, <<<<<<<<"/interactions/"/utf8, (erlang:element(4, erlang:element(5, Interaction)))/binary>>/binary, "/"/utf8>>/binary, (erlang:element(2, erlang:element(5, Interaction)))/binary>>/binary, "/callback"/utf8>>, discord_gleam@types@slash_command:make_basic_text_reply(Message) ), case gleam@hackney:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Sent Interaction Response"/utf8>>), {<<"OK"/utf8>>, erlang:element(4, Resp)}; _ -> logging:log( error, <<"Failed to send Interaction Response"/utf8>> ), gleam@io:debug(erlang:element(4, Resp)), {<<"FAILED"/utf8>>, erlang:element(4, Resp)} end; {error, Err} -> logging:log( error, <<"Error when sending Interaction Response"/utf8>> ), gleam@io:debug(Err), {<<"FAILED"/utf8>>, <<"ERROR"/utf8>>} end.