Current section

31 Versions

Jump to

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…