php-telegram-bot / laravel

Laravel package for PHP Telegram Bot Library
Other
168 stars 50 forks source link

Example of working Laravel #3

Closed ranrinc closed 3 years ago

ranrinc commented 6 years ago

Hi there,

its been a while and there are no example on how to used it? Maybe We can get one example of working command? Thanks?

pooriamo commented 5 years ago

@ranrinc Hi

1- After setting up the package, create a controller, for example TelegramController.php in you app/Http/Controllers directory and put this in it:

<?php
namespace App\Http\Controllers;

use PhpTelegramBot\Laravel\PhpTelegramBotContract;

class TelegramController extends Controller {
    public function set(PhpTelegramBotContract $telegram_bot) {
        return $telegram_bot->setWebhook(url(config('phptelegrambot.bot.api_key') . '/hook'));
    }

    public function hook(PhpTelegramBotContract $telegram_bot) {
        $telegram_bot->handle();
    }
}

2- Now you need to write routes for these actions. so open your web.php and write:

$router->group(['prefix' => '[YOUR BOT API KEY]', function() use ($router) {
    $router->get('set', 'TelegramController@set');
    $router->post('hook', 'TelegramController@hook');
});

replace [YOUR BOT API KEY] with the API key that BotFather has given you. This is to make secure the hook url to ensure the incoming requests are from no one but Telegram.

3- Go to https://yoursite.com/[YOUR BOT API KEY]/set You should see the success message.

4- Create a directory for your commands. It can be anywhere, for example app/Telegram/Commands/[CommandNameCommand].php would be nice.

This is an example StartCommand.php:

<?php
namespace Longman\TelegramBot\Commands\SystemCommands;

use Longman\TelegramBot\Commands\SystemCommand;
use Longman\TelegramBot\Request;

class StartCommand extends SystemCommand {
    protected $name = 'start';
    protected $usage = '/start';

    public function execute()
    {
        $message = $this->getMessage();

            $chat_id = $message->getChat()->getId();
            $text    = 'Hi! Welcome to my bot!';

            $data = [
                    'chat_id' => $chat_id,
                    'text'    => $text,
            ];

            return Request::sendMessage($data);
    }
}

5- The last thing you need to do is to add your custom commands directory to the bot's config. so open config/phptelegrambot.php and add the commands directory to the array:

...
'commands' => [
        'before'  => true,
        'paths'   => [
            base_path('/app/Telegram/Commands')
        ],
        'configs' => [
            // Custom commands configs
        ],
],
...

That's it all.

ranrinc commented 5 years ago

@pooriamo yeah... thank you so much.. finally someone explain.

akalongman commented 5 years ago

@pooriamo thank you for the given example. Could you please send PR and add some examples in EXAMPLES.md or somewhere?

akalongman commented 4 years ago

@pooriamo

BigXia commented 4 years ago

@ranrinc Hi

1- After setting up the package, create a controller, for example TelegramController.php in you app/Http/Controllers directory and put this in it:

<?php
namespace App\Http\Controllers;

use PhpTelegramBot\Laravel\PhpTelegramBotContract;

class TelegramController extends Controller {
    public function set(PhpTelegramBotContract $telegram_bot) {
        return $telegram_bot->setWebhook(url(config('phptelegrambot.bot.api_key') . '/hook'));
    }

    public function hook(PhpTelegramBotContract $telegram_bot) {
        $telegram_bot->handle();
    }
}

2- Now you need to write routes for these actions. so open your web.php and write:

$router->group(['prefix' => '[YOUR BOT API KEY]', function() use ($router) {
    $router->get('set', 'TelegramController@set');
    $router->post('hook', 'TelegramController@hook');
});

replace [YOUR BOT API KEY] with the API key that BotFather has given you. This is to make secure the hook url to ensure the incoming requests are from no one but Telegram.

3- Go to https://yoursite.com/[YOUR BOT API KEY]/set You should see the success message.

4- Create a directory for your commands. It can be anywhere, for example app/Telegram/Commands/[CommandNameCommand].php would be nice.

This is an example StartCommand.php:

<?php
namespace Longman\TelegramBot\Commands\SystemCommands;

use Longman\TelegramBot\Commands\SystemCommand;
use Longman\TelegramBot\Request;

class StartCommand extends SystemCommand {
  protected $name = 'start';
  protected $usage = '/start';

  public function execute()
  {
      $message = $this->getMessage();

          $chat_id = $message->getChat()->getId();
          $text    = 'Hi! Welcome to my bot!';

          $data = [
                  'chat_id' => $chat_id,
                  'text'    => $text,
          ];

          return Request::sendMessage($data);
  }
}

5- The last thing you need to do is to add your custom commands directory to the bot's config. so open config/phptelegrambot.php and add the commands directory to the array:

...
'commands' => [
        'before'  => true,
        'paths'   => [
            base_path('/app/Telegram/Commands')
        ],
        'configs' => [
            // Custom commands configs
        ],
],
...

That's it all.

There is a fault, It should be add "/": base_path('/app/Telegram/Commands/') or will do not work.

pooriamo commented 3 years ago

@akalongman I'm sorry I just saw your message. I just created a PR.

noplanman commented 3 years ago

I'll close off here, as there is a wonderful example available now!