Current section

Files

Jump to
discord_gleam src discord_gleam@http@channels.erl
Raw

src/discord_gleam@http@channels.erl

-module(discord_gleam@http@channels).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/discord_gleam/http/channels.gleam").
-export([send_message/3, reply/3, delete_message/4, edit_message/4, get_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/channels.gleam", 12).
?DOC(" Send a message to a channel\n").
-spec send_message(
binary(),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:channel()),
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,
(discord_gleam@discord@snowflake:to_string(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)
);
429 ->
logging:log(
error,
<<"Failed to send message: rate limited"/utf8>>
),
{error,
discord_gleam@http@request:extract_ratelimit_error(Resp)};
_ ->
logging:log(error, <<"Failed to send message"/utf8>>),
{error,
{api_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/channels.gleam", 61).
?DOC(" Reply to a message\n").
-spec reply(
binary(),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:channel()),
discord_gleam@types@reply:reply()
) -> {ok, discord_gleam@types@message_send_response:message_send_response()} |
{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,
(discord_gleam@discord@snowflake:to_string(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>>),
discord_gleam@types@message_send_response:from_json_string(
erlang:element(4, Resp)
);
429 ->
logging:log(
error,
<<"Failed to send reply: rate limited"/utf8>>
),
{error,
discord_gleam@http@request:extract_ratelimit_error(Resp)};
_ ->
logging:log(error, <<"Failed to send reply"/utf8>>),
{error,
{api_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/channels.gleam", 110).
?DOC(" Delete a message by channel id and message id\n").
-spec delete_message(
binary(),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:channel()),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:message()),
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,
(discord_gleam@discord@snowflake:to_string(Channel_id))/binary>>/binary,
"/messages/"/utf8>>/binary,
(discord_gleam@discord@snowflake:to_string(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};
429 ->
logging:log(
error,
<<"Failed to delete message: rate limited"/utf8>>
),
{error,
discord_gleam@http@request:extract_ratelimit_error(Resp)};
_ ->
logging:log(error, <<"Failed to delete message"/utf8>>),
{error,
{api_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/channels.gleam", 159).
?DOC(" Edit a message by channel id and message id\n").
-spec edit_message(
binary(),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:channel()),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:message()),
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,
(discord_gleam@discord@snowflake:to_string(Channel_id))/binary>>/binary,
"/messages/"/utf8>>/binary,
(discord_gleam@discord@snowflake:to_string(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};
429 ->
logging:log(
error,
<<"Failed to edit message: rate limited"/utf8>>
),
{error,
discord_gleam@http@request:extract_ratelimit_error(Resp)};
_ ->
logging:log(error, <<"Failed to edit message"/utf8>>),
{error,
{api_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/channels.gleam", 211).
-spec get_message(
binary(),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:channel()),
discord_gleam@discord@snowflake:snowflake(discord_gleam@discord@snowflake:message())
) -> {ok, discord_gleam@types@message_send_response:message_send_response()} |
{error, discord_gleam@internal@error:discord_error()}.
get_message(Token, Channel_id, Message_id) ->
Request = discord_gleam@http@request:new_auth(
get,
<<<<<<"/channels/"/utf8,
(discord_gleam@discord@snowflake:to_string(Channel_id))/binary>>/binary,
"/messages/"/utf8>>/binary,
(discord_gleam@discord@snowflake:to_string(Message_id))/binary>>,
Token
),
case gleam@httpc:send(Request) of
{ok, Resp} ->
case erlang:element(2, Resp) of
200 ->
logging:log(debug, <<"Got message"/utf8>>),
discord_gleam@types@message_send_response:from_json_string(
erlang:element(4, Resp)
);
429 ->
logging:log(
error,
<<"Failed to get message: rate limited"/utf8>>
),
{error,
discord_gleam@http@request:extract_ratelimit_error(Resp)};
_ ->
logging:log(error, <<"Failed to get message"/utf8>>),
{error,
{api_error,
erlang:element(2, Resp),
erlang:element(4, Resp)}}
end;
{error, Err} ->
logging:log(error, <<"Failed to get message"/utf8>>),
{error, {http_error, Err}}
end.