Skip to content

Commit 9002fa8

Browse files
committed
Added Filters.argument_equals
1 parent 8690ba2 commit 9002fa8

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

telegram/ext/filters.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,34 @@ def filter(self, message):
171171
command = _Command()
172172
""":obj:`Filter`: Messages starting with ``/``."""
173173

174+
175+
class argument_equals(BaseFilter):
176+
"""
177+
Filters /commands with a specific argument value. Useful for deep-linking.
178+
179+
Examples:
180+
Example ``CommandHandler("start", deep_linked_callback,
181+
Filters.argument_equals('parameter'))``
182+
183+
Args:
184+
argument(:obj:`str`): String to compare with command arguments
185+
186+
"""
187+
""":obj:`Filter`:
188+
"""
189+
190+
def __init__(self, argument):
191+
self.argument = argument
192+
self.name = 'Filters.argument_equals({})'.format(self.argument)
193+
194+
def filter(self, message):
195+
if ' ' in message.text:
196+
return bool(message.text and message.text.startswith('/') and
197+
message.text.split(' ', 1)[1] == self.argument)
198+
else:
199+
return False
200+
201+
174202
class _Reply(BaseFilter):
175203
name = 'Filters.reply'
176204

tests/test_filters.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,22 @@ def test_filters_command(self, message):
5151
message.text = '/test'
5252
assert Filters.command(message)
5353

54+
def test_filters_argument_equals(self, message):
55+
message.text = 'test'
56+
assert not Filters.argument_equals('abc')(message)
57+
message.text = '/test'
58+
assert not Filters.argument_equals('abc')(message)
59+
message.text = '/test-abc'
60+
assert not Filters.argument_equals('abc')(message)
61+
message.text = '/test abc'
62+
assert Filters.argument_equals('abc')(message)
63+
message.text = '/test abc def'
64+
assert Filters.argument_equals('abc def')(message)
65+
message.text = '/test abc-def'
66+
assert Filters.argument_equals('abc-def')(message)
67+
message.text = '/test abc/def'
68+
assert Filters.argument_equals('abc/def')(message)
69+
5470
def test_filters_reply(self, message):
5571
another_message = Message(1, User(1, 'TestOther', False), datetime.datetime.now(),
5672
Chat(0, 'private'))

0 commit comments

Comments
 (0)