1. Go to this page and download the library: Download m-m/u_bot library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
m-m / u_bot example snippets
$config = [
/**
* @var string: Директория, в которую будут записываться логи и ошибки выполнения
*/
'error_log' => __DIR__ . '/../../logs',
/**
* @var string: Директория, в которую будут записываться json файлы
*/
'json' => __DIR__ . '/../../json',
/**
* @var array: Настройка подключения к базе данных. Актуально если mmApp::$isSaveDb = true
*/
'db' => [
'host' => null, // Адрес расположения базы данных (localhost, https://example.com)
'user' => null, // Имя пользователя
'pass' => null, // Пароль пользователя
'database' => null, // Название базы данных
]
];
$bot->initConfig($config);
$param = [
/**
* @var string|null: Viber токен для отправки сообщений, загрузки изображений и звуков
*/
'viber_token' => null,
/**
* @var array|string|null: Имя пользователя, от которого будет отправляться сообщение
*/
'viber_sender' => null,
/**
* @var string|null: Telegram токен для отправки сообщений, загрузки изображений и звуков
*/
'telegram_token' => null,
/**
* @var string|null: Версия Vk api. По умолчанию используется v5.103
*/
'vk_api_version' => null,
/**
* @var string|null: Код для проверки корректности Vk бота. Необходим для подтверждения бота.
*/
'vk_confirmation_token' => null,
/**
* @var string|null: Vk Токен для отправки сообщений, загрузки изображений и звуков
*/
'vk_token' => null,
/**
* @var string|null: Яндекс Токен для загрузки изображений и звуков в навыке
*/
'yandex_token' => null,
/**
* @var bool: Актуально для Алисы!
* Использовать в качестве идентификатора пользователя Id в поле session->user.
* Если true, то для всех пользователей, которые авторизованы в Яндекс будет использоваться один токен, а не разный.
*/
'y_isAuthUser' => false,
/**
* @var string|null: Идентификатор приложения.
* Заполняется автоматически.
*/
'app_id' => null,
/**
* @var string|null: Идентификатор пользователя.
* Заполняется автоматически.
*/
'user_id' => null,
/**
* @var string: Текст приветствия
*/
'welcome_text' => 'Текст приветствия',
/**
* @var string: Текст помощи
*/
'help_text' => 'Текст помощи',
/**
* @var array: Обрабатываемые команды.
* - string name: Название команды. Используется для идентификации команд
* - $var array slots: Какие слова активируют команду. (Можно использовать регулярные выражения если установлено свойство is_pattern)
* - $var bool is_pattern: Использовать регулярное выражение или нет. По умолчанию false
*
* Пример intent с регулярным выражением:
* [
* 'name' => 'regex',
* 'slots' => [
* '\b{_value_}\b', // Поиск точного совпадения. Например, если _value_ = 'привет', поиск будет осуществляться по точному совпадению. Слово "приветствую" в данном случае не будет считаться как точка срабатывания
* '\b{_value_}[^\s]+\b', // Поиск по точному началу. При данной опции слово "приветствую" станет точкой срабатывания
* '(\b{_value_}(|[^\s]+)\b)', // Поиск по точному началу или точному совпадению. (Используется по умолчанию)
* '\b(\d{3})\b', // Поиск всех чисел от 100 до 999.
* '{_value_} \d {_value_}', // Поиск по определенному условию. Например регулярное "завтра в \d концерт", тогда точкой срабатывания станет пользовательский текст, в котором есть вхождение что и в регулярном выражении, где "\d" это любое число.
* '{_value_}', // Поиск любого похожего текста. Похоже на strpos()
* '...' // Поддерживаются любые регулярные выражения. Перед использованием стоит убедиться в их корректности на сайте: (https://regex101.com/)
* ],
* 'is_pattern' => true
* ]
*/
'intents' => [
[
'name' => WELCOME_INTENT_NAME, // Название команды приветствия
'slots' => [ // Слова, на которые будет срабатывать приветствие
'привет',
'здравст'
]
],
[
'name' => HELP_INTENT_NAME, // Название команды помощи
'slots' => [ // Слова, на которые будет срабатывать помощь
'помощ',
'что ты умеешь'
]
],
]
];
$bot->initParams($param);
/**
* Класс, содержащий логику приложения.
* Обязательно должен быть унаследован от класса BotController!
*/
class ExampleController extends MM\bot\controller\BotController
{
/**
* Метод, отвечающий за обработку пользовательских команд
*/
public function action($intentName): void
{
/**
* Какая-то логика приложения
* ...
*/
}
}
use MM\bot\components\button\Buttons;
use MM\bot\controller\BotController;
use MM\bot\core\mmApp;
use MM\bot\core\types\TemplateTypeModel;
del
{
/**
* Инициализация параметров
*
* @param null|string $content
* @param BotController $controller
* @return bool
* @see TemplateTypeModel::init() Смотри тут
*/
public function init(?string $content, BotController &$controller): bool
{
if ($content) {
$content = json_decode($content, true);
$this->controller = &$controller;
$this->controller->requestObject = $content;
/**
* Инициализация основных параметров приложения
*/
$this->controller->userCommand = $content['data']['text'];
$this->controller->originalUserCommand = $content['data']['text'];
$this->controller->userId = 'Идентификатор пользователя. Берется из $content';
mmApp::$params['user_id'] = $this->controller->userId;
return true;
} else {
$this->error = 'UserApp:init(): Отправлен пустой запрос!';
}
return false;
}
/**
* Отправка ответа пользователю
*
* @return string
* @see TemplateTypeModel::getContext() Смотри тут
*/
public function getContext(): string
{
// Проверяем отправлять ответ пользователю или нет
if ($this->controller->isSend) {
/**
* Отправляем ответ в нужном формате
*/
$buttonClass = new UserButton();// Класс отвечающий за отображение кнопок. Должен быть унаследован от TemplateButtonTypes
/*
* Получение кнопок
*/
$buttons = $this->controller->buttons->getButtons(Buttons::T_USER_APP_BUTTONS, $buttonClass);
$cardClass = new UserCard();// Класс отвечающий за отображение карточек. Должен быть унаследован от TemplateCardTypes
/*
* Получить информацию о карточке
*/
$cards = $this->controller->card->getCards($cardClass);
$soundClass = new UserSound();// Класс отвечающий за отображение звуков. Должен быть унаследован от TemplateSoundTypes
/*
* Получить все звуки
*/
$sounds = $this->controller->sound->getSounds('', $soundClass);
}
return 'ok';
}
}
use MM\bot\components\button\types\TemplateButtonTypes;
class UserButton extends TemplateButtonTypes
{
/**
* Получение массив с кнопками для ответа пользователю
*
* @return array
*/
public function getButtons(): array
{
$objects = [];
foreach ($this->buttons as $button) {
/*
* Заполняем массив $object нужными данными
*/
}
return $objects;
}
}
use MM\bot\components\button\Buttons;
use MM\bot\components\card\types\TemplateCardTypes;
я отображения карточки/изображения
*
* @param bool $isOne True, если отобразить только 1 картинку.
* @return array
*/
public function getCard(bool $isOne): array
{
$object = [];
$countImage = count($this->images);
if ($countImage > 7) {
$countImage = 7;
}
$userButton = new UserButton();
if ($countImage) {
if ($countImage === 1 || $isOne) {
if (!$this->images[0]->imageToken) {
if ($this->images[0]->imageDir) {
$this->images[0]->imageToken = $this->images[0]->imageDir;
}
}
if ($this->images[0]->imageToken) {
/*
* Заполняем $object необходимыми данными
*/
// Получаем возможные кнопки у карточки
$btn = $this->images[0]->button->getButtons(Buttons::T_USER_APP_BUTTONS, $userButton);
if ($btn) {
// Добавляем кнопки к карточке
$object = array_merge($object, $btn[0]);
}
}
} else {
foreach ($this->images as $image) {
if (!$image->imageToken) {
if ($image->imageDir) {
$image->imageToken = $image->imageDir;
}
}
$element = [];
/*
* Заполняем $element необходимыми данными
*/
// Получаем возможные кнопки у карточки
$btn = $image->button->getButtons(Buttons::T_USER_APP_BUTTONS, $userButton);
if ($btn) {
// Добавляем кнопки к карточке
$object = array_merge($object, $btn[0]);
}
$object[] = $element;
}
}
}
return $object;
}
}
use MM\bot\api\YandexSpeechKit;
use MM\bot\components\sound\types\TemplateSoundTypes;
use MM\bot\components\standard\Text;
class UserSound extends TemplateSoundTypes
{
/**
* Возвращаем массив с воспроизводимыми звуками.
* В случае если передается параметр text, то можно отправить запрос в Yandex SpeechKit, для преобразования текста в голос
*
* @param array $sounds Массив звуков
* @param string $text Исходный текст
* @return array
*/
public function getSounds($sounds, $text = ''): array
{
if ($sounds && is_array($sounds)) {
foreach ($sounds as $sound) {
if (is_array($sound)) {
if (isset($sound['sounds'], $sound['key'])) {
$sText = Text::getText($sound['sounds']);
/*
* Сохраняем данные в массив, либо отправляем данные через запрос
*/
}
}
}
}
/*
* если есть необходимость для прочтения текста
*/
if ($text) {
$speechKit = new YandexSpeechKit();
$content = $speechKit->getTts($text);
if ($content) {
/*
* Сохраняем данные в массив, либо отправляем данные через запрос.
* п.с. В $content находится содержимое файла!
*/
}
}
return [];
}
}