-module(discord_gleam@http@endpoints). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/discord_gleam/http/endpoints.gleam"). -export([me/1, send_message/3, create_dm_channel/2, send_direct_message/3, reply/3, kick_member/4, ban_member/4, delete_message/4, edit_message/4, wipe_global_commands/2, wipe_guild_commands/3, register_global_command/3, register_guild_command/4, interaction_send_text/3]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " Low-level functions for interacting with the Discord API. \\\n" " Preferrably use the higher-level functions in src/discord_gleam.gleam.\n" ). -file("src/discord_gleam/http/endpoints.gleam", 21). ?DOC(" Get the current user\n"). -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@httpc:send(Request) of {ok, Resp} -> case gleam@http@response:get_header(Resp, <<"content-type"/utf8>>) of {ok, <<"application/json"/utf8>>} -> discord_gleam@types@user:string_to_data( erlang:element(4, Resp) ); _ -> {error, {invalid_format, {decode_error, <<"application/json content-type"/utf8>>, <<"unknown"/utf8>>, []}}} end; {error, Err} -> logging:log(error, <<"Failed to get current user"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 51). ?DOC(" Send a message to a channel\n"). -spec send_message(binary(), binary(), discord_gleam@types@message:message()) -> {ok, discord_gleam@types@message_send_response:message_send_response()} | {error, discord_gleam@internal@error:discord_error()}. send_message(Token, Channel_id, Message) -> Data = discord_gleam@types@message:to_string(Message), logging:log(debug, <<"Sending message: "/utf8, Data/binary>>), Request = discord_gleam@http@request:new_auth_with_body( post, <<<<"/channels/"/utf8, Channel_id/binary>>/binary, "/messages"/utf8>>, Token, Data ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Message sent"/utf8>>), discord_gleam@types@message_send_response:from_json_string( erlang:element(4, Resp) ); _ -> logging:log(error, <<"Failed to send message"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to send message"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 97). ?DOC(" Create a DM channel, can be used to send direct messages where a direct message function is not created\n"). -spec create_dm_channel(binary(), binary()) -> {ok, discord_gleam@types@channel:channel()} | {error, discord_gleam@internal@error:discord_error()}. create_dm_channel(Token, User_id) -> Request = discord_gleam@http@request:new_auth_with_body( post, <<"/users/@me/channels"/utf8>>, Token, gleam@json:to_string( gleam@json:object( [{<<"recipient_id"/utf8>>, gleam@json:string(User_id)}] ) ) ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"DM channel created"/utf8>>), Channel = discord_gleam@types@channel:string_to_data( erlang:element(4, Resp) ), case Channel of {ok, Channel@1} -> {ok, Channel@1}; {error, Err} -> logging:log( error, <<"Failed to decode DM channel"/utf8>> ), {error, Err} end; V -> {error, {generic_http_error, V, erlang:element(4, Resp)}} end; {error, Err@1} -> logging:log(error, <<"Failed to create DM channel"/utf8>>), {error, {http_error, Err@1}} end. -file("src/discord_gleam/http/endpoints.gleam", 146). ?DOC(" Creates a DM channel, then sends a message with `send_message()`.\n"). -spec send_direct_message( binary(), binary(), discord_gleam@types@message:message() ) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. send_direct_message(Token, User_id, Message) -> Data = discord_gleam@types@message:to_string(Message), logging:log(debug, <<"Sending DM: "/utf8, Data/binary>>), Channel = create_dm_channel(Token, User_id), case Channel of {ok, Channel@1} -> _ = send_message(Token, erlang:element(2, Channel@1), Message), {ok, nil}; {error, Err} -> logging:log(error, <<"Failed to create DM channel"/utf8>>), {error, Err} end. -file("src/discord_gleam/http/endpoints.gleam", 173). ?DOC(" Reply to a message\n"). -spec reply(binary(), binary(), discord_gleam@types@reply:reply()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. reply(Token, Channel_id, Message) -> Data = discord_gleam@types@reply:to_string(Message), logging:log(debug, <<"Replying: "/utf8, Data/binary>>), Request = discord_gleam@http@request:new_auth_with_body( post, <<<<"/channels/"/utf8, Channel_id/binary>>/binary, "/messages"/utf8>>, Token, Data ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Reply sent"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to send reply"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to send reply"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 217). ?DOC(" Kick a member from a server\n"). -spec kick_member(binary(), binary(), binary(), binary()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. 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@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Kicked member"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to kick member"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to kick member"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 259). ?DOC(" Ban a member from a server\n"). -spec ban_member(binary(), binary(), binary(), binary()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. 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@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Banned member"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to ban member"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to ban member"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 300). ?DOC(" Delete a message by channel id and message id\n"). -spec delete_message(binary(), binary(), binary(), binary()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. 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@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Deleted Message"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to delete message"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to delete message"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 341). ?DOC(" Edit an message by channel id and message id\n"). -spec edit_message( binary(), binary(), binary(), discord_gleam@types@message:message() ) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. edit_message(Token, Channel_id, Message_id, Message) -> Data = discord_gleam@types@message:to_string(Message), logging:log(debug, <<"Editing message: "/utf8, Data/binary>>), Request = discord_gleam@http@request:new_auth_with_body( patch, <<<<<<"/channels/"/utf8, Channel_id/binary>>/binary, "/messages/"/utf8>>/binary, Message_id/binary>>, Token, Data ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Message edited"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to edit message"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to edit message"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 387). ?DOC(" Wipes the global commands for the bot\n"). -spec wipe_global_commands(binary(), binary()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. wipe_global_commands(Token, Client_id) -> Request = discord_gleam@http@request:new_auth_with_body( put, <<<<"/applications/"/utf8, Client_id/binary>>/binary, "/commands"/utf8>>, Token, <<"{}"/utf8>> ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Wiped global commands"/utf8>>), {ok, nil}; _ -> logging:log( error, <<"Failed to wipe global commands"/utf8>> ), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to wipe global commands"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 426). ?DOC(" Wipes the guild commands for the bot\n"). -spec wipe_guild_commands(binary(), binary(), binary()) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. wipe_guild_commands(Token, Client_id, Guild_id) -> Request = discord_gleam@http@request:new_auth_with_body( put, <<<<<<<<"/applications/"/utf8, Client_id/binary>>/binary, "/guilds/"/utf8>>/binary, Guild_id/binary>>/binary, "/commands"/utf8>>, Token, <<"{}"/utf8>> ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 200 -> logging:log(debug, <<"Wiped guild commands"/utf8>>), {ok, nil}; _ -> logging:log(error, <<"Failed to wipe guild commands"/utf8>>), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to wipe guild commands"/utf8>>), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 466). ?DOC(" Register a new global slash command\n"). -spec register_global_command( binary(), binary(), discord_gleam@types@slash_command:slash_command() ) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. register_global_command(Token, Client_id, Command) -> Request = discord_gleam@http@request:new_auth_with_body( post, <<<<"/applications/"/utf8, Client_id/binary>>/binary, "/commands"/utf8>>, Token, discord_gleam@types@slash_command:command_to_string(Command) ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 201 -> logging:log( debug, <<"Added global command "/utf8, (erlang:element(2, Command))/binary>> ), {ok, nil}; 200 -> logging:log( debug, <<"Updated global command "/utf8, (erlang:element(2, Command))/binary>> ), {ok, nil}; _ -> logging:log( error, <<"Failed to add global command "/utf8, (erlang:element(2, Command))/binary>> ), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log( error, <<"Failed to add global command "/utf8, (erlang:element(2, Command))/binary>> ), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 520). ?DOC(" Register a new guild-specific slash command\n"). -spec register_guild_command( binary(), binary(), binary(), discord_gleam@types@slash_command:slash_command() ) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. register_guild_command(Token, Client_id, Guild_id, Command) -> Request = discord_gleam@http@request:new_auth_with_body( post, <<<<<<<<"/applications/"/utf8, Client_id/binary>>/binary, "/guilds/"/utf8>>/binary, Guild_id/binary>>/binary, "/commands"/utf8>>, Token, discord_gleam@types@slash_command:command_to_string(Command) ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 201 -> logging:log( debug, <<"Added guild command "/utf8, (erlang:element(2, Command))/binary>> ), {ok, nil}; 200 -> logging:log( debug, <<"Updated guild command "/utf8, (erlang:element(2, Command))/binary>> ), {ok, nil}; _ -> logging:log( error, <<"Failed to add guild command "/utf8, (erlang:element(2, Command))/binary>> ), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log( error, <<"Failed to add guild command "/utf8, (erlang:element(2, Command))/binary>> ), {error, {http_error, Err}} end. -file("src/discord_gleam/http/endpoints.gleam", 571). ?DOC(" Send a basic text reply to an interaction\n"). -spec interaction_send_text( discord_gleam@ws@packets@interaction_create:interaction_create_packet(), binary(), boolean() ) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}. interaction_send_text(Interaction, Message, Ephemeral) -> Request = discord_gleam@http@request:new_with_body( 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, Ephemeral ) ), case gleam@httpc:send(Request) of {ok, Resp} -> case erlang:element(2, Resp) of 204 -> logging:log(debug, <<"Sent Interaction Response"/utf8>>), {ok, nil}; _ -> logging:log( error, <<"Failed to send Interaction Response"/utf8>> ), {error, {generic_http_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log( error, <<"Error when sending Interaction Response"/utf8>> ), {error, {http_error, Err}} end.