1

Тема: Пример реализации бота для приложения NambaOne

Привет всем, немного не по теме нашего портала, но хотел выложить для тех, кому понадобиться.
Пример создания бота для приложения NambaOne.
Без использования автозагрузчика и библиотеки Guzzle.

Базовый класс бота. (файл NambaOneBot.php)

<?php

class NambaOneBot
{
    /**
    * URL основного API.
    * @var String
    */
    protected $api_url = 'https://api.namba1.co';
    
    /**
    * URL API для работы с файлами.
    * @var String
    */
    protected $api_url_files = 'https://files.namba1.co';    
    
    /**
    * Токен выдаваемый в https://dashboard.namba1.co.
    * @var String
    */
    protected $api_token = '';
    
    /**
    * Максимальное время подключения к серверу (сек).
    * @var Integer
    */
    protected $curl_connect_timeout = 5;
    
    /**
    * Максимальное время передачи данных (сек).
    * @var Integer
    */
    protected $curl_timeout = 3;
    
    /**
    * URL Максимальное количество переадресаций.
    * @var Integer
    */
    protected $curl_max_redirs = 10;
    
    /**
    * Включить режим отладки.
    * @var Bool
    */
    protected $debug_enabled = true;
    
    /**
    * Наименование файла журнала отладки.
    * @var String
    */
    protected $debug_file = 'log.html';
    
    /**
    * Конструктор.
    * @param Bool $autoStart - Автозапуск событий.
    */
    public function __construct($autoStart = false)
    {
        if ($autoStart) $this->run();
    }
    
    /**
    * Функция выполняет запрос.
    * @param String $url - Полный URL запроса.
    * @param Object $data - Данные, которые необходимо передать.
    * @return Array - Массив полученных данных.
    */
    protected function request($url, $data)
    {
        $json = json_encode($data);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $this->curl_connect_timeout);
        curl_setopt($curl, CURLOPT_TIMEOUT, $this->curl_timeout);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_MAXREDIRS, $this->curl_max_redirs);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            'POST NambaOneBot HTTP/1.0',
            'Accept: application/json',
            'Content-Type: application/json; charset=UTF-8',
            'X-Namba-Auth-Token: '.$this->api_token]);
        $result = curl_exec($curl);
        curl_close($curl);
        if ($this->debug_enabled)
        {
            file_put_contents($this->debug_file, sprintf('%s<br>%s<br>%s<br><br>', $url, $json, $result), FILE_APPEND | LOCK_EX);
        }
        return json_decode($result);
    }
    
    /**
    * Функция создает новый чат с пользователями.
    * @param Array $members - Массив пользователей.
    * @param String $name - Наименование чата.
    * @param String $image - Картинка чата (токен).
    * @return Array - Массив полученных данных.
    */
    public function chatsCreate($members, $name = '', $image = '')
    {
        return $this->request(sprintf('%s/chats/create', $this->api_url), compact('members', 'name', 'image'));
    }
    
    /**
    * Функция отправляет сообщение в чат.
    * @param Integer $chat_id - Номер чата.
    * @param String $content - Сообщение.
    * @param String $type - Тип сообщения [по умолчанию, текстовое].
    * @return Array - Массив полученных данных.
    */
    public function chatsWrite($chat_id, $content, $type = 'text/plain')
    {
        return $this->request(sprintf('%s/chats/%d/write', $this->api_url, $chat_id), compact('content', 'type'));
    }
    
    /**
    * Событие получения нового сообщения.
    * @param Array $message - Сообщение.
    */
    public function messageNew($message)
    {
        // Переопределите событие в своем классе...
    }
    
    /**
    * Событие при обновлении статуса сообщения (например, пользователь прочел сообщение).
    * @param Array $message - Сообщение.
    */
    public function messageUpdate($message)
    {
        // Переопределите событие в своем классе...
    }
    
    /**
    * Событие при подключении нового пользователя.
    * @param Array $user - Пользователь.
    */
    public function userFollow($user)
    {
        // Переопределите событие в своем классе...
    }
    
    /**
    * Событие при отключении пользователя.
    * @param Array $user - Пользователь.
    */
    public function userUnfollow($user)
    {
        // Переопределите событие в своем классе...
    }
    
    /**
    * Событие при создании нового чата.
    * @param Integer $chat_id - Номер чата.
    * @param Array $user - Пользователь.
    */
    public function chatNew($chat_id, $user)
    {
        // Переопределите событие в своем классе...
    }
    
    /**
    * Обработка сообщений.
    */
    protected function run()
    {
        // Получение POST данных.
        $data = file_get_contents('php://input');
        // Сохранение данных в файл журнала.
        if ($this->debug_enabled)
        {
            file_put_contents($this->debug_file, sprintf('%s<br><br>', $data), FILE_APPEND | LOCK_EX);
        }
        // Выполнение события.
        $json = json_decode($data);
        if (empty($json)) return;
        switch ($json->event)
        {
            case 'message/new':
            $this->messageNew($json->data);
            break;
            case 'message/update':
            $this->messageUpdate($json->data);
            break;
            case 'user/follow':
            $this->userFollow($json->data);
            break;
            case 'user/unfollow':
            $this->userUnfollow($json->data);
            break;
            case 'chat/new':
            $this->chatNew($json->data->chat_id, $json->data->user);
            break;
        }
        // Информируем намбу что все хорошо.
        header('Content-type: application/json');
        echo '{"success":true}';
    }
}
?>

Пример использования. (файл index.php)
Бот Эхо. Приветствует пользователя при подключении и отправляет обратно все полученные сообщения.

<?php

// Пример Эхо бота.

// Подключаем класс.
require_once('NambaOneBot.php');

// Создаем свой класс на основе базового класса.
class EchoBot extends NambaOneBot
{

    // Переопределяем токен на свой.
    protected $api_token = 'Ваш токен';

    // Переопределяем событие нового пользователя.
    public function userFollow($user)
    {
        $json = $this->chatsCreate([$user->id]);
        if ($json && $json->success)
        {
            $this->chatsWrite($json->data->id, 'Welcome, '.$json->data->name);
        }
    }

    // Переопределяем событие нового сообщения.
    public function messageNew($message)
    {
        $this->chatsWrite($message->chat_id, $message->content, $message->type);
    }
    
    // Переопределение события создания нового чата.
    public function chatNew($chat_id, $user)
    {
        $this->chatsWrite($chat_id, 'Welcome back '.$user->name);
    }

}

// Запуск и выполнение бота.
$bot = new EchoBot(true);

?>

2

Re: Пример реализации бота для приложения NambaOne

Есть разные способы получения больших возможностей, с которыми вы можете найти реально эффективный способ по заработку в интернете. Рейтинг российских онлайн казино на сайте https://gsmmobi.ru/ поможет вам разобраться как сегодня можно играть на деньги. В рейтинг онлайн казино России идеально подходит для того, чтобы полноценно получить подробное описание игр на деньги.