FIX: Set correct Api/Bot instance when add/init Commands #984
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There is a public method
\Telegram\Bot\Commands\CommandBus::addCommand($command)
that acceptsclass-string<CommandInterface>
:telegram-bot-sdk/src/Commands/CommandBus.php
Lines 69 to 87 in 9466c47
it calls private
resolveCommand
:telegram-bot-sdk/src/Commands/CommandBus.php
Lines 241 to 261 in 9466c47
that calls weird private
makeCommandObj
:telegram-bot-sdk/src/Commands/CommandBus.php
Lines 292 to 317 in 9466c47
it seems like
makeCommandObj
built to initiate notCommand
instances only, but it initiatesCommand
instances ONLY. But when it initiates then usingnew
keyword or even using DI container, it does not set a custom Api/Bot instance - it always uses default:As result, inside a command
$this->getTelegram()
always returns a default bot instance (what is wrong for multi-bot apps).Extra
makeCommandObj
. It was private, so this is not BC change. Also,resolveCommand
method explicitly returns CommandInterface instances (I've added some type checks and return type).prophesize
to instantiate Commands (prophesize
is deprecated and will be removed in PHPUnit v10)