Add Properties for API Settings of Bot (#3247)

This commit is contained in:
Bibo-Joshi 2022-09-18 15:42:12 +02:00 committed by GitHub
parent 50249206df
commit aed8e68fca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -181,10 +181,10 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
""" """
__slots__ = ( __slots__ = (
"token", "_token",
"base_url", "_base_url",
"base_file_url", "_base_file_url",
"private_key", "_private_key",
"_bot_user", "_bot_user",
"_request", "_request",
"_logger", "_logger",
@ -203,12 +203,12 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
): ):
if not token: if not token:
raise InvalidToken("You must pass the token you received from https://t.me/Botfather!") raise InvalidToken("You must pass the token you received from https://t.me/Botfather!")
self.token = token self._token = token
self.base_url = base_url + self.token self._base_url = base_url + self._token
self.base_file_url = base_file_url + self.token self._base_file_url = base_file_url + self._token
self._bot_user: Optional[User] = None self._bot_user: Optional[User] = None
self.private_key = None self._private_key = None
self._logger = logging.getLogger(__name__) self._logger = logging.getLogger(__name__)
self._initialized = False self._initialized = False
@ -223,10 +223,47 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
"To use Telegram Passports, PTB must be installed via `pip install " "To use Telegram Passports, PTB must be installed via `pip install "
"python-telegram-bot[passport]`." "python-telegram-bot[passport]`."
) )
self.private_key = serialization.load_pem_private_key( self._private_key = serialization.load_pem_private_key(
private_key, password=private_key_password, backend=default_backend() private_key, password=private_key_password, backend=default_backend()
) )
@property
def token(self) -> str:
""":obj:`str`: Bot's unique authentication token.
.. versionadded:: 20.0
"""
return self._token
@property
def base_url(self) -> str:
""":obj:`str`: Telegram Bot API service URL, built from :paramref:`Bot.base_url` and
:paramref:`Bot.token`.
.. versionadded:: 20.0
"""
return self._base_url
@property
def base_file_url(self) -> str:
""":obj:`str`: Telegram Bot API file URL, built from :paramref:`Bot.base_file_url` and
:paramref:`Bot.token`.
.. versionadded:: 20.0
"""
return self._base_file_url
# Proper type hints are difficult because:
# 1. cryptography doesn't have a nice base class, so it would get lengthy
# 2. we can't import cryptography if it's not installed
@property
def private_key(self) -> Optional[Any]:
"""Deserialized private key for decryption of telegram passport data.
.. versionadded:: 20.0
"""
return self._private_key
def __reduce__(self) -> NoReturn: def __reduce__(self) -> NoReturn:
"""Called by pickle.dumps(). Serializing bots is unadvisable, so we forbid pickling.""" """Called by pickle.dumps(). Serializing bots is unadvisable, so we forbid pickling."""
raise pickle.PicklingError("Bot objects cannot be pickled!") raise pickle.PicklingError("Bot objects cannot be pickled!")
@ -332,7 +369,7 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
request = self._request[1] request = self._request[1]
return await request.post( return await request.post(
url=f"{self.base_url}/{endpoint}", url=f"{self._base_url}/{endpoint}",
request_data=request_data, request_data=request_data,
read_timeout=read_timeout, read_timeout=read_timeout,
write_timeout=write_timeout, write_timeout=write_timeout,
@ -402,7 +439,7 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
try: try:
await self.get_me() await self.get_me()
except InvalidToken as exc: except InvalidToken as exc:
raise InvalidToken(f"The token `{self.token}` was rejected by the server.") from exc raise InvalidToken(f"The token `{self._token}` was rejected by the server.") from exc
self._initialized = True self._initialized = True
async def shutdown(self) -> None: async def shutdown(self) -> None:
@ -3070,7 +3107,7 @@ class Bot(TelegramObject, AbstractAsyncContextManager):
): ):
result[ # type: ignore[index] result[ # type: ignore[index]
"file_path" "file_path"
] = f"{self.base_file_url}/{result['file_path']}" # type: ignore[index] ] = f"{self._base_file_url}/{result['file_path']}" # type: ignore[index]
return File.de_json(result, self) # type: ignore[return-value, arg-type] return File.de_json(result, self) # type: ignore[return-value, arg-type]