Packages

A Gleam library for interacting with the Discord API

Current section

Files

Jump to
shimmer src shimmer@types@presence.erl
Raw

src/shimmer@types@presence.erl

-module(shimmer@types@presence).
-compile(no_auto_import).
-export([presence_activity_flag_to_int/1, presence_activity_flags_to_int/1, to_map/1]).
-export_type([presence_status/0, presence_activity_type/0, presence_activity_timestamps/0, presence_activity_party/0, presence_activity_assets/0, presence_activity_secrets/0, presence_activity_flags/0, presence_activity_button/0, presence_activity/0, presence/0]).
-type presence_status() :: online | do_not_disturb | idle | invisible | offline.
-type presence_activity_type() :: game |
streaming |
listening |
custom |
competing.
-type presence_activity_timestamps() :: {presence_activity_timestamps,
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type presence_activity_party() :: {presence_activity_party,
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type presence_activity_assets() :: {presence_activity_assets,
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type presence_activity_secrets() :: {presence_activity_secrets,
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type presence_activity_flags() :: instace |
join |
spectate |
join_request |
sync |
play |
party_privacy_friends |
party_privacy_voice_channel |
embedded.
-type presence_activity_button() :: {presence_activity_button,
binary(),
binary()}.
-type presence_activity() :: {presence_activity,
binary(),
presence_activity_type(),
gleam@option:option(binary()),
integer(),
gleam@option:option(presence_activity_timestamps()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(shimmer@types@emoji:emoji()),
gleam@option:option(presence_activity_party()),
gleam@option:option(presence_activity_assets()),
gleam@option:option(presence_activity_secrets()),
gleam@option:option(boolean()),
gleam@option:option(list(presence_activity_flags())),
gleam@option:option(list(presence_activity_button()))}.
-type presence() :: {presence,
presence_status(),
list(presence_activity()),
gleam@option:option(integer()),
boolean()}.
-spec presence_activity_flag_to_int(presence_activity_flags()) -> integer().
presence_activity_flag_to_int(Flag) ->
case Flag of
instace ->
_pipe = 1,
gleam@bitwise:shift_left(_pipe, 0);
join ->
_pipe@1 = 1,
gleam@bitwise:shift_left(_pipe@1, 1);
spectate ->
_pipe@2 = 1,
gleam@bitwise:shift_left(_pipe@2, 2);
join_request ->
_pipe@3 = 1,
gleam@bitwise:shift_left(_pipe@3, 3);
sync ->
_pipe@4 = 1,
gleam@bitwise:shift_left(_pipe@4, 4);
play ->
_pipe@5 = 1,
gleam@bitwise:shift_left(_pipe@5, 5);
party_privacy_friends ->
_pipe@6 = 1,
gleam@bitwise:shift_left(_pipe@6, 6);
party_privacy_voice_channel ->
_pipe@7 = 1,
gleam@bitwise:shift_left(_pipe@7, 7);
embedded ->
_pipe@8 = 1,
gleam@bitwise:shift_left(_pipe@8, 8)
end.
-spec presence_activity_flags_to_int(list(presence_activity_flags())) -> integer().
presence_activity_flags_to_int(Flags) ->
_pipe = Flags,
_pipe@1 = gleam@list:map(_pipe, fun presence_activity_flag_to_int/1),
gleam@list:fold(_pipe@1, 0, fun(A, B) -> gleam@bitwise:'or'(A, B) end).
-spec to_map(presence()) -> gleam@map:map_(binary(), gleam@dynamic:dynamic()).
to_map(Self) ->
Data = begin
_pipe = gleam@map:new(),
_pipe@1 = gleam@map:insert(
_pipe,
<<"status"/utf8>>,
gleam@dynamic:from(erlang:element(2, Self))
),
_pipe@2 = gleam@map:insert(
_pipe@1,
<<"since"/utf8>>,
gleam@dynamic:from(erlang:element(4, Self))
),
gleam@map:insert(
_pipe@2,
<<"afk"/utf8>>,
gleam@dynamic:from(erlang:element(5, Self))
)
end,
Activities = begin
_pipe@3 = erlang:element(3, Self),
gleam@list:map(
_pipe@3,
fun(Activity) ->
_pipe@4 = gleam@map:new(),
_pipe@5 = gleam@map:insert(
_pipe@4,
<<"name"/utf8>>,
gleam@dynamic:from(erlang:element(2, Activity))
),
_pipe@6 = gleam@map:insert(
_pipe@5,
<<"type"/utf8>>,
gleam@dynamic:from(erlang:element(3, Activity))
),
_pipe@7 = gleam@map:insert(
_pipe@6,
<<"url"/utf8>>,
gleam@dynamic:from(erlang:element(4, Activity))
),
_pipe@8 = gleam@map:insert(
_pipe@7,
<<"created_at"/utf8>>,
gleam@dynamic:from(erlang:element(5, Activity))
),
_pipe@13 = gleam@map:insert(
_pipe@8,
<<"timestamps"/utf8>>,
case erlang:element(6, Activity) of
{some, T} ->
_pipe@9 = gleam@map:new(),
_pipe@10 = gleam@map:insert(
_pipe@9,
<<"start"/utf8>>,
gleam@dynamic:from(erlang:element(2, T))
),
_pipe@11 = gleam@map:insert(
_pipe@10,
<<"end"/utf8>>,
gleam@dynamic:from(erlang:element(3, T))
),
gleam@dynamic:from(_pipe@11);
none ->
_pipe@12 = nil,
gleam@dynamic:from(_pipe@12)
end
),
_pipe@14 = gleam@map:insert(
_pipe@13,
<<"application_id"/utf8>>,
gleam@dynamic:from(erlang:element(7, Activity))
),
_pipe@15 = gleam@map:insert(
_pipe@14,
<<"details"/utf8>>,
gleam@dynamic:from(erlang:element(8, Activity))
),
_pipe@16 = gleam@map:insert(
_pipe@15,
<<"state"/utf8>>,
gleam@dynamic:from(erlang:element(9, Activity))
),
_pipe@20 = gleam@map:insert(
_pipe@16,
<<"emoji"/utf8>>,
case erlang:element(10, Activity) of
{some, E} ->
_pipe@17 = E,
_pipe@18 = shimmer@types@emoji:to_map(_pipe@17),
gleam@dynamic:from(_pipe@18);
none ->
_pipe@19 = nil,
gleam@dynamic:from(_pipe@19)
end
),
_pipe@27 = gleam@map:insert(
_pipe@20,
<<"party"/utf8>>,
case erlang:element(11, Activity) of
{some, P} ->
_pipe@21 = gleam@map:new(),
_pipe@22 = gleam@map:insert(
_pipe@21,
<<"id"/utf8>>,
gleam@dynamic:from(erlang:element(2, P))
),
_pipe@25 = gleam@map:insert(
_pipe@22,
<<"size"/utf8>>,
gleam@dynamic:from(
[begin
_pipe@23 = erlang:element(4, P),
gleam@option:unwrap(_pipe@23, 0)
end,
begin
_pipe@24 = erlang:element(3, P),
gleam@option:unwrap(_pipe@24, 0)
end]
)
),
gleam@dynamic:from(_pipe@25);
none ->
_pipe@26 = nil,
gleam@dynamic:from(_pipe@26)
end
),
_pipe@34 = gleam@map:insert(
_pipe@27,
<<"assets"/utf8>>,
case erlang:element(12, Activity) of
{some, A} ->
_pipe@28 = gleam@map:new(),
_pipe@29 = gleam@map:insert(
_pipe@28,
<<"large_image"/utf8>>,
gleam@dynamic:from(erlang:element(2, A))
),
_pipe@30 = gleam@map:insert(
_pipe@29,
<<"large_text"/utf8>>,
gleam@dynamic:from(erlang:element(3, A))
),
_pipe@31 = gleam@map:insert(
_pipe@30,
<<"small_image"/utf8>>,
gleam@dynamic:from(erlang:element(4, A))
),
_pipe@32 = gleam@map:insert(
_pipe@31,
<<"small_text"/utf8>>,
gleam@dynamic:from(erlang:element(5, A))
),
gleam@dynamic:from(_pipe@32);
none ->
_pipe@33 = nil,
gleam@dynamic:from(_pipe@33)
end
),
_pipe@40 = gleam@map:insert(
_pipe@34,
<<"secrets"/utf8>>,
case erlang:element(13, Activity) of
{some, S} ->
_pipe@35 = gleam@map:new(),
_pipe@36 = gleam@map:insert(
_pipe@35,
<<"join"/utf8>>,
gleam@dynamic:from(erlang:element(2, S))
),
_pipe@37 = gleam@map:insert(
_pipe@36,
<<"spectate"/utf8>>,
gleam@dynamic:from(erlang:element(3, S))
),
_pipe@38 = gleam@map:insert(
_pipe@37,
<<"match"/utf8>>,
gleam@dynamic:from(erlang:element(4, S))
),
gleam@dynamic:from(_pipe@38);
none ->
_pipe@39 = nil,
gleam@dynamic:from(_pipe@39)
end
),
_pipe@41 = gleam@map:insert(
_pipe@40,
<<"instance"/utf8>>,
gleam@dynamic:from(erlang:element(14, Activity))
),
_pipe@42 = gleam@map:insert(
_pipe@41,
<<"flags"/utf8>>,
gleam@dynamic:from(erlang:element(15, Activity))
),
_pipe@48 = gleam@map:insert(
_pipe@42,
<<"buttons"/utf8>>,
begin
_pipe@43 = erlang:element(16, Activity),
_pipe@44 = gleam@option:unwrap(_pipe@43, []),
_pipe@47 = gleam@list:map(
_pipe@44,
fun(Button) ->
_pipe@45 = gleam@map:new(),
_pipe@46 = gleam@map:insert(
_pipe@45,
<<"label"/utf8>>,
gleam@dynamic:from(
erlang:element(2, Button)
)
),
gleam@map:insert(
_pipe@46,
<<"url"/utf8>>,
gleam@dynamic:from(
erlang:element(2, Button)
)
)
end
),
gleam@dynamic:from(_pipe@47)
end
),
gleam@dynamic:from(_pipe@48)
end
)
end,
_pipe@49 = Data,
gleam@map:insert(
_pipe@49,
<<"activities"/utf8>>,
gleam@dynamic:from(Activities)
).