diff --git a/aiogram/types/reply_keyboard.py b/aiogram/types/reply_keyboard.py index 5a28f3f4..a42b1fc2 100644 --- a/aiogram/types/reply_keyboard.py +++ b/aiogram/types/reply_keyboard.py @@ -2,6 +2,7 @@ import typing from . import base from . import fields +from .chat_administrator_rights import ChatAdministratorRights from .web_app_info import WebAppInfo @@ -105,6 +106,76 @@ class ReplyKeyboardMarkup(base.TelegramObject): return self + +class KeyboardButtonRequestUser(base.TelegramObject): + """ + This object defines the criteria used to request a suitable user. + The identifier of the selected user will be shared with the bot when + the corresponding button is pressed. + + https://core.telegram.org/bots/api#keyboardbuttonrequestuser + """ + request_id: base.Integer = fields.Field() + user_is_bot: base.Boolean = fields.Field() + user_is_premium: base.Boolean = fields.Field() + + def __init__( + self, + request_id: base.Integer, + user_is_bot: typing.Optional[base.Boolean] = None, + user_is_premium: typing.Optional[base.Boolean] = None, + **kwargs, + ): + super().__init__( + request_id=request_id, + user_is_bot=user_is_bot, + user_is_premium=user_is_premium, + **kwargs, + ) + + +class KeyboardButtonRequestChat(base.TelegramObject): + """ + This object defines the criteria used to request a suitable chat. + The identifier of the selected chat will be shared with the bot when + the corresponding button is pressed. + + https://core.telegram.org/bots/api#keyboardbuttonrequestchat + """ + request_id: base.Integer = fields.Field() + chat_is_channel: base.Boolean = fields.Field() + chat_is_forum: base.Boolean = fields.Field() + chat_has_username: base.Boolean = fields.Field() + chat_is_created: base.Boolean = fields.Field() + user_administrator_rights: ChatAdministratorRights = fields.Field() + bot_administrator_rights: ChatAdministratorRights = fields.Field() + bot_is_member: base.Boolean = fields.Field() + + def __init__( + self, + request_id: base.Integer, + chat_is_channel: base.Boolean, + chat_is_forum: typing.Optional[base.Boolean] = None, + chat_has_username: typing.Optional[base.Boolean] = None, + chat_is_created: typing.Optional[base.Boolean] = None, + user_administrator_rights: typing.Optional[base.Boolean] = None, + bot_administrator_rights: typing.Optional[base.Boolean] = None, + bot_is_member: typing.Optional[base.Boolean] = None, + **kwargs, + ): + super().__init__( + request_id=request_id, + chat_is_channel=chat_is_channel, + chat_is_forum=chat_is_forum, + chat_has_username=chat_has_username, + chat_is_created=chat_is_created, + user_administrator_rights=user_administrator_rights, + bot_administrator_rights=bot_administrator_rights, + bot_is_member=bot_is_member, + **kwargs, + ) + + class KeyboardButton(base.TelegramObject): """ This object represents one button of the reply keyboard. @@ -118,18 +189,24 @@ class KeyboardButton(base.TelegramObject): https://core.telegram.org/bots/api#keyboardbutton """ text: base.String = fields.Field() + request_user: KeyboardButtonRequestUser = fields.Field() + request_chat: KeyboardButtonRequestUser = fields.Field() request_contact: base.Boolean = fields.Field() request_location: base.Boolean = fields.Field() request_poll: KeyboardButtonPollType = fields.Field() web_app: WebAppInfo = fields.Field(base=WebAppInfo) def __init__(self, text: base.String, + request_user: typing.Optional[KeyboardButtonRequestUser] = None, + request_chat: typing.Optional[KeyboardButtonRequestUser] = None, request_contact: base.Boolean = None, request_location: base.Boolean = None, request_poll: KeyboardButtonPollType = None, web_app: WebAppInfo = None, **kwargs): super(KeyboardButton, self).__init__(text=text, + request_user=request_user, + request_chat=request_chat, request_contact=request_contact, request_location=request_location, request_poll=request_poll, @@ -137,6 +214,7 @@ class KeyboardButton(base.TelegramObject): **kwargs) + class ReplyKeyboardRemove(base.TelegramObject): """ Upon receiving a message with this object, Telegram clients will remove the current custom keyboard