Pyrofork: Add request_channel parameters to KeyboardButton class

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2023-08-03 03:58:37 +07:00
parent 9299b9bd7d
commit d3ef8fb24a
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
4 changed files with 68 additions and 0 deletions

View file

@ -459,6 +459,7 @@ def pyrogram_api():
ReplyKeyboardRemove ReplyKeyboardRemove
InlineKeyboardMarkup InlineKeyboardMarkup
InlineKeyboardButton InlineKeyboardButton
RequestPeerTypeChannel
RequestPeerTypeChat RequestPeerTypeChat
RequestPeerTypeUser RequestPeerTypeUser
LoginUrl LoginUrl

View file

@ -40,6 +40,7 @@ from .menu_button_default import MenuButtonDefault
from .menu_button_web_app import MenuButtonWebApp from .menu_button_web_app import MenuButtonWebApp
from .reply_keyboard_markup import ReplyKeyboardMarkup from .reply_keyboard_markup import ReplyKeyboardMarkup
from .reply_keyboard_remove import ReplyKeyboardRemove from .reply_keyboard_remove import ReplyKeyboardRemove
from .request_peer_type_channel import RequestPeerTypeChannel
from .request_peer_type_chat import RequestPeerTypeChat from .request_peer_type_chat import RequestPeerTypeChat
from .request_peer_type_user import RequestPeerTypeUser from .request_peer_type_user import RequestPeerTypeUser
from .sent_web_app_message import SentWebAppMessage from .sent_web_app_message import SentWebAppMessage
@ -55,6 +56,7 @@ __all__ = [
"KeyboardButton", "KeyboardButton",
"ReplyKeyboardMarkup", "ReplyKeyboardMarkup",
"ReplyKeyboardRemove", "ReplyKeyboardRemove",
"RequestPeerTypeChannel",
"RequestPeerTypeChat", "RequestPeerTypeChat",
"RequestPeerTypeUser", "RequestPeerTypeUser",
"LoginUrl", "LoginUrl",

View file

@ -38,6 +38,10 @@ class KeyboardButton(Object):
If True, the user's current location will be sent when the button is pressed. If True, the user's current location will be sent when the button is pressed.
Available in private chats only. Available in private chats only.
request_channel ("obj:`~pyrogram.types.RequestPeerTypeChannel`, *optional*):
If specified, defines the criteria used to request a suitable channels.
The identifier of the selected channels will be shared with the bot when the corresponding button is pressed.
request_chat ("obj:`~pyrogram.types.RequestPeerTypeChat`, *optional*): request_chat ("obj:`~pyrogram.types.RequestPeerTypeChat`, *optional*):
If specified, defines the criteria used to request a suitable chats. If specified, defines the criteria used to request a suitable chats.
The identifier of the selected chats will be shared with the bot when the corresponding button is pressed. The identifier of the selected chats will be shared with the bot when the corresponding button is pressed.
@ -58,6 +62,7 @@ class KeyboardButton(Object):
text: str, text: str,
request_contact: bool = None, request_contact: bool = None,
request_location: bool = None, request_location: bool = None,
request_channel: "types.RequestPeerTypeChannel" = None,
request_chat: "types.RequestPeerTypeChat" = None, request_chat: "types.RequestPeerTypeChat" = None,
request_user: "types.RequestPeerTypeUser" = None, request_user: "types.RequestPeerTypeUser" = None,
web_app: "types.WebAppInfo" = None web_app: "types.WebAppInfo" = None
@ -67,6 +72,7 @@ class KeyboardButton(Object):
self.text = str(text) self.text = str(text)
self.request_contact = request_contact self.request_contact = request_contact
self.request_location = request_location self.request_location = request_location
self.request_channel = request_channel
self.request_chat = request_chat self.request_chat = request_chat
self.request_user = request_user self.request_user = request_user
self.web_app = web_app self.web_app = web_app
@ -96,6 +102,15 @@ class KeyboardButton(Object):
) )
) )
if isinstance(b, raw.types.RequestPeerTypeBroadcast):
return KeyboardButton(
text=b.text,
request_chat=types.RequestPeerTypeChannel(
is_creator=b.creator,
is_username=b.has_username
)
)
if isinstance(b, raw.types.RequestPeerTypeChat): if isinstance(b, raw.types.RequestPeerTypeChat):
return KeyboardButton( return KeyboardButton(
text=b.text, text=b.text,
@ -121,6 +136,15 @@ class KeyboardButton(Object):
return raw.types.KeyboardButtonRequestPhone(text=self.text) return raw.types.KeyboardButtonRequestPhone(text=self.text)
elif self.request_location: elif self.request_location:
return raw.types.KeyboardButtonRequestGeoLocation(text=self.text) return raw.types.KeyboardButtonRequestGeoLocation(text=self.text)
elif self.request_channel:
return raw.types.KeyboardButtonRequestPeer(
text=self.text,
button_id=0,
peer_type=raw.types.RequestPeerTypeBroadcast(
creator=self.request_broadcast.is_creator,
has_username=self.request_broadcast.is_username
)
)
elif self.request_chat: elif self.request_chat:
return raw.types.KeyboardButtonRequestPeer( return raw.types.KeyboardButtonRequestPeer(
text=self.text, text=self.text,

View file

@ -0,0 +1,41 @@
# Pyrofork - Telegram MTProto API Client Library for Python
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/Mayuri-Chan>
#
# This file is part of Pyrofork.
#
# Pyrofork 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.
#
# Pyrofork 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 Pyrofork. If not, see <http://www.gnu.org/licenses/>.
from ..object import Object
class RequestPeerTypeChannel(Object):
"""Object used to request clients to send a channel identifier.
Parameters:
is_creator (``bool``, *optional*):
If True, show only Channel which user is the owner.
is_username (``bool``, *optional*):
If True, show only Channel which has username.
""" # TODO user_admin_rights, bot_admin_rights
def __init__(
self,
is_creator: bool=None,
is_username: bool=None
):
super().__init__()
self.is_creator = is_creator
self.is_username = is_username