Initial support for Reply Markups
This commit is contained in:
parent
0ffad5d18e
commit
f6b0e0e0dc
@ -493,7 +493,14 @@ def start():
|
|||||||
f.write("\n 0xb0700014: \"pyrogram.client.types.UserProfilePhotos\",")
|
f.write("\n 0xb0700014: \"pyrogram.client.types.UserProfilePhotos\",")
|
||||||
f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",")
|
f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",")
|
||||||
f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",")
|
f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",")
|
||||||
f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\"")
|
f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\",")
|
||||||
|
|
||||||
|
f.write("\n 0xb0700018: \"pyrogram.client.types.reply_markup.ForceReply\",")
|
||||||
|
f.write("\n 0xb0700019: \"pyrogram.client.types.reply_markup.InlineKeyboardButton\",")
|
||||||
|
f.write("\n 0xb0700020: \"pyrogram.client.types.reply_markup.InlineKeyboardMarkup\",")
|
||||||
|
f.write("\n 0xb0700021: \"pyrogram.client.types.reply_markup.KeyboardButton\",")
|
||||||
|
f.write("\n 0xb0700022: \"pyrogram.client.types.reply_markup.ReplyKeyboardMarkup\",")
|
||||||
|
f.write("\n 0xb0700023: \"pyrogram.client.types.reply_markup.ReplyKeyboardRemove\"")
|
||||||
|
|
||||||
f.write("\n}\n")
|
f.write("\n}\n")
|
||||||
|
|
||||||
|
@ -24,4 +24,10 @@ Types
|
|||||||
InputMediaPhoto
|
InputMediaPhoto
|
||||||
InputMediaVideo
|
InputMediaVideo
|
||||||
InputPhoneContact
|
InputPhoneContact
|
||||||
Sticker
|
Sticker
|
||||||
|
reply_markup/ForceReply
|
||||||
|
reply_markup/InlineKeyboardButton
|
||||||
|
reply_markup/InlineKeyboardMarkup
|
||||||
|
reply_markup/KeyboardButton
|
||||||
|
reply_markup/ReplyKeyboardMarkup
|
||||||
|
reply_markup/ReplyKeyboardRemove
|
5
docs/source/pyrogram/types/reply_markup/ForceReply.rst
Normal file
5
docs/source/pyrogram/types/reply_markup/ForceReply.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
ForceReply
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.ForceReply
|
||||||
|
:members:
|
@ -0,0 +1,5 @@
|
|||||||
|
InlineKeyboardButton
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.InlineKeyboardButton
|
||||||
|
:members:
|
@ -0,0 +1,5 @@
|
|||||||
|
InlineKeyboardMarkup
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.InlineKeyboardMarkup
|
||||||
|
:members:
|
@ -0,0 +1,5 @@
|
|||||||
|
KeyboardButton
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.KeyboardButton
|
||||||
|
:members:
|
@ -0,0 +1,5 @@
|
|||||||
|
ReplyKeyboardMarkup
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.ReplyKeyboardMarkup
|
||||||
|
:members:
|
@ -0,0 +1,5 @@
|
|||||||
|
ReplyKeyboardRemove
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. autoclass:: pyrogram.ReplyKeyboardRemove
|
||||||
|
:members:
|
@ -26,7 +26,16 @@ __license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
|
|||||||
__version__ = "0.7.1"
|
__version__ = "0.7.1"
|
||||||
|
|
||||||
from .api.errors import Error
|
from .api.errors import Error
|
||||||
from .client.types import *
|
from .client.types import (
|
||||||
|
Audio, Chat, ChatMember, ChatPhoto, Contact, Document, InputMediaPhoto,
|
||||||
|
InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity,
|
||||||
|
PhotoSize, Sticker, Update, User, UserProfilePhotos, Venue, Video,
|
||||||
|
VideoNote, Voice
|
||||||
|
)
|
||||||
|
from .client.types.reply_markup import (
|
||||||
|
ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
|
||||||
|
KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove
|
||||||
|
)
|
||||||
from .client import (
|
from .client import (
|
||||||
Client, ChatAction, ParseMode, Emoji,
|
Client, ChatAction, ParseMode, Emoji,
|
||||||
MessageHandler, RawUpdateHandler, Filters
|
MessageHandler, RawUpdateHandler, Filters
|
||||||
|
@ -76,7 +76,7 @@ class Encoder(JSONEncoder):
|
|||||||
|
|
||||||
if o is not None:
|
if o is not None:
|
||||||
if o.startswith("pyrogram.client"):
|
if o.startswith("pyrogram.client"):
|
||||||
r = remove_none(OrderedDict([i for i in content.items()]))
|
r = remove_none(OrderedDict([("_", o)] + [i for i in content.items()]))
|
||||||
r.pop("client", None)
|
r.pop("client", None)
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
24
pyrogram/client/types/reply_markup/__init__.py
Normal file
24
pyrogram/client/types/reply_markup/__init__.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from .force_reply import ForceReply
|
||||||
|
from .inline_keyboard_button import InlineKeyboardButton
|
||||||
|
from .inline_keyboard_markup import InlineKeyboardMarkup
|
||||||
|
from .keyboard_button import KeyboardButton
|
||||||
|
from .reply_keyboard_markup import ReplyKeyboardMarkup
|
||||||
|
from .reply_keyboard_remove import ReplyKeyboardRemove
|
48
pyrogram/client/types/reply_markup/force_reply.py
Normal file
48
pyrogram/client/types/reply_markup/force_reply.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
from pyrogram.api.types import ReplyKeyboardForceReply
|
||||||
|
|
||||||
|
|
||||||
|
class ForceReply(Object):
|
||||||
|
"""Upon receiving a message with this object, Telegram clients will display a reply interface to the user
|
||||||
|
(act as if the user has selected the bot's message and tapped 'Reply').
|
||||||
|
This can be extremely useful if you want to create user-friendly step-by-step interfaces without having to
|
||||||
|
sacrifice privacy mode.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700018``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
selective (``bool``, optional):
|
||||||
|
Use this parameter if you want to force reply from specific users only. Targets:
|
||||||
|
1) users that are @mentioned in the text of the Message object;
|
||||||
|
2) if the bot's message is a reply (has reply_to_message_id), sender of the original message.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700018
|
||||||
|
|
||||||
|
def __init__(self, selective: bool = None):
|
||||||
|
self.selective = selective
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
return ReplyKeyboardForceReply(
|
||||||
|
single_use=True,
|
||||||
|
selective=self.selective or None
|
||||||
|
)
|
97
pyrogram/client/types/reply_markup/inline_keyboard_button.py
Normal file
97
pyrogram/client/types/reply_markup/inline_keyboard_button.py
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
|
||||||
|
from pyrogram.api.types import (
|
||||||
|
KeyboardButtonUrl, KeyboardButtonCallback,
|
||||||
|
KeyboardButtonSwitchInline
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class InlineKeyboardButton(Object):
|
||||||
|
"""This object represents one button of an inline keyboard. You must use exactly one of the optional fields.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700019``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
text (``str``):
|
||||||
|
Label text on the button.
|
||||||
|
|
||||||
|
url (``str``, optional):
|
||||||
|
HTTP url to be opened when button is pressed.
|
||||||
|
|
||||||
|
callback_data (``str``, optional):
|
||||||
|
Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes.
|
||||||
|
|
||||||
|
switch_inline_query (``str``, optional):
|
||||||
|
If set, pressing the button will prompt the user to select one of their chats, open that chat and insert
|
||||||
|
the bot's username and the specified inline query in the input field. Can be empty, in which case just
|
||||||
|
the bot's username will be inserted.Note: This offers an easy way for users to start using your bot in
|
||||||
|
inline mode when they are currently in a private chat with it. Especially useful when combined with
|
||||||
|
switch_pm… actions – in this case the user will be automatically returned to the chat they switched from,
|
||||||
|
skipping the chat selection screen.
|
||||||
|
|
||||||
|
switch_inline_query_current_chat (``str``, optional):
|
||||||
|
If set, pressing the button will insert the bot's username and the specified inline query in the current
|
||||||
|
chat's input field. Can be empty, in which case only the bot's username will be inserted.This offers a
|
||||||
|
quick way for the user to open your bot in inline mode in the same chat – good for selecting something
|
||||||
|
from multiple options.
|
||||||
|
|
||||||
|
callback_game (:obj:`CallbackGame <pyrogram.CallbackGame>`, optional):
|
||||||
|
Description of the game that will be launched when the user presses the button.NOTE: This type of button
|
||||||
|
must always be the first button in the first row.
|
||||||
|
|
||||||
|
pay (``bool``, optional):
|
||||||
|
Specify True, to send a Pay button.NOTE: This type of button must always be the first button in the
|
||||||
|
first row.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700019
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
text: str,
|
||||||
|
url: str = None,
|
||||||
|
callback_data: str = None,
|
||||||
|
switch_inline_query: str = None,
|
||||||
|
switch_inline_query_current_chat: str = None,
|
||||||
|
callback_game=None,
|
||||||
|
pay: bool = None
|
||||||
|
):
|
||||||
|
self.text = text
|
||||||
|
self.url = url
|
||||||
|
self.callback_data = callback_data
|
||||||
|
self.switch_inline_query = switch_inline_query
|
||||||
|
self.switch_inline_query_current_chat = switch_inline_query_current_chat
|
||||||
|
self.callback_game = callback_game
|
||||||
|
self.pay = pay
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
if self.url:
|
||||||
|
return KeyboardButtonUrl(self.text, self.url)
|
||||||
|
|
||||||
|
if self.callback_data:
|
||||||
|
return KeyboardButtonCallback(self.text, self.callback_data.encode())
|
||||||
|
|
||||||
|
if self.switch_inline_query:
|
||||||
|
return KeyboardButtonSwitchInline(self.text, self.switch_inline_query)
|
||||||
|
|
||||||
|
if self.switch_inline_query_current_chat:
|
||||||
|
return KeyboardButtonSwitchInline(self.text, self.switch_inline_query_current_chat, same_peer=True)
|
45
pyrogram/client/types/reply_markup/inline_keyboard_markup.py
Normal file
45
pyrogram/client/types/reply_markup/inline_keyboard_markup.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
|
||||||
|
from pyrogram.api.types import ReplyInlineMarkup, KeyboardButtonRow
|
||||||
|
|
||||||
|
|
||||||
|
class InlineKeyboardMarkup(Object):
|
||||||
|
"""This object represents an inline keyboard that appears right next to the message it belongs to.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700020``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
inline_keyboard (List of List of :obj:`InlineKeyboardButton <pyrogram.InlineKeyboardButton>`):
|
||||||
|
Array of button rows, each represented by an Array of InlineKeyboardButton objects.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700020
|
||||||
|
|
||||||
|
def __init__(self, inline_keyboard: list):
|
||||||
|
self.inline_keyboard = inline_keyboard
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
return ReplyInlineMarkup(
|
||||||
|
[KeyboardButtonRow(
|
||||||
|
[j.write() for j in i]
|
||||||
|
) for i in self.inline_keyboard]
|
||||||
|
)
|
62
pyrogram/client/types/reply_markup/keyboard_button.py
Normal file
62
pyrogram/client/types/reply_markup/keyboard_button.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
|
||||||
|
from pyrogram.api.types import KeyboardButton as RawKeyboardButton
|
||||||
|
from pyrogram.api.types import KeyboardButtonRequestPhone, KeyboardButtonRequestGeoLocation
|
||||||
|
|
||||||
|
|
||||||
|
class KeyboardButton(Object):
|
||||||
|
"""This object represents one button of the reply keyboard.
|
||||||
|
For simple text buttons String can be used instead of this object to specify text of the button.
|
||||||
|
Optional fields are mutually exclusive.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700021``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
text (``str``):
|
||||||
|
Text of the button. If none of the optional fields are used, it will be sent as a message when
|
||||||
|
the button is pressed.
|
||||||
|
|
||||||
|
request_contact (``bool``, optional):
|
||||||
|
If True, the user's phone number will be sent as a contact when the button is pressed.
|
||||||
|
Available in private chats only.
|
||||||
|
|
||||||
|
request_location (``bool``, optional):
|
||||||
|
If True, the user's current location will be sent when the button is pressed.
|
||||||
|
Available in private chats only.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700021
|
||||||
|
|
||||||
|
def __init__(self, text: str, request_contact: bool = None, request_location: bool = None):
|
||||||
|
self.text = text
|
||||||
|
self.request_contact = request_contact
|
||||||
|
self.request_location = request_location
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
# TODO: Enforce optional args mutual exclusiveness
|
||||||
|
|
||||||
|
if self.request_contact:
|
||||||
|
return KeyboardButtonRequestPhone(self.text)
|
||||||
|
elif self.request_location:
|
||||||
|
return KeyboardButtonRequestGeoLocation(self.text)
|
||||||
|
else:
|
||||||
|
return RawKeyboardButton(self.text)
|
77
pyrogram/client/types/reply_markup/reply_keyboard_markup.py
Normal file
77
pyrogram/client/types/reply_markup/reply_keyboard_markup.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
|
||||||
|
from pyrogram.api.types import KeyboardButtonRow, KeyboardButton
|
||||||
|
from pyrogram.api.types import ReplyKeyboardMarkup as RawReplyKeyboardMarkup
|
||||||
|
|
||||||
|
|
||||||
|
class ReplyKeyboardMarkup(Object):
|
||||||
|
"""This object represents a custom keyboard with reply options (see Introduction to bots for details and examples).
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700022``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
keyboard (List of List of :obj:`KeyboardButton <pyrogram.KeyboardButton>`):
|
||||||
|
Array of button rows, each represented by an Array of KeyboardButton objects.
|
||||||
|
|
||||||
|
resize_keyboard (``bool``, optional):
|
||||||
|
Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if
|
||||||
|
there are just two rows of buttons). Defaults to false, in which case the custom keyboard is always of
|
||||||
|
the same height as the app's standard keyboard.
|
||||||
|
|
||||||
|
one_time_keyboard (``bool``, optional):
|
||||||
|
Requests clients to hide the keyboard as soon as it's been used. The keyboard will still be available,
|
||||||
|
but clients will automatically display the usual letter-keyboard in the chat – the user can press a
|
||||||
|
special button in the input field to see the custom keyboard again. Defaults to false.
|
||||||
|
|
||||||
|
selective (``bool``, optional):
|
||||||
|
Use this parameter if you want to show the keyboard to specific users only. Targets:
|
||||||
|
1) users that are @mentioned in the text of the Message object;
|
||||||
|
2) if the bot's message is a reply (has reply_to_message_id), sender of the original message.
|
||||||
|
Example: A user requests to change the bot's language, bot replies to the request with a keyboard to
|
||||||
|
select the new language. Other users in the group don't see the keyboard.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700022
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
keyboard: list,
|
||||||
|
resize_keyboard: bool = None,
|
||||||
|
one_time_keyboard: bool = None,
|
||||||
|
selective: bool = None
|
||||||
|
):
|
||||||
|
self.keyboard = keyboard
|
||||||
|
self.resize_keyboard = resize_keyboard
|
||||||
|
self.one_time_keyboard = one_time_keyboard
|
||||||
|
self.selective = selective
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
return RawReplyKeyboardMarkup(
|
||||||
|
rows=[KeyboardButtonRow(
|
||||||
|
[KeyboardButton(j)
|
||||||
|
if isinstance(j, str) else j.write()
|
||||||
|
for j in i]
|
||||||
|
) for i in self.keyboard],
|
||||||
|
resize=self.resize_keyboard or None,
|
||||||
|
single_use=self.one_time_keyboard or None,
|
||||||
|
selective=self.selective or None
|
||||||
|
)
|
50
pyrogram/client/types/reply_markup/reply_keyboard_remove.py
Normal file
50
pyrogram/client/types/reply_markup/reply_keyboard_remove.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||||
|
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
|
||||||
|
#
|
||||||
|
# This file is part of Pyrogram.
|
||||||
|
#
|
||||||
|
# Pyrogram is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Pyrogram is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
from pyrogram.api.core import Object
|
||||||
|
from pyrogram.api.types import ReplyKeyboardHide
|
||||||
|
|
||||||
|
|
||||||
|
class ReplyKeyboardRemove(Object):
|
||||||
|
"""Upon receiving a message with this object, Telegram clients will remove the current custom keyboard and
|
||||||
|
display the default letter-keyboard. By default, custom keyboards are displayed until a new keyboard is sent
|
||||||
|
by a bot. An exception is made for one-time keyboards that are hidden immediately after the user presses a
|
||||||
|
button (see ReplyKeyboardMarkup).
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
ID: ``0xb0700023``
|
||||||
|
|
||||||
|
Args:
|
||||||
|
selective (``bool``, optional):
|
||||||
|
Use this parameter if you want to remove the keyboard for specific users only. Targets:
|
||||||
|
1) users that are @mentioned in the text of the Message object;
|
||||||
|
2) if the bot's message is a reply (has reply_to_message_id), sender of the original message.
|
||||||
|
Example: A user votes in a poll, bot returns confirmation message in reply to the vote and removes the
|
||||||
|
keyboard for that user, while still showing the keyboard with poll options to users who haven't voted yet.
|
||||||
|
"""
|
||||||
|
|
||||||
|
ID = 0xb0700002
|
||||||
|
|
||||||
|
def __init__(self, selective: bool = None):
|
||||||
|
self.selective = selective
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
return ReplyKeyboardHide(
|
||||||
|
selective=self.selective or None
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user