Current section
31 Versions
Jump to
Current section
31 Versions
Compare versions
19
files changed
+481
additions
-210
deletions
| @@ -1,5 +1,5 @@ | |
| 1 1 | name = "telega" |
| 2 | - version = "0.4.0" |
| 2 | + version = "0.5.0" |
| 3 3 | description = "Gleam Telegram Bot Library" |
| 4 4 | licences = ["Apache-2.0"] |
| 5 5 | repository = { type = "github", user = "bondiano", repo = "telega-gleam" } |
| @@ -8,7 +8,7 @@ links = [ | |
| 8 8 | { title = "Examples", href = "https://github.com/bondiano/telega-gleam/tree/master/examples" }, |
| 9 9 | ] |
| 10 10 | |
| 11 | - gleam = ">= 1.7.0" |
| 11 | + gleam = ">= 1.9.1" |
| 12 12 | target = "erlang" |
| 13 13 | |
| 14 14 | [dependencies] |
| @@ -1,6 +1,6 @@ | |
| 1 1 | {<<"name">>, <<"telega">>}. |
| 2 2 | {<<"app">>, <<"telega">>}. |
| 3 | - {<<"version">>, <<"0.4.0">>}. |
| 3 | + {<<"version">>, <<"0.5.0">>}. |
| 4 4 | {<<"description">>, <<"Gleam Telegram Bot Library"/utf8>>}. |
| 5 5 | {<<"licenses">>, [<<"Apache-2.0">>]}. |
| 6 6 | {<<"build_tools">>, [<<"gleam">>]}. |
| @@ -10,50 +10,50 @@ | |
| 10 10 | {<<"Repository">>, <<"https://github.com/bondiano/telega-gleam">>} |
| 11 11 | ]}. |
| 12 12 | {<<"requirements">>, [ |
| 13 | - {<<"logging">>, [ |
| 14 | - {<<"app">>, <<"logging">>}, |
| 15 | - {<<"optional">>, false}, |
| 16 | - {<<"requirement">>, <<">= 1.3.0 and < 2.0.0">>} |
| 17 | - ]}, |
| 18 | - {<<"gleam_otp">>, [ |
| 19 | - {<<"app">>, <<"gleam_otp">>}, |
| 20 | - {<<"optional">>, false}, |
| 21 | - {<<"requirement">>, <<">= 0.16.0 and < 1.0.0">>} |
| 22 | - ]}, |
| 23 | - {<<"gleam_stdlib">>, [ |
| 24 | - {<<"app">>, <<"gleam_stdlib">>}, |
| 25 | - {<<"optional">>, false}, |
| 26 | - {<<"requirement">>, <<">= 0.52.0 and < 1.0.0">>} |
| 27 | - ]}, |
| 28 13 | {<<"gleam_httpc">>, [ |
| 29 14 | {<<"app">>, <<"gleam_httpc">>}, |
| 30 15 | {<<"optional">>, false}, |
| 31 16 | {<<"requirement">>, <<">= 4.0.0 and < 5.0.0">>} |
| 32 17 | ]}, |
| 33 | - {<<"gleam_erlang">>, [ |
| 34 | - {<<"app">>, <<"gleam_erlang">>}, |
| 35 | - {<<"optional">>, false}, |
| 36 | - {<<"requirement">>, <<">= 0.33.0 and < 1.0.0">>} |
| 37 | - ]}, |
| 38 | - {<<"gleam_json">>, [ |
| 39 | - {<<"app">>, <<"gleam_json">>}, |
| 40 | - {<<"optional">>, false}, |
| 41 | - {<<"requirement">>, <<">= 2.3.0 and < 3.0.0">>} |
| 42 | - ]}, |
| 43 18 | {<<"wisp">>, [ |
| 44 19 | {<<"app">>, <<"wisp">>}, |
| 45 20 | {<<"optional">>, false}, |
| 46 21 | {<<"requirement">>, <<">= 1.5.1 and < 2.0.0">>} |
| 47 22 | ]}, |
| 48 | - {<<"gleam_http">>, [ |
| 49 | - {<<"app">>, <<"gleam_http">>}, |
| 23 | + {<<"gleam_otp">>, [ |
| 24 | + {<<"app">>, <<"gleam_otp">>}, |
| 50 25 | {<<"optional">>, false}, |
| 51 | - {<<"requirement">>, <<">= 3.7.2 and < 4.0.0">>} |
| 26 | + {<<"requirement">>, <<">= 0.16.0 and < 1.0.0">>} |
| 52 27 | ]}, |
| 53 28 | {<<"gleam_regexp">>, [ |
| 54 29 | {<<"app">>, <<"gleam_regexp">>}, |
| 55 30 | {<<"optional">>, false}, |
| 56 31 | {<<"requirement">>, <<">= 1.0.0 and < 2.0.0">>} |
| 32 | + ]}, |
| 33 | + {<<"gleam_http">>, [ |
| 34 | + {<<"app">>, <<"gleam_http">>}, |
| 35 | + {<<"optional">>, false}, |
| 36 | + {<<"requirement">>, <<">= 3.7.2 and < 4.0.0">>} |
| 37 | + ]}, |
| 38 | + {<<"gleam_erlang">>, [ |
| 39 | + {<<"app">>, <<"gleam_erlang">>}, |
| 40 | + {<<"optional">>, false}, |
| 41 | + {<<"requirement">>, <<">= 0.33.0 and < 1.0.0">>} |
| 42 | + ]}, |
| 43 | + {<<"gleam_stdlib">>, [ |
| 44 | + {<<"app">>, <<"gleam_stdlib">>}, |
| 45 | + {<<"optional">>, false}, |
| 46 | + {<<"requirement">>, <<">= 0.52.0 and < 1.0.0">>} |
| 47 | + ]}, |
| 48 | + {<<"logging">>, [ |
| 49 | + {<<"app">>, <<"logging">>}, |
| 50 | + {<<"optional">>, false}, |
| 51 | + {<<"requirement">>, <<">= 1.3.0 and < 2.0.0">>} |
| 52 | + ]}, |
| 53 | + {<<"gleam_json">>, [ |
| 54 | + {<<"app">>, <<"gleam_json">>}, |
| 55 | + {<<"optional">>, false}, |
| 56 | + {<<"requirement">>, <<">= 2.3.0 and < 3.0.0">>} |
| 57 57 | ]} |
| 58 58 | ]}. |
| 59 59 | {<<"files">>, [ |
| @@ -1,6 +1,6 @@ | |
| 1 1 | -record(keyboard_callback_data, { |
| 2 2 | id :: binary(), |
| 3 | - serilize :: fun((any()) -> binary()), |
| 3 | + serialize :: fun((any()) -> binary()), |
| 4 4 | deserialize :: fun((binary()) -> any()), |
| 5 5 | delimiter :: binary() |
| 6 6 | }). |
| @@ -1,5 +1,5 @@ | |
| 1 1 | {application, telega, [ |
| 2 | - {vsn, "0.4.0"}, |
| 2 | + {vsn, "0.5.0"}, |
| 3 3 | {applications, [gleam_erlang, |
| 4 4 | gleam_http, |
| 5 5 | gleam_httpc, |
| @@ -11,6 +11,7 @@ | |
| 11 11 | wisp]}, |
| 12 12 | {description, "Gleam Telegram Bot Library"}, |
| 13 13 | {modules, [telega, |
| 14 | + telega@@main, |
| 14 15 | telega@adapters@wisp, |
| 15 16 | telega@api, |
| 16 17 | telega@bot, |
| @@ -4,6 +4,14 @@ | |
| 4 4 | -export([is_webhook_path/2, is_secret_token_valid/2, new/4, handle_all/2, wait_any/2, handle_command/3, wait_command/3, handle_commands/3, wait_commands/3, handle_text/2, wait_text/2, handle_hears/3, wait_hears/3, handle_callback_query/3, wait_callback_query/3, log_context/3, with_session_settings/3, init/1, init_nil_session/1, handle_update/2]). |
| 5 5 | -export_type([telega/1, telega_builder/1]). |
| 6 6 | |
| 7 | + -if(?OTP_RELEASE >= 27). |
| 8 | + -define(MODULEDOC(Str), -moduledoc(Str)). |
| 9 | + -define(DOC(Str), -doc(Str)). |
| 10 | + -else. |
| 11 | + -define(MODULEDOC(Str), -compile([])). |
| 12 | + -define(DOC(Str), -compile([])). |
| 13 | + -endif. |
| 14 | + |
| 7 15 | -opaque telega(WKM) :: {telega, |
| 8 16 | telega@internal@config:config(), |
| 9 17 | telega@model:user(), |
| @@ -17,17 +25,28 @@ | |
| 17 25 | gleam@option:option(telega@bot:session_settings(WKN)), |
| 18 26 | gleam@option:option(gleam@erlang@process:subject(telega@bot:registry_message()))}. |
| 19 27 | |
| 20 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 42). |
| 28 | + -file("src/telega.gleam", 42). |
| 29 | + ?DOC( |
| 30 | + " Check if a path is the webhook path for the bot.\n" |
| 31 | + "\n" |
| 32 | + " Useful if you plan to implement own adapter.\n" |
| 33 | + ). |
| 21 34 | -spec is_webhook_path(telega(any()), binary()) -> boolean(). |
| 22 35 | is_webhook_path(Telega, Path) -> |
| 23 36 | erlang:element(3, erlang:element(2, Telega)) =:= Path. |
| 24 37 | |
| 25 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 49). |
| 38 | + -file("src/telega.gleam", 49). |
| 39 | + ?DOC( |
| 40 | + " Check if a secret token is valid.\n" |
| 41 | + "\n" |
| 42 | + " Useful if you plan to implement own adapter.\n" |
| 43 | + ). |
| 26 44 | -spec is_secret_token_valid(telega(any()), binary()) -> boolean(). |
| 27 45 | is_secret_token_valid(Telega, Token) -> |
| 28 46 | erlang:element(4, erlang:element(2, Telega)) =:= Token. |
| 29 47 | |
| 30 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 54). |
| 48 | + -file("src/telega.gleam", 54). |
| 49 | + ?DOC(" Create a new Telega instance.\n"). |
| 31 50 | -spec new(binary(), binary(), binary(), gleam@option:option(binary())) -> telega_builder(any()). |
| 32 51 | new(Token, Server_url, Webhook_path, Secret_token) -> |
| 33 52 | {telega_builder, |
| @@ -41,7 +60,8 @@ new(Token, Server_url, Webhook_path, Secret_token) -> | |
| 41 60 | none, |
| 42 61 | none}. |
| 43 62 | |
| 44 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 69). |
| 63 | + -file("src/telega.gleam", 69). |
| 64 | + ?DOC(" Handles all messages.\n"). |
| 45 65 | -spec handle_all( |
| 46 66 | telega_builder(WKV), |
| 47 67 | fun((telega@bot:context(WKV)) -> {ok, WKV} | {error, binary()}) |
| @@ -54,7 +74,8 @@ handle_all(Builder, Handler) -> | |
| 54 74 | erlang:element(4, _record), |
| 55 75 | erlang:element(5, _record)}. |
| 56 76 | |
| 57 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 77). |
| 77 | + -file("src/telega.gleam", 77). |
| 78 | + ?DOC(" Stops bot message handling and waits for any message.\n"). |
| 58 79 | -spec wait_any( |
| 59 80 | telega@bot:context(WLB), |
| 60 81 | fun((telega@bot:context(WLB)) -> {ok, WLB} | {error, binary()}) |
| @@ -62,7 +83,8 @@ handle_all(Builder, Handler) -> | |
| 62 83 | wait_any(Ctx, Continue) -> |
| 63 84 | telega@bot:wait_handler(Ctx, {handle_all, Continue}). |
| 64 85 | |
| 65 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 85). |
| 86 | + -file("src/telega.gleam", 85). |
| 87 | + ?DOC(" Handles a specific command.\n"). |
| 66 88 | -spec handle_command( |
| 67 89 | telega_builder(WLI), |
| 68 90 | binary(), |
| @@ -77,7 +99,7 @@ handle_command(Builder, Command, Handler) -> | |
| 77 99 | erlang:element(4, _record), |
| 78 100 | erlang:element(5, _record)}. |
| 79 101 | |
| 80 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 96). |
| 102 | + -file("src/telega.gleam", 96). |
| 81 103 | -spec wait_command( |
| 82 104 | telega@bot:context(WLO), |
| 83 105 | binary(), |
| @@ -87,7 +109,8 @@ handle_command(Builder, Command, Handler) -> | |
| 87 109 | wait_command(Ctx, Command, Continue) -> |
| 88 110 | telega@bot:wait_handler(Ctx, {handle_command, Command, Continue}). |
| 89 111 | |
| 90 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 105). |
| 112 | + -file("src/telega.gleam", 105). |
| 113 | + ?DOC(" Handles multiple commands.\n"). |
| 91 114 | -spec handle_commands( |
| 92 115 | telega_builder(WLV), |
| 93 116 | list(binary()), |
| @@ -102,7 +125,7 @@ handle_commands(Builder, Commands, Handler) -> | |
| 102 125 | erlang:element(4, _record), |
| 103 126 | erlang:element(5, _record)}. |
| 104 127 | |
| 105 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 116). |
| 128 | + -file("src/telega.gleam", 116). |
| 106 129 | -spec wait_commands( |
| 107 130 | telega@bot:context(WMC), |
| 108 131 | list(binary()), |
| @@ -112,7 +135,8 @@ handle_commands(Builder, Commands, Handler) -> | |
| 112 135 | wait_commands(Ctx, Commands, Continue) -> |
| 113 136 | telega@bot:wait_handler(Ctx, {handle_commands, Commands, Continue}). |
| 114 137 | |
| 115 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 125). |
| 138 | + -file("src/telega.gleam", 125). |
| 139 | + ?DOC(" Handles text messages.\n"). |
| 116 140 | -spec handle_text( |
| 117 141 | telega_builder(WMK), |
| 118 142 | fun((telega@bot:context(WMK), binary()) -> {ok, WMK} | {error, binary()}) |
| @@ -125,7 +149,7 @@ handle_text(Builder, Handler) -> | |
| 125 149 | erlang:element(4, _record), |
| 126 150 | erlang:element(5, _record)}. |
| 127 151 | |
| 128 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 132). |
| 152 | + -file("src/telega.gleam", 132). |
| 129 153 | -spec wait_text( |
| 130 154 | telega@bot:context(WMQ), |
| 131 155 | fun((telega@bot:context(WMQ), binary()) -> {ok, WMQ} | {error, binary()}) |
| @@ -133,7 +157,8 @@ handle_text(Builder, Handler) -> | |
| 133 157 | wait_text(Ctx, Continue) -> |
| 134 158 | telega@bot:wait_handler(Ctx, {handle_text, Continue}). |
| 135 159 | |
| 136 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 140). |
| 160 | + -file("src/telega.gleam", 140). |
| 161 | + ?DOC(" Handles messages that match the given `Hears`.\n"). |
| 137 162 | -spec handle_hears( |
| 138 163 | telega_builder(WMX), |
| 139 164 | telega@bot:hears(), |
| @@ -147,7 +172,7 @@ handle_hears(Builder, Hears, Handler) -> | |
| 147 172 | erlang:element(4, _record), |
| 148 173 | erlang:element(5, _record)}. |
| 149 174 | |
| 150 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 151). |
| 175 | + -file("src/telega.gleam", 151). |
| 151 176 | -spec wait_hears( |
| 152 177 | telega@bot:context(WND), |
| 153 178 | telega@bot:hears(), |
| @@ -156,7 +181,8 @@ handle_hears(Builder, Hears, Handler) -> | |
| 156 181 | wait_hears(Ctx, Hears, Continue) -> |
| 157 182 | telega@bot:wait_handler(Ctx, {handle_hears, Hears, Continue}). |
| 158 183 | |
| 159 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 160). |
| 184 | + -file("src/telega.gleam", 160). |
| 185 | + ?DOC(" Handles messages from inline keyboard callback.\n"). |
| 160 186 | -spec handle_callback_query( |
| 161 187 | telega_builder(WNJ), |
| 162 188 | telega@bot:callback_query_filter(), |
| @@ -171,7 +197,7 @@ handle_callback_query(Builder, Filter, Handler) -> | |
| 171 197 | erlang:element(4, _record), |
| 172 198 | erlang:element(5, _record)}. |
| 173 199 | |
| 174 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 172). |
| 200 | + -file("src/telega.gleam", 172). |
| 175 201 | -spec wait_callback_query( |
| 176 202 | telega@bot:context(WNP), |
| 177 203 | telega@bot:callback_query_filter(), |
| @@ -181,7 +207,8 @@ handle_callback_query(Builder, Filter, Handler) -> | |
| 181 207 | wait_callback_query(Ctx, Filter, Continue) -> |
| 182 208 | telega@bot:wait_handler(Ctx, {handle_callback_query, Filter, Continue}). |
| 183 209 | |
| 184 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 182). |
| 210 | + -file("src/telega.gleam", 182). |
| 211 | + ?DOC(" Log the message and error message if the handler fails.\n"). |
| 185 212 | -spec log_context( |
| 186 213 | telega@bot:context(WNW), |
| 187 214 | binary(), |
| @@ -205,7 +232,8 @@ log_context(Ctx, Prefix, Handler) -> | |
| 205 232 | end |
| 206 233 | ). |
| 207 234 | |
| 208 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 199). |
| 235 | + -file("src/telega.gleam", 199). |
| 236 | + ?DOC(" Construct a session settings.\n"). |
| 209 237 | -spec with_session_settings( |
| 210 238 | telega_builder(WOC), |
| 211 239 | fun((binary(), WOC) -> {ok, WOC} | {error, binary()}), |
| @@ -219,7 +247,7 @@ with_session_settings(Builder, Persist_session, Get_session) -> | |
| 219 247 | {some, {session_settings, Persist_session, Get_session}}, |
| 220 248 | erlang:element(5, _record)}. |
| 221 249 | |
| 222 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 214). |
| 250 | + -file("src/telega.gleam", 214). |
| 223 251 | -spec nil_session_settings(telega_builder(nil)) -> telega_builder(nil). |
| 224 252 | nil_session_settings(Builder) -> |
| 225 253 | _record = Builder, |
| @@ -232,7 +260,12 @@ nil_session_settings(Builder) -> | |
| 232 260 | fun(_) -> {ok, nil} end}}, |
| 233 261 | erlang:element(5, _record)}. |
| 234 262 | |
| 235 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 238). |
| 263 | + -file("src/telega.gleam", 238). |
| 264 | + ?DOC( |
| 265 | + " Initialize a Telega instance.\n" |
| 266 | + " This function should be called after all handlers are added.\n" |
| 267 | + " It will set the webhook and start the `Registry`.\n" |
| 268 | + ). |
| 236 269 | -spec init(telega_builder(WOP)) -> {ok, telega(WOP)} | {error, binary()}. |
| 237 270 | init(Builder) -> |
| 238 271 | gleam@result:'try'( |
| @@ -330,7 +363,11 @@ init(Builder) -> | |
| 330 363 | end |
| 331 364 | ). |
| 332 365 | |
| 333 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 227). |
| 366 | + -file("src/telega.gleam", 227). |
| 367 | + ?DOC( |
| 368 | + " Initialize a Telega instance with a `Nil` session.\n" |
| 369 | + " Useful when you don't need to persist the session.\n" |
| 370 | + ). |
| 334 371 | -spec init_nil_session(telega_builder(nil)) -> {ok, telega(nil)} | |
| 335 372 | {error, binary()}. |
| 336 373 | init_nil_session(Builder) -> |
| @@ -338,7 +375,8 @@ init_nil_session(Builder) -> | |
| 338 375 | _pipe@1 = nil_session_settings(_pipe), |
| 339 376 | init(_pipe@1). |
| 340 377 | |
| 341 | - -file("/Users/bondiano/workspace/telega-gleam/src/telega.gleam", 287). |
| 378 | + -file("src/telega.gleam", 287). |
| 379 | + ?DOC(" Handle an update from the Telegram API.\n"). |
| 342 380 | -spec handle_update(telega(any()), telega@update:update()) -> {ok, nil} | |
| 343 381 | {error, binary()}. |
| 344 382 | handle_update(Telega, Update) -> |
Loading more files…