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

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-03-24 13:25:12 +05:00
parent 00c1130938
commit 79f92af746
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):
def __init__(
self,
deep_link: bool = False,
deep_link: bool | None = None,
deep_link_encoded: bool = False,
ignore_case: bool = False,
ignore_mention: bool = False,
@ -282,7 +282,12 @@ class CommandStart(Command):
return command # noqa: RET504
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
if not command.args:
msg = "Deep-link was missing"

View file

@ -85,6 +85,9 @@ class TestCommandFilter:
False,
],
["/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 test", CommandStart(deep_link=True), True],
["/start test", CommandStart(deep_link=True, deep_link_encoded=True), False],
@ -175,7 +178,7 @@ class TestCommandStart:
cmd = CommandStart()
assert (
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)"
)