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,
|
self,
|
||||||
*,
|
*,
|
||||||
text: str,
|
text: str,
|
||||||
|
icon_custom_emoji_id: str | None = None,
|
||||||
|
style: str | None = None,
|
||||||
url: str | None = None,
|
url: str | None = None,
|
||||||
callback_data: str | CallbackData | None = None,
|
callback_data: str | CallbackData | None = None,
|
||||||
web_app: WebAppInfo | None = None,
|
web_app: WebAppInfo | None = None,
|
||||||
|
|
@ -319,6 +321,8 @@ class InlineKeyboardBuilder(KeyboardBuilder[InlineKeyboardButton]):
|
||||||
InlineKeyboardBuilder,
|
InlineKeyboardBuilder,
|
||||||
self._button(
|
self._button(
|
||||||
text=text,
|
text=text,
|
||||||
|
icon_custom_emoji_id=icon_custom_emoji_id,
|
||||||
|
style=style,
|
||||||
url=url,
|
url=url,
|
||||||
callback_data=callback_data,
|
callback_data=callback_data,
|
||||||
web_app=web_app,
|
web_app=web_app,
|
||||||
|
|
@ -375,6 +379,8 @@ class ReplyKeyboardBuilder(KeyboardBuilder[KeyboardButton]):
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
text: str,
|
text: str,
|
||||||
|
icon_custom_emoji_id: str | None = None,
|
||||||
|
style: str | None = None,
|
||||||
request_users: KeyboardButtonRequestUsers | None = None,
|
request_users: KeyboardButtonRequestUsers | None = None,
|
||||||
request_chat: KeyboardButtonRequestChat | None = None,
|
request_chat: KeyboardButtonRequestChat | None = None,
|
||||||
request_contact: bool | None = None,
|
request_contact: bool | None = None,
|
||||||
|
|
@ -387,6 +393,8 @@ class ReplyKeyboardBuilder(KeyboardBuilder[KeyboardButton]):
|
||||||
ReplyKeyboardBuilder,
|
ReplyKeyboardBuilder,
|
||||||
self._button(
|
self._button(
|
||||||
text=text,
|
text=text,
|
||||||
|
icon_custom_emoji_id=icon_custom_emoji_id,
|
||||||
|
style=style,
|
||||||
request_users=request_users,
|
request_users=request_users,
|
||||||
request_chat=request_chat,
|
request_chat=request_chat,
|
||||||
request_contact=request_contact,
|
request_contact=request_contact,
|
||||||
|
|
|
||||||
|
|
@ -214,11 +214,63 @@ class TestKeyboardBuilder:
|
||||||
"builder_type,kwargs,expected",
|
"builder_type,kwargs,expected",
|
||||||
[
|
[
|
||||||
[ReplyKeyboardBuilder, {"text": "test"}, KeyboardButton(text="test")],
|
[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,
|
InlineKeyboardBuilder,
|
||||||
{"text": "test", "callback_data": "callback"},
|
{"text": "test", "callback_data": "callback"},
|
||||||
InlineKeyboardButton(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,
|
InlineKeyboardBuilder,
|
||||||
{"text": "test", "callback_data": MyCallback(value="test")},
|
{"text": "test", "callback_data": MyCallback(value="test")},
|
||||||
|
|
@ -242,6 +294,45 @@ class TestKeyboardBuilder:
|
||||||
def test_as_markup(self, builder, expected):
|
def test_as_markup(self, builder, expected):
|
||||||
assert isinstance(builder.as_markup(), 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(
|
@pytest.mark.parametrize(
|
||||||
"markup,builder_type",
|
"markup,builder_type",
|
||||||
[
|
[
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue