Packages

A purely Gleam Discord library built from the ground up with stratus.

Current section

Files

Jump to
glyph src glyph@clients@api.erl
Raw

src/glyph@clients@api.erl

-module(glyph@clients@api).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/3, get_application/1, get_gateway_bot/1, create_message/3]).
-export_type([api_client/0, api_error/0]).
-type api_client() :: {api_client,
glyph@network@rest:token_type(),
binary(),
binary(),
binary()}.
-type api_error() :: hackney_error | decode_error.
-spec new(binary(), binary(), binary()) -> api_client().
new(Token, Client_url, Client_version) ->
{api_client, bot, Token, Client_url, Client_version}.
-spec get_application(api_client()) -> {ok, glyph@models@discord:application()} |
{error, api_error()}.
get_application(C) ->
gleam@result:'try'(
begin
_pipe = glyph@network@rest:new(),
_pipe@1 = glyph@network@rest:set_authorization(
_pipe,
erlang:element(2, C),
erlang:element(3, C)
),
_pipe@2 = glyph@network@rest:set_bot_user_agent(
_pipe@1,
erlang:element(4, C),
erlang:element(5, C)
),
_pipe@3 = glyph@network@rest:get(
_pipe@2,
<<"/applications/@me"/utf8>>
),
gleam@result:replace_error(_pipe@3, hackney_error)
end,
fun(Resp) ->
gleam@result:'try'(
begin
_pipe@4 = erlang:element(4, Resp),
_pipe@5 = gleam@json:decode(
_pipe@4,
glyph@models@decoders:application_decoder()
),
gleam@result:replace_error(_pipe@5, decode_error)
end,
fun(App) -> {ok, App} end
)
end
).
-spec get_gateway_bot(api_client()) -> {ok,
glyph@models@discord:get_gateway_bot()} |
{error, api_error()}.
get_gateway_bot(C) ->
gleam@result:'try'(
begin
_pipe = glyph@network@rest:new(),
_pipe@1 = glyph@network@rest:set_authorization(
_pipe,
erlang:element(2, C),
erlang:element(3, C)
),
_pipe@2 = glyph@network@rest:set_bot_user_agent(
_pipe@1,
erlang:element(4, C),
erlang:element(5, C)
),
_pipe@3 = glyph@network@rest:get(_pipe@2, <<"/gateway/bot"/utf8>>),
gleam@result:replace_error(_pipe@3, hackney_error)
end,
fun(Resp) ->
gleam@result:'try'(
begin
_pipe@4 = erlang:element(4, Resp),
_pipe@5 = gleam@json:decode(
_pipe@4,
glyph@models@decoders:get_gateway_bot_decoder()
),
gleam@result:replace_error(_pipe@5, decode_error)
end,
fun(Gateway_info) -> {ok, Gateway_info} end
)
end
).
-spec create_message(
api_client(),
binary(),
glyph@models@discord:message_payload()
) -> {ok, nil} | {error, api_error()}.
create_message(C, Channel_id, Message) ->
gleam@result:'try'(
begin
_pipe = glyph@network@rest:new(),
_pipe@1 = glyph@network@rest:set_authorization(
_pipe,
erlang:element(2, C),
erlang:element(3, C)
),
_pipe@2 = glyph@network@rest:set_bot_user_agent(
_pipe@1,
erlang:element(4, C),
erlang:element(5, C)
),
_pipe@3 = glyph@network@rest:set_content_type(
_pipe@2,
<<"application/json"/utf8>>
),
_pipe@4 = glyph@network@rest:post(
_pipe@3,
<<<<"/channels/"/utf8, Channel_id/binary>>/binary,
"/messages"/utf8>>,
glyph@models@encoders:message_to_json(Message)
),
gleam@result:replace_error(_pipe@4, hackney_error)
end,
fun(_) -> {ok, nil} end
).