Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on May 5, 2022. It is now read-only.
/ pybotx-widgets Public archive

Репозиторий с виджетами для pybotx-ботов

License

Notifications You must be signed in to change notification settings

ExpressApp/pybotx-widgets

Repository files navigation

pybotx-widgets

Примеры виджетов для pybotx. Могут быть использованы в проектах ботов.


Установка

Выполните следующую команду в консоли:

poetry add git+https://github.com/ExpressApp/pybotx-widgets.git


Виджет Carousel

Inline mode:

carousel_img carousel_img carousel_img

Newline mode:

carousel_img carousel_img carousel_img


Виджет Calendar

calendar_img

include_past=False mode:

calendar_img


Виджет Checklist

calendar_img


Виджет Pagination

calendar_img


Виджет Checktable

checktable_img


Пример использования виджета Carousel:

from pybotx_widgets.carousel import CarouselWidget
from botx import MessageMarkup
...
@collector.handler(command="/some_command", name="some_command_name")
async def some_command(message: Message, bot: Bot) -> None:
 markup = MessageMarkup()
 await CarouselWidget(
 widget_content, # All content to be displayed
 label, # Text of message
 start_from=0, # Start display content from
 displayed_content_count=3, # Count of content to be displayed
 selected_value_label="You selected: {selected_val}", # Display format of the selected value, default = "{label} {selected_val}"
 control_labels=("", ""), # Override default control labels
 inline=False, # Inline mode
 loop=False, # Loop content or not
 show_numbers=False, # Show content order numbers for prev/next control bubbles' labels. Default = False
 additional_markup=markup, # Additional markup for attaching to widget
 message=message,
 bot=bot,
 command="/some_command", # Widget will trigger this command when a value is selected.
 ).display()
 
 try:
 selected_value = await CarouselWidget.get_value(message, bot)
 except KeyError:
 ... # do something

Метод .display() отправляет пользователю сообщение с виджетом.
При отсутствии выбранного значения, метод .get_value() вызовет исключение.

Если виджет должен обновить уже отправленное сообщение, то добавьте в message.command.data ключ message_id с UUID сообщения, которое нужно обновить

Когда loop=True, стрелки отображаются всегда


Пример использования виджета Calendar:

from pybotx_widgets.calendar import CalendarWidget
...
@collector.handler(command="/some_command", name="some_command_name")
async def some_command(message: Message, bot: Bot) -> None:
 await CalendarWidget(
 start_date: date = None, # Calendar start date, previews dates hides, default date.today()
 end_date: date = date.max, # Calendar end date, next dates hides, default date.max
 include_past=False, # Include past dates in calendar, default is False
 additional_markup=None, # Additional markup for attaching to widget, default None
 command_name="/some_command", # Widget will trigger this command when a value is selected.
 message=message, 
 bot=bot,
 ).display()
 
 try:
 selected_value = await CalendarWidget.get_value()
 except KeyError:
 ... # do something

Метод .display() отправляет пользователю сообщение с виджетом.
При отсутствии выбранного значения, метод .get_value() вызовет исключение.

Когда пользователь выберет какое-то значение из виджета, метод .get_value() вернет его

Если виджет должен обновить уже отправленное сообщение, то добавьте в message.command.data ключ message_id с UUID сообщения, которое нужно обновить


Пример использования виджета Checklist:

from pybotx_widgets.checklist import CheckListWidget
...
@collector.handler(command="/some_command")
async def some_command(message: Message, bot: Bot) -> None:
 await CheckListWidget(
 content, # All content to be displayed
 label, # Text of message
 command="/some_command", # Widget will trigger this command when a value is selected.
 message=message,
 bot=bot,
 ).display()
 
 try:
 current_selected_item = CheckListWidget.get_value(message)
 except KeyError:
 ... # do something
 
 all_selected_items = CheckListWidget.get_checked_items(message)
 
 if all_selected_items:
 ... # do something

Метод .display() отправляет пользователю сообщение с виджетом.
При отсутствии выбранного значения, метод .get_value() вызовет исключение.

Список всех выбранных элементов можно получить через метод .get_checked_items(message), по умолчанию пустой список.

Если виджет должен обновить уже отправленное сообщение, то добавьте в message.command.data ключ message_id с UUID сообщения, которое нужно обновить


Пример использования виджета Pagination:

from pybotx_widgets.pagination import PaginationWidget
...
@collector.handler(command="/some_command")
async def some_command(message: Message, bot: Bot) -> None:
 await PaginationWidget(
 content, # All content to be displayed: List[SendingMessage]
 paginate_by, # Number of messages on one page 
 command="/some_command", # Widget will trigger this command when a value is selected.
 message=message,
 bot=bot,
 ).display()

Метод .display() отправляет пользователю сообщение с виджетом.\

Если виджет должен обновить уже отправленное сообщение, то добавьте в message.command.data ключ message_id с UUID сообщения, которое нужно обновить


Пример использования виджета Checktable:

from pybotx_widgets.checktable import ChecktableWidget
...
@collector.handler(command="/some_command")
async def some_command(message: Message, bot: Bot) -> None:
 await ChecktableWidget(
 content, # All content to be displayed: List[CheckboxContent]
 label, # Text of message
 "uncheck_command", # Command for handler which uncheck value 
 "some_command", # Command for bubbles command attribute
 additional_markup, # Additional markup for attaching to widget
 message=message,
 bot=bot,
 ).display()

Для корректной работы виджета нужно создать хэндлер с командой uncheck_command и прописать в нем поведение при сбрасывании значения.

Пример хэндлера:

from pybotx_widgets.checktable import ChecktableWidget
from pybotx_widgets.undefined import undefined
...
UNCHECK_COMMAND = "/_checkbox:uncheck"
@collector.hidden(command=UNCHECK_COMMAND)
async def checkbox_uncheck(message: Message, bot: Bot) -> None:
 field_name = message.data.get("field_name")
 my_object = await get_my_object()
 
 setattr(my_object, field_name, undefined)
 await set_my_object(my_object)
 
 checkboxes = await build_checkboxes(my_object)
 await ChecktableWidget(message, bot, my_object, "some_label", UNCHECK_COMMAND).display()

ЭМОДЗИ

В pybotx_widgets.resources.strings есть следующие эмодзи:

LEFT_ARROW = ⬅️
RIGHT_ARROW = ➡️
UP_ARROW = ⬆️
DOWN_ARROW = ⬇️
CHECKBOX_CHECKED = ☑
CHECKBOX_UNCHECKED = ☐
CHECK_MARK = ✔️
ENVELOPE = ✉️
PENCIL = ✏️
CROSS_MARK = ❌

About

Репозиторий с виджетами для pybotx-ботов

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8

AltStyle によって変換されたページ (->オリジナル) /