Skip to content

Commit 915cd64

Browse files
authored
1 parent 56f7d18 commit 915cd64

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

telegram/message.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
from telegram.utils.helpers import escape_html, escape_markdown, to_timestamp, from_timestamp
2828

2929

30+
_UNDEFINED = object()
31+
32+
3033
class Message(TelegramObject):
3134
"""
3235
This object represents a message.
@@ -170,6 +173,7 @@ class Message(TelegramObject):
170173
successful_payment (:class:`telegram.SuccessfulPayment`, optional): Message is a service
171174
message about a successful payment, information about the payment.
172175
"""
176+
_effective_attachment = _UNDEFINED
173177

174178
def __init__(self,
175179
message_id,
@@ -301,6 +305,39 @@ def de_json(cls, data, bot):
301305

302306
return cls(bot=bot, **data)
303307

308+
@property
309+
def effective_attachment(self):
310+
"""
311+
:class:`telegram.Audio`
312+
or :class:`telegram.Contact`
313+
or :class:`telegram.Document`
314+
or :class:`telegram.Game`
315+
or :class:`telegram.Invoice`
316+
or :class:`telegram.Location`
317+
or List[:class:`telegram.PhotoSize`]
318+
or :class:`telegram.Sticker`
319+
or :class:`telegram.SuccessfulPayment`
320+
or :class:`telegram.Venue`
321+
or :class:`telegram.Video`
322+
or :class:`telegram.VideoNote`
323+
or :class:`telegram.Voice`: The attachment that this message was sent with. May be
324+
``None`` if no attachment was sent.
325+
326+
"""
327+
if self._effective_attachment is not _UNDEFINED:
328+
return self._effective_attachment
329+
330+
for i in (self.audio, self.game, self.document, self.photo, self.sticker,
331+
self.video, self.voice, self.video_note, self.contact, self.location,
332+
self.venue, self.invoice, self.successful_payment):
333+
if i is not None:
334+
self._effective_attachment = i
335+
break
336+
else:
337+
self._effective_attachment = None
338+
339+
return self._effective_attachment
340+
304341
def __getitem__(self, item):
305342
if item in self.__dict__.keys():
306343
return self.__dict__[item]

tests/test_message.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,18 @@ def test_equality(self):
205205
self.assertNotEqual(a, e)
206206
self.assertNotEqual(hash(a), hash(e))
207207

208+
def test_effective_attachment(self):
209+
for i in ('audio', 'game', 'document', 'photo', 'sticker', 'video', 'voice', 'video_note',
210+
'contact', 'location', 'venue', 'invoice', 'invoice', 'successful_payment'):
211+
dummy = object()
212+
kwargs = {i: dummy}
213+
msg = telegram.Message(1, telegram.User(1, ""), None, None, **kwargs)
214+
self.assertIs(msg.effective_attachment, dummy,
215+
'invalid {} effective attachment'.format(i))
216+
217+
msg = telegram.Message(1, telegram.User(1, ""), None, None)
218+
self.assertIsNone(msg.effective_attachment)
219+
208220

209221
if __name__ == '__main__':
210222
unittest.main()

0 commit comments

Comments
 (0)