-module(discord_webhook). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/discord_webhook.gleam"). -export([embed/0, embed_title/2, embed_description/2, embed_color/2, embed_field/4, message/1, empty/0, add_message/2, add_embed/2, new/1, send/2]). -export_type([webhook/0, embed/0, message/0]). -opaque webhook() :: {webhook, binary()}. -opaque embed() :: {embed, gleam@option:option(binary()), gleam@option:option(binary()), gleam@option:option(integer()), list({binary(), binary(), boolean()})}. -opaque message() :: {message, list(binary()), list(embed())}. -file("src/discord_webhook.gleam", 31). -spec embed() -> embed(). embed() -> {embed, none, none, none, []}. -file("src/discord_webhook.gleam", 36). -spec embed_title(embed(), binary()) -> embed(). embed_title(Embed, Title) -> {embed, {some, Title}, erlang:element(3, Embed), erlang:element(4, Embed), erlang:element(5, Embed)}. -file("src/discord_webhook.gleam", 41). -spec embed_description(embed(), binary()) -> embed(). embed_description(Embed, Description) -> {embed, erlang:element(2, Embed), {some, Description}, erlang:element(4, Embed), erlang:element(5, Embed)}. -file("src/discord_webhook.gleam", 46). -spec embed_color(embed(), integer()) -> embed(). embed_color(Embed, Color) -> {embed, erlang:element(2, Embed), erlang:element(3, Embed), {some, Color}, erlang:element(5, Embed)}. -file("src/discord_webhook.gleam", 51). -spec embed_field(embed(), binary(), binary(), boolean()) -> embed(). embed_field(Embed, Name, Value, Inline) -> New_field = {Name, Value, Inline}, {embed, erlang:element(2, Embed), erlang:element(3, Embed), erlang:element(4, Embed), lists:append(erlang:element(5, Embed), [New_field])}. -file("src/discord_webhook.gleam", 62). -spec message(binary()) -> message(). message(Content) -> {message, [Content], []}. -file("src/discord_webhook.gleam", 67). -spec empty() -> message(). empty() -> {message, [], []}. -file("src/discord_webhook.gleam", 72). -spec add_message(message(), binary()) -> message(). add_message(Msg, Content) -> {message, lists:append(erlang:element(2, Msg), [Content]), erlang:element(3, Msg)}. -file("src/discord_webhook.gleam", 77). -spec add_embed(message(), embed()) -> message(). add_embed(Msg, Embed) -> {message, erlang:element(2, Msg), lists:append(erlang:element(3, Msg), [Embed])}. -file("src/discord_webhook.gleam", 82). -spec new(binary()) -> webhook(). new(Url) -> {webhook, Url}. -file("src/discord_webhook.gleam", 87). -spec embed_to_json(embed()) -> gleam@json:json(). embed_to_json(Embed) -> Title_field = case erlang:element(2, Embed) of {some, T} -> [{<<"title"/utf8>>, gleam@json:string(T)}]; none -> [] end, Description_field = case erlang:element(3, Embed) of {some, D} -> [{<<"description"/utf8>>, gleam@json:string(D)}]; none -> [] end, Color_field = case erlang:element(4, Embed) of {some, C} -> [{<<"color"/utf8>>, gleam@json:int(C)}]; none -> [] end, Fields_json = case erlang:element(5, Embed) of [] -> []; Fields -> [{<<"fields"/utf8>>, gleam@json:array( Fields, fun(Field) -> gleam@json:object( [{<<"name"/utf8>>, gleam@json:string( erlang:element(1, Field) )}, {<<"value"/utf8>>, gleam@json:string( erlang:element(2, Field) )}, {<<"inline"/utf8>>, gleam@json:bool( erlang:element(3, Field) )}] ) end )}] end, All_fields = lists:append( [Title_field, Description_field, Color_field, Fields_json] ), gleam@json:object(All_fields). -file("src/discord_webhook.gleam", 130). -spec convert_json(message()) -> binary(). convert_json(Message) -> Content_field = case erlang:element(2, Message) of [] -> []; [Single] -> [{<<"content"/utf8>>, gleam@json:string(Single)}]; Multiple -> [{<<"content"/utf8>>, gleam@json:string( gleam@string:join(Multiple, <<"\n"/utf8>>) )}] end, Embeds_field = case erlang:element(3, Message) of [] -> []; Embeds -> [{<<"embeds"/utf8>>, gleam@json:array(Embeds, fun embed_to_json/1)}] end, _pipe = gleam@json:object(lists:append([Content_field, Embeds_field])), gleam@json:to_string(_pipe). -file("src/discord_webhook.gleam", 147). -spec send(webhook(), message()) -> {ok, nil} | {error, binary()}. send(Webhook, Msg) -> Json_payload = convert_json(Msg), case gleam@http@request:to(erlang:element(2, Webhook)) of {error, _} -> {error, <<"Failed to parse webhook URL.\nHint: Check the webhook url."/utf8>>}; {ok, Base_req} -> Req = begin _pipe = Base_req, _pipe@1 = gleam@http@request:set_method(_pipe, post), _pipe@2 = gleam@http@request:set_header( _pipe@1, <<"content-type"/utf8>>, <<"application/json"/utf8>> ), gleam@http@request:set_body(_pipe@2, Json_payload) end, case gleam@httpc:send(Req) of {ok, Response} -> case erlang:element(2, Response) of 204 -> {ok, nil}; _ -> {error, <<"Expected status 204, got "/utf8, (erlang:integer_to_binary( erlang:element(2, Response) ))/binary>>} end; {error, _} -> {error, <<"Failed to fire HTTP request entirely."/utf8>>} end end.