Packages
ex_gram
0.27.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.1
0.55.0
0.54.0
0.53.0
0.52.2
0.52.1
0.52.0
0.51.1
0.51.0
0.50.2
0.50.1
0.50.0
0.41.0
0.40.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.5.0-rc6
0.5.0-rc5
0.5.0-rc4
0.5.0-rc3
0.5.0-rc2
Telegram Bot API low level and framework
Current section
Files
Jump to
Current section
Files
lib/ex_gram/dsl/keyboard.ex
defmodule ExGram.Dsl.Keyboard do
@moduledoc """
Keyboard DSL to create inline keyboards easily
Example:
``` elixir
keyb = keyboard :inline do
row do
button "A", callback_data: "a"
button "B", callback_data: "b"
end
row do
button "C", callback_data: "c"
button "D", callback_data: "d"
end
end
```
"""
defmacro keyboard(which_keyboard, do: block) do
build_keyboard_f =
case which_keyboard do
:inline -> &ExGram.Dsl.create_inline/1
end
quote do
var!(keyboard_variable_1) = []
unquote(block)
unquote(build_keyboard_f).(var!(keyboard_variable_1))
end
end
defmacro row(do: block) do
quote do
var!(keyboard_variable_row) = []
unquote(block)
var!(keyboard_variable_1) = var!(keyboard_variable_1) ++ [var!(keyboard_variable_row)]
end
end
defmacro button(text, opts \\ []) do
quote do
var!(keyboard_variable_row) =
var!(keyboard_variable_row) ++ [Keyword.merge([text: unquote(text)], unquote(opts))]
end
end
end