Current section
Files
Jump to
Current section
Files
src/discord_gleam@http@endpoints.erl
-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]).
-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.