Current section
Files
Jump to
Current section
Files
src/telega@message.erl
-module(telega@message).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([decode/1]).
-export_type([message_kind/0, message/0]).
-type message_kind() :: common_message | command_message | text_message.
-type message() :: {message, message_kind(), telega@models@message:message()}.
-spec is_command_message(binary(), telega@models@message:message()) -> boolean().
is_command_message(Text, Raw_message) ->
gleam@bool:guard(
not gleam@string:starts_with(Text, <<"/"/utf8>>),
false,
fun() -> case erlang:element(18, Raw_message) of
none ->
false;
{some, Entities} ->
Is_command_entity = fun(Entity) ->
((erlang:element(2, Entity) =:= <<"bot_command"/utf8>>)
andalso (erlang:element(3, Entity) =:= 0))
andalso (erlang:element(4, Entity) =:= gleam@string:length(
Text
))
end,
gleam@list:any(Entities, Is_command_entity)
end end
).
-spec raw_message_to_message(telega@models@message:message()) -> message().
raw_message_to_message(Raw_message) ->
case erlang:element(17, Raw_message) of
none ->
{message, common_message, Raw_message};
{some, Text} ->
case is_command_message(Text, Raw_message) of
true ->
{message, command_message, Raw_message};
false ->
{message, text_message, Raw_message}
end
end.
-spec decode(gleam@dynamic:dynamic_()) -> {ok, message()} |
{error, list(gleam@dynamic:decode_error())}.
decode(Json) ->
gleam@result:'try'(
telega@models@update:decode(Json),
fun(Update) ->
{ok, raw_message_to_message(erlang:element(2, Update))}
end
).