Skip to content

Builders

The SDK ships with two high-level builders for interactive payloads: ButtonBuilder and InteractiveBuilder.

ButtonBuilder

Source: mezon/structures/button_builder.py

Create buttons

from mezon import ButtonBuilder, ButtonMessageStyle

buttons = ButtonBuilder()
buttons.add_button("yes", "Yes", ButtonMessageStyle.SUCCESS)
buttons.add_button("no", "No", ButtonMessageStyle.DANGER)

add_button(...) -> ButtonBuilder

Parameter Type Description
component_id str Unique button ID
label str Button label
style ButtonMessageStyle Visual style
url str | None URL for link buttons
disabled bool Disabled state

Other methods

  • build() -> list[dict[str, Any]]
  • clear() -> ButtonBuilder

InteractiveBuilder

Source: mezon/structures/interactive_message.py

Create an interactive payload

from mezon import InteractiveBuilder

form = InteractiveBuilder("Registration Form")
form.set_description("Please complete the form")
form.set_color("#5865F2")

Layout and style methods

  • set_title(title)
  • set_description(description)
  • set_color(color)
  • set_url(url)
  • set_author(name, icon_url=None, url=None)
  • set_thumbnail(url)
  • set_image(url, width=None, height=None)
  • set_footer(text, icon_url=None)

Field methods

  • add_field(name, value, inline=False)
  • add_input_field(field_id, name, placeholder=None, options=None, description=None)
  • add_select_field(field_id, name, options, value_selected=None, description=None)
  • add_radio_field(field_id, name, options, description=None, max_options=None)
  • add_datepicker_field(field_id, name, description=None)
  • add_animation(url)
  • build() -> dict[str, Any]

Example payload

from mezon import ButtonBuilder, ButtonMessageStyle, InteractiveBuilder
from mezon.models import ChannelMessageContent, SelectFieldOption

form = InteractiveBuilder("Survey")
form.add_select_field(
    "country",
    "Country",
    options=[SelectFieldOption(label="Vietnam", value="vn")],
)

buttons = ButtonBuilder()
buttons.add_button("submit", "Submit", ButtonMessageStyle.SUCCESS)

await channel.send(
    content=ChannelMessageContent(
        embed=[form.build()],
        components=[{"components": buttons.build()}],
    )
)