-module(telega). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -define(FILEPATH, "src/telega.gleam"). -export([is_webhook_path/2, is_secret_token_valid/2, get_api_config/1, new/4, handle_all/2, wait_any/4, handle_command/3, wait_command/5, handle_commands/3, wait_commands/5, handle_text/2, wait_text/4, handle_hears/3, wait_hears/5, handle_message/2, wait_message/4, handle_callback_query/3, wait_callback_query/5, handle_voice/2, wait_voice/4, handle_audio/2, wait_audio/4, handle_video/2, wait_video/4, handle_photos/2, wait_photos/4, handle_web_app_data/2, wait_web_app_data/4, with_catch_handler/2, handle_chat_member/2, log_context/3, with_session_settings/4, set_drop_pending_updates/2, set_max_connections/2, set_ip_address/2, set_allowed_updates/2, set_certificate/2, set_api_client/2, init/1, init_nil_session/1, handle_update/2]). -export_type([telega/2, telega_builder/2]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -opaque telega(ALWV, ALWW) :: {telega, telega@internal@config:config(), telega@model:user(), gleam@erlang@process:subject(telega@bot:bot_message())} | {gleam_phantom, ALWV, ALWW}. -opaque telega_builder(ALWX, ALWY) :: {telega_builder, telega@internal@config:config(), list(telega@bot:handler(ALWX, ALWY)), gleam@option:option(telega@bot:session_settings(ALWX, ALWY)), gleam@option:option(gleam@erlang@process:subject(telega@bot:bot_message())), gleam@option:option(fun((telega@bot:context(ALWX, ALWY), ALWY) -> {ok, nil} | {error, ALWY})), gleam@option:option(boolean()), gleam@option:option(integer()), gleam@option:option(binary()), gleam@option:option(list(binary())), gleam@option:option(telega@model:file())}. -file("src/telega.gleam", 50). ?DOC( " Check if a path is the webhook path for the bot.\n" "\n" " Useful if you plan to implement own adapter.\n" ). -spec is_webhook_path(telega(any(), any()), binary()) -> boolean(). is_webhook_path(Telega, Path) -> erlang:element(3, erlang:element(2, Telega)) =:= Path. -file("src/telega.gleam", 57). ?DOC( " Check if a secret token is valid.\n" "\n" " Useful if you plan to implement own adapter.\n" ). -spec is_secret_token_valid(telega(any(), any()), binary()) -> boolean(). is_secret_token_valid(Telega, Token) -> erlang:element(4, erlang:element(2, Telega)) =:= Token. -file("src/telega.gleam", 62). ?DOC(" Helper to get the config for API requests.\n"). -spec get_api_config(telega(any(), any())) -> telega@client:telegram_client(). get_api_config(Telega) -> erlang:element(5, erlang:element(2, Telega)). -file("src/telega.gleam", 67). ?DOC(" Create a new Telega instance.\n"). -spec new(binary(), binary(), binary(), gleam@option:option(binary())) -> telega_builder(any(), any()). new(Token, Server_url, Webhook_path, Secret_token) -> Url = telega@internal@utils:normalize_url(Server_url), Webhook_path@1 = telega@internal@utils:normalize_webhook_path(Webhook_path), {telega_builder, telega@internal@config:new(Token, Url, Webhook_path@1, Secret_token), [], none, none, none, none, none, none, none, none}. -file("src/telega.gleam", 91). ?DOC(" Handles all messages.\n"). -spec handle_all( telega_builder(ALXQ, ALXR), fun((telega@bot:context(ALXQ, ALXR), telega@update:update()) -> {ok, telega@bot:context(ALXQ, ALXR)} | {error, ALXR}) ) -> telega_builder(ALXQ, ALXR). handle_all(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_all, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 102). ?DOC( " Stops bot message handling from current chat and waits for any message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_any( telega@bot:context(ALYC, ALYD), gleam@option:option(telega@bot:handler(ALYC, ALYD)), gleam@option:option(integer()), fun((telega@bot:context(ALYC, ALYD), telega@update:update()) -> {ok, telega@bot:context(ALYC, ALYD)} | {error, ALYD}) ) -> {ok, telega@bot:context(ALYC, ALYD)} | {error, ALYD}. wait_any(Ctx, Handle_else, Timeout, Handler) -> telega@bot:wait_handler(Ctx, {handle_all, Handler}, Handle_else, Timeout). -file("src/telega.gleam", 113). ?DOC(" Handles a specific command.\n"). -spec handle_command( telega_builder(ALYU, ALYV), binary(), fun((telega@bot:context(ALYU, ALYV), telega@update:command()) -> {ok, telega@bot:context(ALYU, ALYV)} | {error, ALYV}) ) -> telega_builder(ALYU, ALYV). handle_command(Builder, Command, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_command, Command, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 128). ?DOC( " Stops bot message handling from current chat and waits for a specific command.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_command( telega@bot:context(ALZF, ALZG), binary(), gleam@option:option(telega@bot:handler(ALZF, ALZG)), gleam@option:option(integer()), fun((telega@bot:context(ALZF, ALZG), telega@update:command()) -> {ok, telega@bot:context(ALZF, ALZG)} | {error, ALZG}) ) -> {ok, telega@bot:context(ALZF, ALZG)} | {error, ALZG}. wait_command(Ctx, Command, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_command, Command, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 145). ?DOC(" Handles multiple commands.\n"). -spec handle_commands( telega_builder(ALZX, ALZY), list(binary()), fun((telega@bot:context(ALZX, ALZY), telega@update:command()) -> {ok, telega@bot:context(ALZX, ALZY)} | {error, ALZY}) ) -> telega_builder(ALZX, ALZY). handle_commands(Builder, Commands, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_commands, Commands, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 160). ?DOC( " Stops bot message handling from current chat and waits for a specific command.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_commands( telega@bot:context(AMAJ, AMAK), list(binary()), gleam@option:option(telega@bot:handler(AMAJ, AMAK)), gleam@option:option(integer()), fun((telega@bot:context(AMAJ, AMAK), telega@update:command()) -> {ok, telega@bot:context(AMAJ, AMAK)} | {error, AMAK}) ) -> {ok, telega@bot:context(AMAJ, AMAK)} | {error, AMAK}. wait_commands(Ctx, Commands, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_commands, Commands, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 177). ?DOC(" Handles text messages.\n"). -spec handle_text( telega_builder(AMBC, AMBD), fun((telega@bot:context(AMBC, AMBD), binary()) -> {ok, telega@bot:context(AMBC, AMBD)} | {error, AMBD}) ) -> telega_builder(AMBC, AMBD). handle_text(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_text, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 188). ?DOC( " Stops bot message handling from current chat and waits for a text message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_text( telega@bot:context(AMBN, AMBO), gleam@option:option(telega@bot:handler(AMBN, AMBO)), gleam@option:option(integer()), fun((telega@bot:context(AMBN, AMBO), binary()) -> {ok, telega@bot:context(AMBN, AMBO)} | {error, AMBO}) ) -> {ok, telega@bot:context(AMBN, AMBO)} | {error, AMBO}. wait_text(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler(Ctx, {handle_text, Continue}, Handle_else, Timeout). -file("src/telega.gleam", 199). ?DOC(" Handles messages that match the given `Hears`.\n"). -spec handle_hears( telega_builder(AMCF, AMCG), telega@bot:hears(), fun((telega@bot:context(AMCF, AMCG), binary()) -> {ok, telega@bot:context(AMCF, AMCG)} | {error, AMCG}) ) -> telega_builder(AMCF, AMCG). handle_hears(Builder, Hears, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_hears, Hears, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 214). ?DOC( " Stops bot message handling from current chat and waits for a message that matches the given `Hears`.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_hears( telega@bot:context(AMCQ, AMCR), telega@bot:hears(), gleam@option:option(telega@bot:handler(AMCQ, AMCR)), gleam@option:option(integer()), fun((telega@bot:context(AMCQ, AMCR), binary()) -> {ok, telega@bot:context(AMCQ, AMCR)} | {error, AMCR}) ) -> {ok, telega@bot:context(AMCQ, AMCR)} | {error, AMCR}. wait_hears(Ctx, Hears, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_hears, Hears, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 231). ?DOC(" Handles any message.\n"). -spec handle_message( telega_builder(AMDI, AMDJ), fun((telega@bot:context(AMDI, AMDJ), telega@model:message()) -> {ok, telega@bot:context(AMDI, AMDJ)} | {error, AMDJ}) ) -> telega_builder(AMDI, AMDJ). handle_message(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_message, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 245). ?DOC( " Stops bot message handling from current chat and waits for any message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_message( telega@bot:context(AMDU, AMDV), gleam@option:option(telega@bot:handler(AMDU, AMDV)), gleam@option:option(integer()), fun((telega@bot:context(AMDU, AMDV), telega@model:message()) -> {ok, telega@bot:context(AMDU, AMDV)} | {error, AMDV}) ) -> {ok, telega@bot:context(AMDU, AMDV)} | {error, AMDV}. wait_message(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_message, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 263). ?DOC( " Handles messages from inline keyboard callback.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec handle_callback_query( telega_builder(AMEM, AMEN), telega@bot:callback_query_filter(), fun((telega@bot:context(AMEM, AMEN), binary(), binary()) -> {ok, telega@bot:context(AMEM, AMEN)} | {error, AMEN}) ) -> telega_builder(AMEM, AMEN). handle_callback_query(Builder, Filter, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_callback_query, Filter, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 278). ?DOC( " Wait for a callback query and continue with the given function.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_callback_query( telega@bot:context(AMEY, AMEZ), telega@bot:callback_query_filter(), gleam@option:option(telega@bot:handler(AMEY, AMEZ)), gleam@option:option(integer()), fun((telega@bot:context(AMEY, AMEZ), binary(), binary()) -> {ok, telega@bot:context(AMEY, AMEZ)} | {error, AMEZ}) ) -> {ok, telega@bot:context(AMEY, AMEZ)} | {error, AMEZ}. wait_callback_query(Ctx, Filter, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_callback_query, Filter, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 295). ?DOC(" Handles voice messages.\n"). -spec handle_voice( telega_builder(AMFQ, AMFR), fun((telega@bot:context(AMFQ, AMFR), telega@model:voice()) -> {ok, telega@bot:context(AMFQ, AMFR)} | {error, AMFR}) ) -> telega_builder(AMFQ, AMFR). handle_voice(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_voice, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 306). ?DOC( " Stops bot message handling from current chat and waits for a voice message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_voice( telega@bot:context(AMGC, AMGD), gleam@option:option(telega@bot:handler(AMGC, AMGD)), gleam@option:option(integer()), fun((telega@bot:context(AMGC, AMGD), telega@model:voice()) -> {ok, telega@bot:context(AMGC, AMGD)} | {error, AMGD}) ) -> {ok, telega@bot:context(AMGC, AMGD)} | {error, AMGD}. wait_voice(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler(Ctx, {handle_voice, Continue}, Handle_else, Timeout). -file("src/telega.gleam", 317). ?DOC(" Handles audio messages.\n"). -spec handle_audio( telega_builder(AMGU, AMGV), fun((telega@bot:context(AMGU, AMGV), telega@model:audio()) -> {ok, telega@bot:context(AMGU, AMGV)} | {error, AMGV}) ) -> telega_builder(AMGU, AMGV). handle_audio(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_audio, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 328). ?DOC( " Stops bot message handling from current chat and waits for an audio message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_audio( telega@bot:context(AMHF, AMHG), gleam@option:option(telega@bot:handler(AMHF, AMHG)), gleam@option:option(integer()), fun((telega@bot:context(AMHF, AMHG), telega@model:audio()) -> {ok, telega@bot:context(AMHF, AMHG)} | {error, AMHG}) ) -> {ok, telega@bot:context(AMHF, AMHG)} | {error, AMHG}. wait_audio(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler(Ctx, {handle_audio, Continue}, Handle_else, Timeout). -file("src/telega.gleam", 339). ?DOC(" Handles video messages.\n"). -spec handle_video( telega_builder(AMHX, AMHY), fun((telega@bot:context(AMHX, AMHY), telega@model:video()) -> {ok, telega@bot:context(AMHX, AMHY)} | {error, AMHY}) ) -> telega_builder(AMHX, AMHY). handle_video(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_video, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 350). ?DOC( " Stops bot message handling from current chat and waits for a video message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_video( telega@bot:context(AMII, AMIJ), gleam@option:option(telega@bot:handler(AMII, AMIJ)), gleam@option:option(integer()), fun((telega@bot:context(AMII, AMIJ), telega@model:video()) -> {ok, telega@bot:context(AMII, AMIJ)} | {error, AMIJ}) ) -> {ok, telega@bot:context(AMII, AMIJ)} | {error, AMIJ}. wait_video(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler(Ctx, {handle_video, Continue}, Handle_else, Timeout). -file("src/telega.gleam", 361). ?DOC(" Handles photo messages.\n"). -spec handle_photos( telega_builder(AMJA, AMJB), fun((telega@bot:context(AMJA, AMJB), list(telega@model:photo_size())) -> {ok, telega@bot:context(AMJA, AMJB)} | {error, AMJB}) ) -> telega_builder(AMJA, AMJB). handle_photos(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_photos, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 372). ?DOC( " Stops bot message handling from current chat and waits for a photo message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_photos( telega@bot:context(AMJM, AMJN), gleam@option:option(telega@bot:handler(AMJM, AMJN)), gleam@option:option(integer()), fun((telega@bot:context(AMJM, AMJN), list(telega@model:photo_size())) -> {ok, telega@bot:context(AMJM, AMJN)} | {error, AMJN}) ) -> {ok, telega@bot:context(AMJM, AMJN)} | {error, AMJN}. wait_photos(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_photos, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 388). ?DOC(" Handles web app data messages.\n"). -spec handle_web_app_data( telega_builder(AMKF, AMKG), fun((telega@bot:context(AMKF, AMKG), telega@model:web_app_data()) -> {ok, telega@bot:context(AMKF, AMKG)} | {error, AMKG}) ) -> telega_builder(AMKF, AMKG). handle_web_app_data(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_web_app_data, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 402). ?DOC( " Stops bot message handling from current chat and waits for a web app data message.\n" "\n" " See [conversation](/docs/conversation)\n" ). -spec wait_web_app_data( telega@bot:context(AMKQ, AMKR), gleam@option:option(telega@bot:handler(AMKQ, AMKR)), gleam@option:option(integer()), fun((telega@bot:context(AMKQ, AMKR), telega@model:web_app_data()) -> {ok, telega@bot:context(AMKQ, AMKR)} | {error, AMKR}) ) -> {ok, telega@bot:context(AMKQ, AMKR)} | {error, AMKR}. wait_web_app_data(Ctx, Handle_else, Timeout, Continue) -> telega@bot:wait_handler( Ctx, {handle_web_app_data, Continue}, Handle_else, Timeout ). -file("src/telega.gleam", 421). ?DOC( " Set a catch handler for all handlers.\n" "\n" " If handler returns `Error`, the chat instance will be stopped and the error will be logged\n" " The default handler is `fn(_) -> Ok(Nil)`, which will do nothing if handler returns an error\n" ). -spec with_catch_handler( telega_builder(AMLI, AMLJ), fun((telega@bot:context(AMLI, AMLJ), AMLJ) -> {ok, nil} | {error, AMLJ}) ) -> telega_builder(AMLI, AMLJ). with_catch_handler(Builder, Catch_handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {some, Catch_handler}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 429). ?DOC(" Handles chat member update (when user joins/leaves a group). The bot must be an administrator in the chat and must explicitly specify \"chat_member\" in the list of `allowed_updates` to receive these updates.\n"). -spec handle_chat_member( telega_builder(AMLQ, AMLR), fun((telega@bot:context(AMLQ, AMLR), telega@model:chat_member_updated()) -> {ok, telega@bot:context(AMLQ, AMLR)} | {error, AMLR}) ) -> telega_builder(AMLQ, AMLR). handle_chat_member(Builder, Handler) -> _record = Builder, {telega_builder, erlang:element(2, _record), [{handle_chat_member, Handler} | erlang:element(3, Builder)], erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 441). ?DOC(" Log the message and error message if the handler fails.\n"). -spec log_context( telega@bot:context(AMMC, AMMD), binary(), fun(() -> {ok, telega@bot:context(AMMC, AMMD)} | {error, AMMD}) ) -> {ok, telega@bot:context(AMMC, AMMD)} | {error, AMMD}. log_context(Ctx, Prefix, Handler) -> Id = telega@internal@utils:random_string(5), Prefix@1 = <<<<<<<<"["/utf8, Prefix/binary>>/binary, ":"/utf8>>/binary, Id/binary>>/binary, "] "/utf8>>, telega@internal@log:info( <<<>/binary, (telega@update:to_string(erlang:element(3, Ctx)))/binary>> ), Start_time = gleam@time@timestamp:system_time(), Result = begin _pipe = Handler(), gleam@result:map_error( _pipe, fun(E) -> telega@internal@log:error( <<<>/binary, (gleam@string:inspect(E))/binary>> ), E end ) end, End_time = gleam@time@timestamp:system_time(), Time = begin _pipe@1 = Start_time, _pipe@2 = gleam@time@timestamp:difference(_pipe@1, End_time), _pipe@3 = gleam@time@duration:to_seconds(_pipe@2), gleam_stdlib:float_to_string(_pipe@3) end, telega@internal@log:info( <<<<<>/binary, Time/binary>>/binary, " seconds"/utf8>> ), Result. -file("src/telega.gleam", 471). ?DOC(" Construct a session settings.\n"). -spec with_session_settings( telega_builder(AMMO, AMMP), fun((binary(), AMMO) -> {ok, AMMO} | {error, AMMP}), fun((binary()) -> {ok, gleam@option:option(AMMO)} | {error, AMMP}), fun(() -> AMMO) ) -> telega_builder(AMMO, AMMP). with_session_settings(Builder, Persist_session, Get_session, Default_session) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), {some, {session_settings, Persist_session, Get_session, Default_session}}, erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 508). ?DOC(" Set the drop pending updates flag as set webhook parameter.\n"). -spec set_drop_pending_updates(telega_builder(AMNG, AMNH), boolean()) -> telega_builder(AMNG, AMNH). set_drop_pending_updates(Builder, Drop_pending_updates) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), {some, Drop_pending_updates}, erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 516). ?DOC(" Set the max connections as set webhook parameter.\n"). -spec set_max_connections(telega_builder(AMNM, AMNN), integer()) -> telega_builder(AMNM, AMNN). set_max_connections(Builder, Max_connections) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), {some, Max_connections}, erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 524). ?DOC(" Set the ip address as set webhook parameter.\n"). -spec set_ip_address(telega_builder(AMNS, AMNT), binary()) -> telega_builder(AMNS, AMNT). set_ip_address(Builder, Ip_address) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), {some, Ip_address}, erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 532). ?DOC(" Set the allowed updates as set webhook parameter.\n"). -spec set_allowed_updates(telega_builder(AMNY, AMNZ), list(binary())) -> telega_builder(AMNY, AMNZ). set_allowed_updates(Builder, Allowed_updates) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), {some, Allowed_updates}, erlang:element(11, _record)}. -file("src/telega.gleam", 540). ?DOC(" Set the certificate as set webhook parameter.\n"). -spec set_certificate(telega_builder(AMOF, AMOG), telega@model:file()) -> telega_builder(AMOF, AMOG). set_certificate(Builder, Certificate) -> _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), {some, Certificate}}. -file("src/telega.gleam", 550). ?DOC( " Pass custom api client to the builder.\n" "\n" " Useful if you want set custom fetch function or pass your api client options\n" ). -spec set_api_client( telega_builder(AMOL, AMOM), telega@client:telegram_client() ) -> telega_builder(AMOL, AMOM). set_api_client(Builder, Api_client) -> _record = Builder, {telega_builder, begin _record@1 = erlang:element(2, Builder), {config, erlang:element(2, _record@1), erlang:element(3, _record@1), erlang:element(4, _record@1), Api_client} end, erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}. -file("src/telega.gleam", 600). -spec nil_catch_handler(any(), any()) -> {ok, nil} | {error, any()}. nil_catch_handler(_, _) -> {ok, nil}. -file("src/telega.gleam", 560). ?DOC( " Initialize a Telega instance.\n" " This function should be called **only** after all handlers are added to the builder.\n" " It will set the webhook and start handling messages.\n" ). -spec init(telega_builder(AMOR, AMOS)) -> {ok, telega(AMOR, AMOS)} | {error, telega@error:telega_error()}. init(Builder) -> gleam@result:'try'( telega@api:set_webhook( erlang:element(5, erlang:element(2, Builder)), {set_webhook_parameters, <<<<(erlang:element(2, erlang:element(2, Builder)))/binary, "/"/utf8>>/binary, (erlang:element(3, erlang:element(2, Builder)))/binary>>, erlang:element(11, Builder), erlang:element(8, Builder), erlang:element(9, Builder), erlang:element(10, Builder), erlang:element(7, Builder), {some, erlang:element(4, erlang:element(2, Builder))}} ), fun(Is_ok) -> gleam@bool:guard( not Is_ok, {error, set_webhook_error}, fun() -> gleam@result:'try'( telega@api:get_me( erlang:element(5, erlang:element(2, Builder)) ), fun(Bot_info) -> Session_settings = gleam@option:to_result( erlang:element(4, Builder), no_session_settings_error ), gleam@result:'try'( Session_settings, fun(Session_settings@1) -> gleam@result:'try'( telega@internal@registry:start(), fun(Registry_subject) -> Catch_handler = gleam@option:lazy_unwrap( erlang:element(6, Builder), fun() -> fun nil_catch_handler/2 end ), gleam@result:'try'( telega@bot:start( Registry_subject, erlang:element(2, Builder), Bot_info, erlang:element(3, Builder), Session_settings@1, Catch_handler ), fun(Bot_subject) -> {ok, {telega, erlang:element( 2, Builder ), Bot_info, Bot_subject}} end ) end ) end ) end ) end ) end ). -file("src/telega.gleam", 489). ?DOC( " Initialize a Telega instance with a `Nil` session.\n" " Useful when you don't need to persist the session.\n" ). -spec init_nil_session(telega_builder(nil, AMMZ)) -> {ok, telega(nil, AMMZ)} | {error, telega@error:telega_error()}. init_nil_session(Builder) -> Persist_session = fun(_, _) -> {ok, nil} end, Get_session = fun(_) -> {ok, {some, nil}} end, Default_session = fun() -> nil end, _pipe = begin _record = Builder, {telega_builder, erlang:element(2, _record), erlang:element(3, _record), {some, {session_settings, Persist_session, Get_session, Default_session}}, erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)} end, init(_pipe). -file("src/telega.gleam", 605). ?DOC(" Handle an update from the Telegram API.\n"). -spec handle_update(telega(any(), any()), telega@model:update()) -> {ok, boolean()} | {error, telega@error:telega_error()}. handle_update(Telega, Raw_update) -> _pipe = telega@update:raw_to_update(Raw_update), telega@bot:handle_update(erlang:element(4, Telega), _pipe).