X Tutup
Skip to content

Commit f3b75d9

Browse files
evgfilim1jh0ker
authored andcommitted
Implemented undocumented 'deleteMessage' method (python-telegram-bot#602)
* Implemented `Bot.delete_message()` and `Message.delete()` methods * Added tests for `Bot.delete_message()` and `Messsage.delete()` * Added myself to `AUTHORS.rst` * Using `assertRaisesRegexp` instead of `assertRaisesRegex` in tests Now tests can run on Python 2.7 without raising 'AttributeError' * Fix docstring Added a warning to the docstring describing that this method is undocumented and not guaranteed to work
1 parent 36b98b0 commit f3b75d9

File tree

5 files changed

+88
-0
lines changed

5 files changed

+88
-0
lines changed

AUTHORS.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ The following wonderful people contributed directly or indirectly to this projec
2424
- `Eli Gao <https://github.com/eligao>`_
2525
- `ErgoZ Riftbit Vaper <https://github.com/ergoz>`_
2626
- `Eugene Lisitsky <https://github.com/lisitsky>`_
27+
- `evgfilim1 <https://github.com/evgfilim1>`_
2728
- `franciscod <https://github.com/franciscod>`_
2829
- `Hugo Damer <https://github.com/HakimusGIT>`_
2930
- `Jacob Bom <https://github.com/bomjacob>`_

telegram/bot.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,34 @@ def send_message(self,
241241

242242
return url, data
243243

244+
@log
245+
@message
246+
def delete_message(self, chat_id, message_id):
247+
"""Use this method to delete messages which were sent not later than 48 hours ago.
248+
249+
Args:
250+
chat_id (str): Unique identifier for the target chat or
251+
username of the target channel (in the format
252+
@channelusername).
253+
message_id (int): Unique message identifier.
254+
255+
Note:
256+
This method is not documented, so it's not guaranteed to work. Also, its behaviour can
257+
be changed at any time.
258+
259+
Returns:
260+
bool: On success, `True` is returned.
261+
262+
Raises:
263+
:class:`telegram.TelegramError`
264+
265+
"""
266+
url = '{0}/deleteMessage'.format(self.base_url)
267+
268+
data = {'chat_id': chat_id, 'message_id': message_id}
269+
270+
return url, data
271+
244272
@log
245273
@message
246274
def forward_message(self,
@@ -1739,6 +1767,7 @@ def __reduce__(self):
17391767
# camelCase aliases
17401768
getMe = get_me
17411769
sendMessage = send_message
1770+
deleteMessage = delete_message
17421771
forwardMessage = forward_message
17431772
sendPhoto = send_photo
17441773
sendAudio = send_audio

telegram/message.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,25 @@ def edit_reply_markup(self, *args, **kwargs):
540540
return self.bot.edit_message_reply_markup(
541541
chat_id=self.chat_id, message_id=self.message_id, *args, **kwargs)
542542

543+
def delete(self, *args, **kwargs):
544+
"""
545+
Shortcut for
546+
547+
>>> bot.delete_message(chat_id=message.chat_id,
548+
... message_id=message.message_id,
549+
... *args, **kwargs)
550+
551+
Note:
552+
This method is not documented, so it's not guaranteed to work. Also, its behaviour can
553+
be changed at any time.
554+
555+
Returns:
556+
bool: On success, `True` is returned.
557+
558+
"""
559+
return self.bot.delete_message(
560+
chat_id=self.chat_id, message_id=self.message_id, *args, **kwargs)
561+
543562
def parse_entity(self, entity):
544563
"""
545564
Returns the text from a given :class:`telegram.MessageEntity`.

tests/test_bot.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,25 @@ def test_sendMessage_no_web_page_preview(self):
8282
self.assertTrue(self.is_json(message.to_json()))
8383
self.assertEqual(message.text, u'Моё судно на воздушной подушке полно угрей')
8484

85+
@flaky(3, 1)
86+
@timeout(10)
87+
def test_deleteMessage(self):
88+
message = self._bot.send_message(
89+
chat_id=self._chat_id, text='This message will be deleted')
90+
91+
self.assertTrue(
92+
self._bot.delete_message(
93+
chat_id=self._chat_id, message_id=message.message_id))
94+
95+
@flaky(3, 1)
96+
@timeout(10)
97+
def test_deleteMessage_old_message(self):
98+
with self.assertRaisesRegexp(telegram.TelegramError, "can't be deleted"):
99+
# NOTE: This behaviour can be changed in future because `deleteMessage` method is not
100+
# documented in Bot API reference now.
101+
# Considering that the first message is old enough
102+
self._bot.delete_message(chat_id=self._chat_id, message_id=1)
103+
85104
@flaky(3, 1)
86105
@timeout(10)
87106
def testGetUpdates(self):

tests/test_message.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,26 @@ def test_edit_text(self):
136136
self.assertTrue(self.is_json(message.to_json()))
137137
self.assertEqual(message.text, 'Testing class method')
138138

139+
@flaky(3, 1)
140+
def test_delete1(self):
141+
"""Test for Message.delete"""
142+
message = self._bot.send_message(
143+
chat_id=self._chat_id, text='This message will be deleted')
144+
145+
self.assertTrue(message.delete())
146+
147+
@flaky(3, 1)
148+
def test_delete2(self):
149+
"""Another test for Message.delete"""
150+
message = self._bot.send_message(
151+
chat_id=self._chat_id,
152+
text='This ^ message will not be deleted',
153+
reply_to_message_id=1)
154+
155+
with self.assertRaisesRegexp(telegram.TelegramError, "can't be deleted"):
156+
# NOTE: This behaviour can be changed in future. See `tests/test_bot.py` for more info
157+
message.reply_to_message.delete()
158+
139159

140160
if __name__ == '__main__':
141161
unittest.main()

0 commit comments

Comments
 (0)
X Tutup