Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions changes/unreleased/4869.7GK56NC89XswBFUCiWXtqc.toml
Original file line number Diff line number Diff line change
@@ -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"]
29 changes: 27 additions & 2 deletions src/telegram/_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -4320,18 +4320,43 @@ async def delete(
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,
Expand Down
56 changes: 42 additions & 14 deletions tests/test_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -1389,8 +1389,7 @@ def test_compute_quote_position_and_entities_false_index(self, message):
message.text = "AA"
with pytest.raises(
ValueError,
match="You requested the 5-th occurrence of 'A', "
"but this text appears only 2 times.",
match="You requested the 5-th occurrence of 'A', but this text appears only 2 times.",
):
message.compute_quote_position_and_entities("A", 5)

Expand Down Expand Up @@ -2775,20 +2774,49 @@ async def make_assertion(*_, **kwargs):
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

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

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

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())
monkeypatch.setattr(message.get_bot().request, "post", make_assertion)

monkeypatch.setattr(message.get_bot(), "delete_message", make_assertion)
assert await message.delete()
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):
Expand Down
Loading