onmotion/yii2-telegram

не работаетют пользовательские команды

Closed this issue · 17 comments

Добрый день, скопировал как в мануале папку в @app/modules/telegram/UserCommands, раскомментировал в конфиге, не работает, изменил путь в конфигах на app\modules\telegram\UserCommands , тоже не работают, тестирую на /weather пишет такой команды нет

/help команда работает?
Вы полностью весь модуль скопировали?
у вас advanced или basic? Посмотрите в приложении как резолвится путь с \Yii::getAlias().

хелп работает но показывается только первоначальные ваши команды их там штуки 4, скопировал как и описано в мануале только папку UserCommands, у меня basic, путь проверю

\Yii::getAlias() все впорядке

Попробуйте поставить точку останова в setWebhook, например

if (!empty(\Yii::$app->modules['telegram']->userCommandsPath)){
                if(!$commandsPath = realpath(\Yii::getAlias(\Yii::$app->modules['telegram']->userCommandsPath))){
                    $commandsPath = realpath(\Yii::getAlias('@app') . \Yii::$app->modules['telegram']->userCommandsPath);
                }
                if(!is_dir($commandsPath)) throw new UserException('dir ' . \Yii::$app->modules['telegram']->userCommandsPath . ' not found!');
            }

и посмотрите Xdebug'ом (ну или var_dump) что там происходит

как надо правильно копировать модуль? может я просто не так скопировал? надо весь модуль целиком копировать в app/modules ?

Сам модуль копировать не нужно, вам нужно лишь указать путь к дополнительным командам. Все команды в модуле приведены для примера. Просто указали путь где модулю искать команды и набросали туда своих команд.

2018-10-29_11-11-33

да все так и сделано, но бот их не видит в упор

realpath(\Yii::getAlias('@app') . \Yii::$app->modules['telegram']->userCommandsPath возращает пустоту вот видимо в чем беда

а если переделать на вот так \Yii::getAlias(\Yii::$app->modules['telegram']->userCommandsPath) то путь верный. баг?

Именно он сначала и проверяется if(!$commandsPath = realpath(\Yii::getAlias(\Yii::$app->modules['telegram']->userCommandsPath))){

ну да, даже изменив путь на /modules/telegram/UserCommands в общем ничего не поменялось, команды юзерские не пашет, хотя модуль папку с ними видит все впорядке

а в каком экшене вообще вызываются команды присланные от бота? чтото не вижу

У вас namespace корректный указан в ваших пользовательских командах? Для вашего пути должен быть modules\telegram\UserCommands;

да вы правы, но этого не было в манах, а так сразу и не додумаешься. все работает спс

пишу
/date Moscow
отвечает
You must specify location in format: /date

каков формат команд?

Команды для примера взяты у Longman. Они на то и пользовательские, потому что пользователь должен писать из сам. Зайдите внутрь посмотрите что в экшне делается. Самая простая команда echo

не было в манах

Добавил