Skip to content

Commit b5196f0

Browse files
PaulSonOfLarsjh0ker
authored andcommitted
Add a caption_entity filter for filtering caption entities (python-telegram-bot#1068)
* Add a caption_entity filter for filtering caption entities * remove unneeded list comprehensions
1 parent 39c679e commit b5196f0

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

telegram/ext/filters.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,28 @@ def __init__(self, entity_type):
541541
self.name = 'Filters.entity({})'.format(self.entity_type)
542542

543543
def filter(self, message):
544-
return any([entity.type == self.entity_type for entity in message.entities])
544+
return any(entity.type == self.entity_type for entity in message.entities)
545+
546+
class caption_entity(BaseFilter):
547+
"""
548+
Filters media messages to only allow those which have a :class:`telegram.MessageEntity`
549+
where their `type` matches `entity_type`.
550+
551+
Examples:
552+
Example ``MessageHandler(Filters.caption_entity("hashtag"), callback_method)``
553+
554+
Args:
555+
entity_type: Caption Entity type to check for. All types can be found as constants
556+
in :class:`telegram.MessageEntity`.
557+
558+
"""
559+
560+
def __init__(self, entity_type):
561+
self.entity_type = entity_type
562+
self.name = 'Filters.caption_entity({})'.format(self.entity_type)
563+
564+
def filter(self, message):
565+
return any(entity.type == self.entity_type for entity in message.caption_entities)
545566

546567
class _Private(BaseFilter):
547568
name = 'Filters.private'

tests/test_filters.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,21 @@ def test_entities_filter(self, message, message_entity):
310310
second = MessageEntity.de_json(second, None)
311311
message.entities = [message_entity, second]
312312
assert Filters.entity(message_entity.type)(message)
313+
assert not Filters.caption_entity(message_entity.type)(message)
314+
315+
def test_caption_entities_filter(self, message, message_entity):
316+
message.caption_entities = [message_entity]
317+
assert Filters.caption_entity(message_entity.type)(message)
318+
319+
message.caption_entities = []
320+
assert not Filters.caption_entity(MessageEntity.MENTION)(message)
321+
322+
second = message_entity.to_dict()
323+
second['type'] = 'bold'
324+
second = MessageEntity.de_json(second, None)
325+
message.caption_entities = [message_entity, second]
326+
assert Filters.caption_entity(message_entity.type)(message)
327+
assert not Filters.entity(message_entity.type)(message)
313328

314329
def test_private_filter(self, message):
315330
assert Filters.private(message)

0 commit comments

Comments
 (0)