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.