mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2026-01-10 00:24:51 +00:00
Merge branch 'Mayuri-Chan:main' into main
This commit is contained in:
commit
f036ca58a2
19 changed files with 252 additions and 156 deletions
|
|
@ -374,6 +374,10 @@ def pyrogram_api():
|
|||
set_bot_info
|
||||
get_collectible_item_info
|
||||
""",
|
||||
business="""
|
||||
Telegram Business
|
||||
get_business_connection
|
||||
""",
|
||||
authorization="""
|
||||
Authorization
|
||||
connect
|
||||
|
|
|
|||
13
compiler/docs/template/methods.rst
vendored
13
compiler/docs/template/methods.rst
vendored
|
|
@ -112,6 +112,19 @@ Stickers
|
|||
|
||||
{stickers}
|
||||
|
||||
Telegram Business
|
||||
-------------
|
||||
|
||||
.. autosummary::
|
||||
:nosignatures:
|
||||
|
||||
{business}
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
|
||||
{business}
|
||||
|
||||
Users
|
||||
-----
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__fork_name__ = "PyroFork"
|
||||
__version__ = "2.3.32"
|
||||
__version__ = "2.3.36"
|
||||
__license__ = "GNU Lesser General Public License v3.0 (LGPL-3.0)"
|
||||
__copyright__ = "Copyright (C) 2022-present Mayuri-Chan <https://github.com/Mayuri-Chan>"
|
||||
|
||||
|
|
|
|||
|
|
@ -203,6 +203,14 @@ class Client(Methods):
|
|||
A value that is too high may result in network related issues.
|
||||
Defaults to 1.
|
||||
|
||||
max_message_cache_size (``int``, *optional*):
|
||||
Set the maximum size of the message cache.
|
||||
Defaults to 10000.
|
||||
|
||||
max_business_user_connection_cache_size (``int``, *optional*):
|
||||
Set the maximum size of the message cache.
|
||||
Defaults to 10000.
|
||||
|
||||
client_platform (:obj:`~pyrogram.enums.ClientPlatform`, *optional*):
|
||||
The platform where this client is running.
|
||||
Defaults to 'other'
|
||||
|
|
@ -224,6 +232,7 @@ class Client(Methods):
|
|||
UPDATES_WATCHDOG_INTERVAL = 15 * 60
|
||||
|
||||
MAX_CONCURRENT_TRANSMISSIONS = 1
|
||||
MAX_CACHE_SIZE = 10000
|
||||
|
||||
mimetypes = MimeTypes()
|
||||
mimetypes.readfp(StringIO(mime_types))
|
||||
|
|
@ -259,7 +268,9 @@ class Client(Methods):
|
|||
sleep_threshold: int = Session.SLEEP_THRESHOLD,
|
||||
hide_password: Optional[bool] = False,
|
||||
max_concurrent_transmissions: int = MAX_CONCURRENT_TRANSMISSIONS,
|
||||
client_platform: "enums.ClientPlatform" = enums.ClientPlatform.OTHER
|
||||
client_platform: "enums.ClientPlatform" = enums.ClientPlatform.OTHER,
|
||||
max_message_cache_size: int = MAX_CACHE_SIZE,
|
||||
max_business_user_connection_cache_size: int = MAX_CACHE_SIZE
|
||||
):
|
||||
super().__init__()
|
||||
|
||||
|
|
@ -292,6 +303,9 @@ class Client(Methods):
|
|||
self.hide_password = hide_password
|
||||
self.max_concurrent_transmissions = max_concurrent_transmissions
|
||||
self.client_platform = client_platform
|
||||
self.max_message_cache_size = max_message_cache_size
|
||||
self.max_message_cache_size = max_message_cache_size
|
||||
self.max_business_user_connection_cache_size = max_business_user_connection_cache_size
|
||||
|
||||
self.executor = ThreadPoolExecutor(self.workers, thread_name_prefix="Handler")
|
||||
|
||||
|
|
@ -341,7 +355,8 @@ class Client(Methods):
|
|||
|
||||
self.me: Optional[User] = None
|
||||
|
||||
self.message_cache = Cache(10000)
|
||||
self.message_cache = Cache(self.max_message_cache_size)
|
||||
self.business_user_connection_cache = Cache(self.max_business_user_connection_cache_size)
|
||||
|
||||
# Sometimes, for some reason, the server will stop sending updates and will only respond to pings.
|
||||
# This watchdog will invoke updates.GetState in order to wake up the server and enable it sending updates again
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ from .pyromod import Pyromod
|
|||
from .stickers import Stickers
|
||||
from .users import Users
|
||||
from .utilities import Utilities
|
||||
from .business import TelegramBusiness
|
||||
|
||||
|
||||
class Methods(
|
||||
|
|
@ -46,5 +47,6 @@ class Methods(
|
|||
Decorators,
|
||||
Utilities,
|
||||
InviteLinks,
|
||||
TelegramBusiness,
|
||||
):
|
||||
pass
|
||||
|
|
|
|||
25
pyrogram/methods/business/__init__.py
Normal file
25
pyrogram/methods/business/__init__.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <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 .get_business_connection import GetBusinessConnection
|
||||
|
||||
|
||||
class TelegramBusiness(
|
||||
GetBusinessConnection,
|
||||
):
|
||||
pass
|
||||
58
pyrogram/methods/business/get_business_connection.py
Normal file
58
pyrogram/methods/business/get_business_connection.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <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 datetime import datetime
|
||||
from typing import Union, List
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import types, utils, raw
|
||||
|
||||
|
||||
class GetBusinessConnection:
|
||||
async def get_business_connection(
|
||||
self: "pyrogram.Client",
|
||||
business_connection_id: str
|
||||
) -> "types.Message":
|
||||
"""Use this method to get information about the connection of the bot with a business account.
|
||||
|
||||
.. include:: /_includes/usable-by/bots.rst
|
||||
|
||||
Parameters:
|
||||
business_connection_id (``str``):
|
||||
Unique identifier of the business connection
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.BusinessConnection`: On success, the the connection of the bot with a business account is returned.
|
||||
"""
|
||||
|
||||
r = await self.invoke(
|
||||
raw.functions.account.GetBotBusinessConnection(
|
||||
connection_id=business_connection_id
|
||||
)
|
||||
)
|
||||
for i in r.updates:
|
||||
if isinstance(
|
||||
i,
|
||||
(
|
||||
raw.types.UpdateBotBusinessConnect
|
||||
)
|
||||
):
|
||||
return await types.BotBusinessConnection._parse(
|
||||
client=self,
|
||||
bot_connection=i.connection
|
||||
)
|
||||
|
|
@ -66,7 +66,8 @@ class EditMessageCaption:
|
|||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message`: On success, the edited message is returned.
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@ from pyrogram import types
|
|||
from pyrogram import utils
|
||||
from pyrogram.file_id import FileType
|
||||
|
||||
from .inline_session import get_session
|
||||
|
||||
|
||||
class EditMessageMedia:
|
||||
async def edit_message_media(
|
||||
|
|
@ -73,7 +71,8 @@ class EditMessageMedia:
|
|||
Inverts the position of the media and caption.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message`: On success, the edited message is returned.
|
||||
|
|
@ -288,24 +287,13 @@ class EditMessageMedia:
|
|||
entities=entities,
|
||||
invert_media=invert_media
|
||||
)
|
||||
session = None
|
||||
business_connection = None
|
||||
if business_connection_id:
|
||||
business_connection = self.business_user_connection_cache[business_connection_id]
|
||||
if not business_connection:
|
||||
business_connection = await self.get_business_connection(business_connection_id)
|
||||
session = await get_session(
|
||||
self,
|
||||
business_connection._raw.connection.dc_id
|
||||
)
|
||||
if business_connection_id:
|
||||
r = await session.invoke(
|
||||
if business_connection_id is not None:
|
||||
r = await self.invoke(
|
||||
raw.functions.InvokeWithBusinessConnection(
|
||||
query=rpc,
|
||||
connection_id=business_connection_id
|
||||
connection_id=business_connection_id,
|
||||
query=rpc
|
||||
)
|
||||
)
|
||||
# await session.stop()
|
||||
else:
|
||||
r = await self.invoke(rpc)
|
||||
|
||||
|
|
@ -316,18 +304,3 @@ class EditMessageMedia:
|
|||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats}
|
||||
)
|
||||
elif isinstance(
|
||||
i,
|
||||
(
|
||||
raw.types.UpdateBotEditBusinessMessage
|
||||
)
|
||||
):
|
||||
return await types.Message._parse(
|
||||
self,
|
||||
i.message,
|
||||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats},
|
||||
business_connection_id=getattr(i, "connection_id", business_connection_id),
|
||||
raw_reply_to_message=i.reply_to_message,
|
||||
replies=0
|
||||
)
|
||||
|
|
|
|||
|
|
@ -20,9 +20,8 @@
|
|||
from typing import Union
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw, types
|
||||
|
||||
from .inline_session import get_session
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
|
||||
|
||||
class EditMessageReplyMarkup:
|
||||
|
|
@ -51,7 +50,8 @@ class EditMessageReplyMarkup:
|
|||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message`: On success, the edited message is returned.
|
||||
|
|
@ -70,54 +70,22 @@ class EditMessageReplyMarkup:
|
|||
rpc = raw.functions.messages.EditMessage(
|
||||
peer=await self.resolve_peer(chat_id),
|
||||
id=message_id,
|
||||
reply_markup=await reply_markup.write(self) if reply_markup else None,
|
||||
reply_markup=await reply_markup.write(self) if reply_markup else None
|
||||
)
|
||||
session = None
|
||||
business_connection = None
|
||||
if business_connection_id:
|
||||
business_connection = self.business_user_connection_cache[business_connection_id]
|
||||
if not business_connection:
|
||||
business_connection = await self.get_business_connection(business_connection_id)
|
||||
session = await get_session(
|
||||
self,
|
||||
business_connection._raw.connection.dc_id
|
||||
)
|
||||
if business_connection_id:
|
||||
r = await session.invoke(
|
||||
if business_connection_id is not None:
|
||||
r = await self.invoke(
|
||||
raw.functions.InvokeWithBusinessConnection(
|
||||
query=rpc,
|
||||
connection_id=business_connection_id
|
||||
connection_id=business_connection_id,
|
||||
query=rpc
|
||||
)
|
||||
)
|
||||
# await session.stop()
|
||||
else:
|
||||
r = await self.invoke(rpc)
|
||||
|
||||
for i in r.updates:
|
||||
if isinstance(
|
||||
i,
|
||||
(
|
||||
raw.types.UpdateEditMessage,
|
||||
raw.types.UpdateEditChannelMessage
|
||||
)
|
||||
):
|
||||
if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)):
|
||||
return await types.Message._parse(
|
||||
self, i.message,
|
||||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats}
|
||||
)
|
||||
elif isinstance(
|
||||
i,
|
||||
(
|
||||
raw.types.UpdateBotEditBusinessMessage
|
||||
)
|
||||
):
|
||||
return await types.Message._parse(
|
||||
self,
|
||||
i.message,
|
||||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats},
|
||||
business_connection_id=getattr(i, "connection_id", business_connection_id),
|
||||
raw_reply_to_message=i.reply_to_message,
|
||||
replies=0
|
||||
)
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ class EditMessageText:
|
|||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message`: On success, the edited message is returned.
|
||||
|
|
@ -97,24 +98,13 @@ class EditMessageText:
|
|||
reply_markup=await reply_markup.write(self) if reply_markup else None,
|
||||
**await utils.parse_text_entities(self, text, parse_mode, entities)
|
||||
)
|
||||
session = None
|
||||
business_connection = None
|
||||
if business_connection_id:
|
||||
business_connection = self.business_user_connection_cache[business_connection_id]
|
||||
if not business_connection:
|
||||
business_connection = await self.get_business_connection(business_connection_id)
|
||||
session = await get_session(
|
||||
self,
|
||||
business_connection._raw.connection.dc_id
|
||||
)
|
||||
if business_connection_id:
|
||||
r = await session.invoke(
|
||||
if business_connection_id is not None:
|
||||
r = await self.invoke(
|
||||
raw.functions.InvokeWithBusinessConnection(
|
||||
query=rpc,
|
||||
connection_id=business_connection_id
|
||||
connection_id=business_connection_id,
|
||||
query=rpc
|
||||
)
|
||||
)
|
||||
# await session.stop()
|
||||
else:
|
||||
r = await self.invoke(rpc)
|
||||
|
||||
|
|
@ -125,18 +115,3 @@ class EditMessageText:
|
|||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats}
|
||||
)
|
||||
elif isinstance(
|
||||
i,
|
||||
(
|
||||
raw.types.UpdateBotEditBusinessMessage
|
||||
)
|
||||
):
|
||||
return await types.Message._parse(
|
||||
self,
|
||||
i.message,
|
||||
{i.id: i for i in r.users},
|
||||
{i.id: i for i in r.chats},
|
||||
business_connection_id=getattr(i, "connection_id", business_connection_id),
|
||||
raw_reply_to_message=i.reply_to_message,
|
||||
replies=0
|
||||
)
|
||||
|
|
|
|||
|
|
@ -40,6 +40,9 @@ async def get_session(client: "pyrogram.Client", dc_id: int):
|
|||
|
||||
await session.start()
|
||||
|
||||
if dc_id == await client.storage.dc_id():
|
||||
return session
|
||||
|
||||
for _ in range(3):
|
||||
exported_auth = await client.invoke(
|
||||
raw.functions.auth.ExportAuthorization(
|
||||
|
|
|
|||
|
|
@ -20,9 +20,8 @@
|
|||
from typing import Union
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw, types
|
||||
|
||||
from .inline_session import get_session
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
|
||||
|
||||
class StopPoll:
|
||||
|
|
@ -53,7 +52,7 @@ class StopPoll:
|
|||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Poll`: On success, the stopped poll with the final results is returned.
|
||||
|
|
@ -78,24 +77,13 @@ class StopPoll:
|
|||
),
|
||||
reply_markup=await reply_markup.write(self) if reply_markup else None
|
||||
)
|
||||
session = None
|
||||
business_connection = None
|
||||
if business_connection_id:
|
||||
business_connection = self.business_user_connection_cache[business_connection_id]
|
||||
if not business_connection:
|
||||
business_connection = await self.get_business_connection(business_connection_id)
|
||||
session = await get_session(
|
||||
self,
|
||||
business_connection._raw.connection.dc_id
|
||||
)
|
||||
if business_connection_id:
|
||||
r = await session.invoke(
|
||||
if business_connection_id is not None:
|
||||
r = await self.invoke(
|
||||
raw.functions.InvokeWithBusinessConnection(
|
||||
query=rpc,
|
||||
connection_id=business_connection_id
|
||||
connection_id=business_connection_id,
|
||||
query=rpc
|
||||
)
|
||||
)
|
||||
# await session.stop()
|
||||
else:
|
||||
r = await self.invoke(rpc)
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ from pyrogram.errors import (
|
|||
RPCError, InternalServerError, AuthKeyDuplicated,
|
||||
FloodWait, FloodPremiumWait,
|
||||
ServiceUnavailable, BadMsgNotification,
|
||||
SecurityCheckMismatch
|
||||
SecurityCheckMismatch, Unauthorized
|
||||
)
|
||||
from pyrogram.raw.all import layer
|
||||
from pyrogram.raw.core import TLObject, MsgContainer, Int, FutureSalts
|
||||
|
|
@ -309,6 +309,12 @@ class Session:
|
|||
if packet:
|
||||
error_code = -Int.read(BytesIO(packet))
|
||||
|
||||
if error_code == 404:
|
||||
raise Unauthorized(
|
||||
"Auth key not found in the system. You must delete your session file "
|
||||
"and log in again with your phone number or bot token."
|
||||
)
|
||||
|
||||
log.warning(
|
||||
"Server sent transport error: %s (%s)",
|
||||
error_code, Session.TRANSPORT_ERRORS.get(error_code, "unknown error")
|
||||
|
|
|
|||
|
|
@ -107,11 +107,10 @@ class CallbackQuery(Object, Update):
|
|||
client,
|
||||
callback_query.message,
|
||||
users,
|
||||
chats,
|
||||
{},
|
||||
is_scheduled=False,
|
||||
replies=0,
|
||||
business_connection_id=callback_query.connection_id,
|
||||
raw_reply_to_message=getattr(callback_query, "reply_to_message", None)
|
||||
business_connection_id=callback_query.connection_id
|
||||
)
|
||||
# Try to decode callback query data into string. If that fails, fallback to bytes instead of decoding by
|
||||
# ignoring/replacing errors, this way, button clicks will still work.
|
||||
|
|
@ -182,7 +181,8 @@ class CallbackQuery(Object, Update):
|
|||
text: str,
|
||||
parse_mode: Optional["enums.ParseMode"] = None,
|
||||
disable_web_page_preview: bool = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: Optional[str] = None
|
||||
) -> Union["types.Message", bool]:
|
||||
"""Edit the text of messages attached to callback queries.
|
||||
|
||||
|
|
@ -202,6 +202,10 @@ class CallbackQuery(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited
|
||||
message is returned, otherwise True is returned (message sent via the bot, as inline query result).
|
||||
|
|
@ -217,7 +221,7 @@ class CallbackQuery(Object, Update):
|
|||
parse_mode=parse_mode,
|
||||
disable_web_page_preview=disable_web_page_preview,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.message.business_connection_id
|
||||
business_connection_id=getattr(self.message, "business_connection_id", None)
|
||||
)
|
||||
else:
|
||||
return await self._client.edit_inline_text(
|
||||
|
|
@ -232,7 +236,8 @@ class CallbackQuery(Object, Update):
|
|||
self,
|
||||
caption: str,
|
||||
parse_mode: Optional["enums.ParseMode"] = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: Optional[str] = None
|
||||
) -> Union["types.Message", bool]:
|
||||
"""Edit the caption of media messages attached to callback queries.
|
||||
|
||||
|
|
@ -249,6 +254,10 @@ class CallbackQuery(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited
|
||||
message is returned, otherwise True is returned (message sent via the bot, as inline query result).
|
||||
|
|
@ -256,12 +265,22 @@ class CallbackQuery(Object, Update):
|
|||
Raises:
|
||||
RPCError: In case of a Telegram RPC error.
|
||||
"""
|
||||
return await self.edit_message_text(caption, parse_mode, reply_markup=reply_markup)
|
||||
return await self.edit_message_text(
|
||||
caption,
|
||||
parse_mode,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=getattr(
|
||||
self.message,
|
||||
"business_connection_id",
|
||||
None
|
||||
) if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
||||
async def edit_message_media(
|
||||
self,
|
||||
media: "types.InputMedia",
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: Optional[str] = None
|
||||
) -> Union["types.Message", bool]:
|
||||
"""Edit animation, audio, document, photo or video messages attached to callback queries.
|
||||
|
||||
|
|
@ -274,6 +293,10 @@ class CallbackQuery(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited
|
||||
message is returned, otherwise True is returned (message sent via the bot, as inline query result).
|
||||
|
|
@ -287,7 +310,11 @@ class CallbackQuery(Object, Update):
|
|||
message_id=self.message.id,
|
||||
media=media,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.message.business_connection_id
|
||||
business_connection_id=getattr(
|
||||
self.message,
|
||||
"business_connection_id",
|
||||
None
|
||||
) if business_connection_id is None else business_connection_id
|
||||
)
|
||||
else:
|
||||
return await self._client.edit_inline_media(
|
||||
|
|
@ -298,7 +325,8 @@ class CallbackQuery(Object, Update):
|
|||
|
||||
async def edit_message_reply_markup(
|
||||
self,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: Optional[str] = None
|
||||
) -> Union["types.Message", bool]:
|
||||
"""Edit only the reply markup of messages attached to callback queries.
|
||||
|
||||
|
|
@ -308,6 +336,10 @@ class CallbackQuery(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited
|
||||
message is returned, otherwise True is returned (message sent via the bot, as inline query result).
|
||||
|
|
@ -320,7 +352,11 @@ class CallbackQuery(Object, Update):
|
|||
chat_id=self.message.chat.id,
|
||||
message_id=self.message.id,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.message.business_connection_id,
|
||||
business_connection_id=getattr(
|
||||
self.message,
|
||||
"business_connection_id",
|
||||
None
|
||||
) if business_connection_id is None else business_connection_id
|
||||
)
|
||||
else:
|
||||
return await self._client.edit_inline_reply_markup(
|
||||
|
|
|
|||
|
|
@ -4066,7 +4066,8 @@ class Message(Object, Update):
|
|||
entities: List["types.MessageEntity"] = None,
|
||||
disable_web_page_preview: bool = None,
|
||||
invert_media: bool = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: str = None
|
||||
) -> "Message":
|
||||
"""Bound method *edit_text* of :obj:`~pyrogram.types.Message`.
|
||||
|
||||
|
|
@ -4107,6 +4108,10 @@ class Message(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
On success, the edited :obj:`~pyrogram.types.Message` is returned.
|
||||
|
||||
|
|
@ -4122,7 +4127,7 @@ class Message(Object, Update):
|
|||
disable_web_page_preview=disable_web_page_preview,
|
||||
invert_media=invert_media,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.business_connection_id
|
||||
business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
||||
edit = edit_text
|
||||
|
|
@ -4133,7 +4138,8 @@ class Message(Object, Update):
|
|||
parse_mode: Optional["enums.ParseMode"] = None,
|
||||
caption_entities: List["types.MessageEntity"] = None,
|
||||
invert_media: bool = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: str = None
|
||||
) -> "Message":
|
||||
"""Bound method *edit_caption* of :obj:`~pyrogram.types.Message`.
|
||||
|
||||
|
|
@ -4169,6 +4175,10 @@ class Message(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
On success, the edited :obj:`~pyrogram.types.Message` is returned.
|
||||
|
||||
|
|
@ -4182,14 +4192,16 @@ class Message(Object, Update):
|
|||
parse_mode=parse_mode,
|
||||
caption_entities=caption_entities,
|
||||
invert_media=invert_media,
|
||||
reply_markup=reply_markup
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
||||
async def edit_media(
|
||||
self,
|
||||
media: "types.InputMedia",
|
||||
invert_media: bool = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: str = None
|
||||
) -> "Message":
|
||||
"""Bound method *edit_media* of :obj:`~pyrogram.types.Message`.
|
||||
|
||||
|
|
@ -4218,6 +4230,10 @@ class Message(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
On success, the edited :obj:`~pyrogram.types.Message` is returned.
|
||||
|
||||
|
|
@ -4230,10 +4246,14 @@ class Message(Object, Update):
|
|||
media=media,
|
||||
invert_media=invert_media,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.business_connection_id
|
||||
business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
||||
async def edit_reply_markup(self, reply_markup: "types.InlineKeyboardMarkup" = None) -> "Message":
|
||||
async def edit_reply_markup(
|
||||
self,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
business_connection_id: str = None
|
||||
) -> "Message":
|
||||
"""Bound method *edit_reply_markup* of :obj:`~pyrogram.types.Message`.
|
||||
|
||||
Use as a shortcut for:
|
||||
|
|
@ -4255,6 +4275,10 @@ class Message(Object, Update):
|
|||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection.
|
||||
for business bots only.
|
||||
|
||||
Returns:
|
||||
On success, if edited message is sent by the bot, the edited
|
||||
:obj:`~pyrogram.types.Message` is returned, otherwise True is returned.
|
||||
|
|
@ -4266,7 +4290,7 @@ class Message(Object, Update):
|
|||
chat_id=self.chat.id,
|
||||
message_id=self.id,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=self.business_connection_id
|
||||
business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
||||
async def forward(
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ class Poll(Object, Update):
|
|||
An InlineKeyboardMarkup object.
|
||||
|
||||
business_connection_id (``str``, *optional*):
|
||||
Unique identifier of the business connection on behalf of which the message to be edited was sent
|
||||
Unique identifier of the business connection.
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
|
@ -255,5 +255,5 @@ class Poll(Object, Update):
|
|||
chat_id=self.chat.id,
|
||||
message_id=self.id,
|
||||
reply_markup=reply_markup,
|
||||
business_connection_id=business_connection_id
|
||||
business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id
|
||||
)
|
||||
|
|
|
|||
|
|
@ -954,7 +954,7 @@ class Chat(Object):
|
|||
self,
|
||||
user_id: Union[int, str],
|
||||
privileges: "types.ChatPrivileges" = None,
|
||||
title: Optional[str] = None,
|
||||
title: Optional[str] = "",
|
||||
) -> bool:
|
||||
"""Bound method *promote_member* of :obj:`~pyrogram.types.Chat`.
|
||||
|
||||
|
|
|
|||
|
|
@ -281,15 +281,20 @@ MAX_USER_ID_OLD = 2147483647
|
|||
MAX_USER_ID = 999999999999
|
||||
|
||||
|
||||
def get_raw_peer_id(peer: raw.base.Peer) -> Optional[int]:
|
||||
def get_raw_peer_id(
|
||||
peer: Union[
|
||||
raw.base.Peer,
|
||||
raw.base.RequestedPeer
|
||||
]
|
||||
) -> Optional[int]:
|
||||
"""Get the raw peer id from a Peer object"""
|
||||
if isinstance(peer, raw.types.PeerUser):
|
||||
if isinstance(peer, raw.types.PeerUser) or isinstance(peer, raw.types.RequestedPeerUser):
|
||||
return peer.user_id
|
||||
|
||||
if isinstance(peer, raw.types.PeerChat):
|
||||
if isinstance(peer, raw.types.PeerChat) or isinstance(peer, raw.types.RequestedPeerChat):
|
||||
return peer.chat_id
|
||||
|
||||
if isinstance(peer, raw.types.PeerChannel):
|
||||
if isinstance(peer, raw.types.PeerChannel) or isinstance(peer, raw.types.RequestedPeerChannel):
|
||||
return peer.channel_id
|
||||
|
||||
return None
|
||||
|
|
|
|||
Loading…
Reference in a new issue