fix: CommandStart(deep_link=False) now rejects deep-link arguments (#1790)

Previously the deep_link parameter only had two effective states:
False (default) accepted any /start command regardless of arguments,
and True required arguments to be present.

Change the default to None (accept both, backward compatible) so that
False can mean "reject if deep-link arguments are present", which is
the intuitive expectation when explicitly passing deep_link=False.

Closes #1713

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Temrjan 2026-04-04 03:27:29 +05:00 committed by GitHub
parent d5bd0b98a3
commit 0611d0d953
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 3 deletions

1
CHANGES/1713.bugfix.rst Normal file
View file

@ -0,0 +1 @@
``CommandStart(deep_link=False)`` now correctly rejects messages that contain deep-link arguments. Previously ``deep_link=False`` (the default) did not distinguish between ``/start`` and ``/start <payload>``. The default is changed to ``None`` (accept both) to preserve backward compatibility.

View file

@ -240,7 +240,7 @@ class CommandObject:
class CommandStart(Command): class CommandStart(Command):
def __init__( def __init__(
self, self,
deep_link: bool = False, deep_link: bool | None = None,
deep_link_encoded: bool = False, deep_link_encoded: bool = False,
ignore_case: bool = False, ignore_case: bool = False,
ignore_mention: bool = False, ignore_mention: bool = False,
@ -282,7 +282,12 @@ class CommandStart(Command):
return command # noqa: RET504 return command # noqa: RET504
def validate_deeplink(self, command: CommandObject) -> CommandObject: def validate_deeplink(self, command: CommandObject) -> CommandObject:
if not self.deep_link: if self.deep_link is None:
return command
if self.deep_link is False:
if command.args:
msg = "Deep-link was not expected"
raise CommandException(msg)
return command return command
if not command.args: if not command.args:
msg = "Deep-link was missing" msg = "Deep-link was missing"

View file

@ -85,6 +85,9 @@ class TestCommandFilter:
False, False,
], ],
["/start test", CommandStart(), True], ["/start test", CommandStart(), True],
["/start", CommandStart(), True],
["/start", CommandStart(deep_link=False), True],
["/start test", CommandStart(deep_link=False), False],
["/start", CommandStart(deep_link=True), False], ["/start", CommandStart(deep_link=True), False],
["/start test", CommandStart(deep_link=True), True], ["/start test", CommandStart(deep_link=True), True],
["/start test", CommandStart(deep_link=True, deep_link_encoded=True), False], ["/start test", CommandStart(deep_link=True, deep_link_encoded=True), False],
@ -175,7 +178,7 @@ class TestCommandStart:
cmd = CommandStart() cmd = CommandStart()
assert ( assert (
str(cmd) str(cmd)
== "CommandStart(ignore_case=False, ignore_mention=False, deep_link=False, deep_link_encoded=False)" == "CommandStart(ignore_case=False, ignore_mention=False, deep_link_encoded=False)"
) )