Support Business Message Deletion in telegram.Message.delete() (#4869)

Co-authored-by: aelkheir <90580077+aelkheir@users.noreply.github.com>
This commit is contained in:
Jãїиãм
2025-09-08 00:20:27 +05:30
committed by GitHub
parent 9205d01edc
commit 0790bd8364
3 changed files with 73 additions and 14 deletions
@@ -0,0 +1,5 @@
features = "Extend :meth:`telegram.Message.delete` shortcut to support business message deletion"
[[pull_requests]]
uid = "4869"
author_uid = "jainamoswal"
closes_threads = ["4867"]
+27 -2
View File
@@ -4320,18 +4320,43 @@ class Message(MaybeInaccessibleMessage):
pool_timeout: ODVInput[float] = DEFAULT_NONE,
api_kwargs: Optional[JSONDict] = None,
) -> bool:
"""Shortcut for::
"""Shortcut for either::
await bot.delete_message(
chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)
For the documentation of the arguments, please see :meth:`telegram.Bot.delete_message`.
or::
await bot.delete_business_messages(
business_connection_id=self.business_connection_id,
message_ids=[self.message_id],
*args,
**kwargs,
)
For the documentation of the arguments, please see
:meth:`telegram.Bot.delete_message` and :meth:`telegram.Bot.delete_business_messages`.
.. versionchanged:: NEXT.VERSION
Calls either :meth:`telegram.Bot.delete_message`
or :meth:`telegram.Bot.delete_business_messages` based
on :attr:`business_connection_id`.
Returns:
:obj:`bool`: On success, :obj:`True` is returned.
"""
if self.business_connection_id:
return await self.get_bot().delete_business_messages(
business_connection_id=self.business_connection_id,
message_ids=[self.message_id],
read_timeout=read_timeout,
write_timeout=write_timeout,
connect_timeout=connect_timeout,
pool_timeout=pool_timeout,
api_kwargs=api_kwargs,
)
return await self.get_bot().delete_message(
chat_id=self.chat_id,
message_id=self.message_id,
+41 -12
View File
@@ -18,7 +18,7 @@
# along with this program. If not, see [http://www.gnu.org/licenses/].
import datetime as dtm
from copy import copy
from copy import copy, deepcopy
import pytest
@@ -2774,20 +2774,49 @@ class TestMessageWithoutRequest(MessageTestBase):
monkeypatch.setattr(message.get_bot(), "get_game_high_scores", make_assertion)
assert await message.get_game_high_scores(user_id=1)
async def test_delete(self, monkeypatch, message):
@pytest.mark.parametrize("business_connection_id", [None, "123456789"])
async def test_delete(self, monkeypatch, message, business_connection_id):
message = deepcopy(message)
message.business_connection_id = business_connection_id
async def make_assertion(*_, **kwargs):
chat_id = kwargs["chat_id"] == message.chat_id
message_id = kwargs["message_id"] == message.message_id
return chat_id and message_id
url: str = kwargs.get("url")
data = kwargs.get("request_data").parameters
assert check_shortcut_signature(
Message.delete, Bot.delete_message, ["chat_id", "message_id"], []
)
assert await check_shortcut_call(message.delete, message.get_bot(), "delete_message")
assert await check_defaults_handling(message.delete, message.get_bot())
if not message.business_connection_id:
endpoint = url.endswith("deleteMessage")
chat_id = data.get("chat_id") == message.chat_id
message_id = data.get("message_id") == message.message_id
return endpoint and chat_id and message_id
monkeypatch.setattr(message.get_bot(), "delete_message", make_assertion)
assert await message.delete()
endpoint = url.endswith("deleteBusinessMessages")
business_connection_id = (
data.get("business_connection_id") == message.business_connection_id
)
message_ids = data.get("message_ids") == [message.message_id]
return business_connection_id and message_ids and endpoint
monkeypatch.setattr(message.get_bot().request, "post", make_assertion)
if not message.business_connection_id:
assert check_shortcut_signature(
Message.delete, Bot.delete_message, ["chat_id", "message_id"], []
)
assert await check_shortcut_call(message.delete, message.get_bot(), "delete_message")
assert await check_defaults_handling(message.delete, message.get_bot())
assert await message.delete()
else:
assert check_shortcut_signature(
Message.delete,
Bot.delete_business_messages,
["business_connection_id", "message_ids"],
[],
)
assert await check_shortcut_call(
message.delete, message.get_bot(), "delete_business_messages"
)
assert await check_defaults_handling(message.delete, message.get_bot())
assert await message.delete()
async def test_stop_poll(self, monkeypatch, message):
async def make_assertion(*_, **kwargs):