Current section
Files
Jump to
Current section
Files
src/discord_gleam@http@users.erl
-module(discord_gleam@http@users).-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).-define(FILEPATH, "src/discord_gleam/http/users.gleam").-export([me/1, create_dm_channel/2, send_direct_message/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.-file("src/discord_gleam/http/users.gleam", 15).?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 erlang:element(2, Resp) of 200 -> discord_gleam@types@user:from_json_string( erlang:element(4, Resp) ); 429 -> logging:log( error, <<"Failed to get current user: rate limited"/utf8>> ), {error, discord_gleam@http@request:extract_ratelimit_error(Resp)}; _ -> {error, {api_error, erlang:element(2, Resp), erlang:element(4, Resp)}} end; {error, Err} -> logging:log(error, <<"Failed to get current user"/utf8>>), {error, {http_error, Err}} end.-file("src/discord_gleam/http/users.gleam", 44).?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(), discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:user())) -> {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( discord_gleam@discord@snowflake:to_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:from_json_string( 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; 429 -> logging:log( error, <<"Failed to create DM channel: rate limited"/utf8>> ), {error, discord_gleam@http@request:extract_ratelimit_error(Resp)}; _ -> {error, {api_error, erlang:element(2, Resp), 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/users.gleam", 106).?DOC(" Creates a DM channel, then sends a message with `send_message()`.\n").-spec send_direct_message( binary(), discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:user()), discord_gleam@types@message:message()) -> {ok, discord_gleam@types@message_send_response:message_send_response()} | {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} -> discord_gleam@http@channels:send_message( Token, erlang:element(2, Channel@1), Message ); {error, Err} -> logging:log(error, <<"Failed to create DM channel"/utf8>>), {error, Err} end.