【问题标题】:triggerCommand with argument in irazasyed/telegram-bot-sdkirazasyed/telegram-bot-sdk 中带有参数的 triggerCommand
【发布时间】:2021-10-06 18:52:59
【问题描述】:

我想用另一个命令的参数触发一个命令,也想用一个控制器的参数触发一个命令,所以我的命令命令解决方案是:

class ChangeLanguageCommand extends Command
{
    /**
     * @var string Command Name
     */
    protected $name = 'change_language';

    /**
     * @var string Command Description
     */
    protected $description = 'Change Language,Change language of bot';

    protected $pattern = '{lang}';
    /**
     * {@inheritdoc}
     */
    public function handle()
    {
        if($this->getArguments())
        {
            $args = $this->getArguments();
            if($args['lang'])
                $lang=$args['lang'];
            else
                $lang='fa';
        }
        else
            $lang='fa';

        if($lang=='fa')
        {
            $response=$this->replyWithMessage(['text' => 'زبان ربات تغییر یافت.']);
            $this->triggerCommand('start',$this->getArguments());

        }
        else
        {
            $response=$this->replyWithMessage(['text' => 'Robot language changed.']);
            $this->triggerCommand('start',$this->getArguments());
        }


    }
}

我的控制器命令解决方案是:

class TelegramBotController extends Controller
{
    public function commandHandlerWebHook()
    {
        try
        {
            Telegram::addCommands([
                Telegram\Bot\Commands\HelpCommand::class,
                App\Telegram\Commands\StartCommand::class,
                App\Telegram\Commands\ChangeLanguageCommand::class,
                App\Telegram\Commands\ThingsToSendAdvertCommand::class,
                App\Telegram\Commands\LuggageSpaceAdvertCommand::class,
            ]);
            $commandsHandler = Telegram::commandsHandler(true);
            $update =Telegram::getWebhookUpdate(['timeout' => 120]);
  
                $chat_id = $update["message"]["chat"]["id"];
                $data=$update["message"]["text"];
                switch ($data) {
                    case 'تغییر زبان':
                        $command = "change_language";
                        $arguments =['fa'];
                        $res = Telegram::getCommandBus()->execute($command, $arguments, $commandsHandler);
                        break;
                    case 'Change Language':
                        $command = "change_language";
                        $arguments =['en'];
                        $res = Telegram::getCommandBus()->execute($command, $arguments, $commandsHandler);
                        break;
                    case 'راهنما':
                        $command = "help";
                        $arguments =[];
                        $res = Telegram::getCommandBus()->execute($command, $arguments, $commandsHandler);
                        break;
                    case 'Help':
                        $command = "help";
                        $arguments =[];
                        $res = Telegram::getCommandBus()->execute($command, $arguments, $commandsHandler);
                        break;
      
        }
        catch (\Exception $e)
        {
            dd($e->getMessage());
        }

    }
}

但它不起作用,我没有从机器人那里得到任何答案(机器人返回 200 状态)。 谁能帮帮我?

【问题讨论】:

    标签: laravel telegram-bot


    【解决方案1】:

    在 irazasyed/telegram-bot-sdk 3.4 版中,您应该使用 update 作为第二个参数。

    $update = Telegram::commandsHandler(true);
    //...
    triggerCommand('start', $update)
    //Or
    Telegram::getCommandBus()->execute('start', $update, [])
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 2018-11-30
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2017-12-17
      • 2020-08-14
      相关资源
      最近更新 更多