mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Add icon and style args to keyboard builders (#1769)
This commit is contained in:
parent
c73db32e86
commit
fa844fce59
3 changed files with 100 additions and 0 deletions
1
CHANGES/1768.bugfix.rst
Normal file
1
CHANGES/1768.bugfix.rst
Normal file
|
|
@ -0,0 +1 @@
|
|||
Added ``icon_custom_emoji_id`` and ``style`` parameters to ``InlineKeyboardBuilder.button`` and ``ReplyKeyboardBuilder.button`` signatures.
|
||||
|
|
@ -303,6 +303,8 @@ class InlineKeyboardBuilder(KeyboardBuilder[InlineKeyboardButton]):
|
|||
self,
|
||||
*,
|
||||
text: str,
|
||||
icon_custom_emoji_id: str | None = None,
|
||||
style: str | None = None,
|
||||
url: str | None = None,
|
||||
callback_data: str | CallbackData | None = None,
|
||||
web_app: WebAppInfo | None = None,
|
||||
|
|
@ -319,6 +321,8 @@ class InlineKeyboardBuilder(KeyboardBuilder[InlineKeyboardButton]):
|
|||
InlineKeyboardBuilder,
|
||||
self._button(
|
||||
text=text,
|
||||
icon_custom_emoji_id=icon_custom_emoji_id,
|
||||
style=style,
|
||||
url=url,
|
||||
callback_data=callback_data,
|
||||
web_app=web_app,
|
||||
|
|
@ -375,6 +379,8 @@ class ReplyKeyboardBuilder(KeyboardBuilder[KeyboardButton]):
|
|||
self,
|
||||
*,
|
||||
text: str,
|
||||
icon_custom_emoji_id: str | None = None,
|
||||
style: str | None = None,
|
||||
request_users: KeyboardButtonRequestUsers | None = None,
|
||||
request_chat: KeyboardButtonRequestChat | None = None,
|
||||
request_contact: bool | None = None,
|
||||
|
|
@ -387,6 +393,8 @@ class ReplyKeyboardBuilder(KeyboardBuilder[KeyboardButton]):
|
|||
ReplyKeyboardBuilder,
|
||||
self._button(
|
||||
text=text,
|
||||
icon_custom_emoji_id=icon_custom_emoji_id,
|
||||
style=style,
|
||||
request_users=request_users,
|
||||
request_chat=request_chat,
|
||||
request_contact=request_contact,
|
||||
|
|
|
|||
|
|
@ -214,11 +214,63 @@ class TestKeyboardBuilder:
|
|||
"builder_type,kwargs,expected",
|
||||
[
|
||||
[ReplyKeyboardBuilder, {"text": "test"}, KeyboardButton(text="test")],
|
||||
[
|
||||
ReplyKeyboardBuilder,
|
||||
{"text": "test", "icon_custom_emoji_id": "emoji-id"},
|
||||
KeyboardButton(text="test", icon_custom_emoji_id="emoji-id"),
|
||||
],
|
||||
[
|
||||
ReplyKeyboardBuilder,
|
||||
{"text": "test", "style": "success"},
|
||||
KeyboardButton(text="test", style="success"),
|
||||
],
|
||||
[
|
||||
ReplyKeyboardBuilder,
|
||||
{"text": "test", "icon_custom_emoji_id": "emoji-id", "style": "success"},
|
||||
KeyboardButton(
|
||||
text="test",
|
||||
icon_custom_emoji_id="emoji-id",
|
||||
style="success",
|
||||
),
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder,
|
||||
{"text": "test", "callback_data": "callback"},
|
||||
InlineKeyboardButton(text="test", callback_data="callback"),
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder,
|
||||
{
|
||||
"text": "test",
|
||||
"icon_custom_emoji_id": "emoji-id",
|
||||
"callback_data": "callback",
|
||||
},
|
||||
InlineKeyboardButton(
|
||||
text="test",
|
||||
icon_custom_emoji_id="emoji-id",
|
||||
callback_data="callback",
|
||||
),
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder,
|
||||
{"text": "test", "style": "primary", "callback_data": "callback"},
|
||||
InlineKeyboardButton(text="test", style="primary", callback_data="callback"),
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder,
|
||||
{
|
||||
"text": "test",
|
||||
"icon_custom_emoji_id": "emoji-id",
|
||||
"style": "primary",
|
||||
"callback_data": "callback",
|
||||
},
|
||||
InlineKeyboardButton(
|
||||
text="test",
|
||||
icon_custom_emoji_id="emoji-id",
|
||||
style="primary",
|
||||
callback_data="callback",
|
||||
),
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder,
|
||||
{"text": "test", "callback_data": MyCallback(value="test")},
|
||||
|
|
@ -242,6 +294,45 @@ class TestKeyboardBuilder:
|
|||
def test_as_markup(self, builder, expected):
|
||||
assert isinstance(builder.as_markup(), expected)
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"builder,button_kwargs,icon_custom_emoji_id,style",
|
||||
[
|
||||
[
|
||||
ReplyKeyboardBuilder(),
|
||||
{"text": "test", "icon_custom_emoji_id": "emoji-id", "style": "success"},
|
||||
"emoji-id",
|
||||
"success",
|
||||
],
|
||||
[
|
||||
InlineKeyboardBuilder(),
|
||||
{
|
||||
"text": "test",
|
||||
"icon_custom_emoji_id": "emoji-id",
|
||||
"style": "primary",
|
||||
"callback_data": "callback",
|
||||
},
|
||||
"emoji-id",
|
||||
"primary",
|
||||
],
|
||||
],
|
||||
)
|
||||
def test_as_markup_preserves_icon_and_style(
|
||||
self,
|
||||
builder,
|
||||
button_kwargs,
|
||||
icon_custom_emoji_id,
|
||||
style,
|
||||
):
|
||||
builder.button(**button_kwargs)
|
||||
markup = builder.as_markup()
|
||||
if isinstance(markup, ReplyKeyboardMarkup):
|
||||
button = markup.keyboard[0][0]
|
||||
else:
|
||||
button = markup.inline_keyboard[0][0]
|
||||
|
||||
assert button.icon_custom_emoji_id == icon_custom_emoji_id
|
||||
assert button.style == style
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"markup,builder_type",
|
||||
[
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue