ExGram.Dsl.Keyboard (ex_gram v0.65.0)

Copy Markdown View Source

Keyboard DSL to create inline and reply keyboards easily.

This DSL provides a clean syntax for building ExGram.Model.InlineKeyboardMarkup and ExGram.Model.ReplyKeyboardMarkup structures without manually constructing nested button arrays.

Example

keyb = keyboard :inline do
  row do
    button "A", callback_data: "a", style: "success"
    button "B", switch_inline_query_current_chat: "b"
  end

  row do
    button "C", callback_data: "C", style: "danger"
    button "D", copy_text: "D"
  end
end

See the Sending Messages guide for more examples.

Summary

Functions

build_keyboard(atom, rows, opts)

@spec build_keyboard(
  :inline,
  [[ExGram.Model.InlineKeyboardButton.t()] | nil],
  keyword()
) ::
  ExGram.Model.InlineKeyboardMarkup.t()
@spec build_keyboard(:reply, [[ExGram.Model.KeyboardButton.t()] | nil], keyword()) ::
  ExGram.Model.ReplyKeyboardMarkup.t()

button(text, opts \\ [])

inline_button(text, opts \\ [])

@spec inline_button(
  String.t(),
  keyword()
) :: ExGram.Model.InlineKeyboardButton.t()

keyboard(type, opts \\ [], do_block)

(macro)
@spec keyboard(:inline, keyword(), [{:do, any()}]) :: Macro.t()
@spec keyboard(:reply, keyword(), [{:do, any()}]) :: Macro.t()

remove_keyboard(atom, selective? \\ nil)

@spec remove_keyboard(:reply, boolean() | nil) :: ExGram.Model.ReplyKeyboardRemove.t()

reply_button(text, opts \\ [])

@spec reply_button(
  String.t(),
  keyword()
) :: ExGram.Model.KeyboardButton.t()

row(list)

(macro)
@spec row([{:do, any()}]) :: Macro.t()