KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

BOT VK — Использование хранилища (Store) на библиотеке SimpleVK 3.x [Часть 3]

Статьи / PHP

Эта уже третья статья по разбору библиотеки SimpleVK3, в то же время это уже третья статья, посвященная цепочкам сообщений. В первой такой статье в кач-ве хранилища мы использователи базу данных, во второй написали простенький класс для хранения данных в файлах. А поскольку в третьей ветке SimpleVK тоже появилась такая система - будем ковырять и этот вариант.


На сайте было множество уроков по VK API, и в каждой разбиралась настройка сообщества для бота. Думаю, в этот раз сей шаг пропущу и перейду сразу к написанию кода. Внизу на всякий случай будут ссылки на статьи с инструкциями по настройке группы.


Сегодня сделаем опять же пошаговую анкету с несколькими вопросами для пользователей, заставим бота всю эту инфу запоминать и показывать по команде. И начинаем мы с подключения библиотеки и добавления некоторых констант:

<?php

require_once __DIR__ . '/vendor/digitalstars/simplevk/autoload.php'; // Подключение библиотеки


const VK_KEY = '*******************'; // Ключ сообщества
const ACCESS_KEY = '********'; // Строка, которую должен вернуть сервер
const VERSION = '5.131'; // Версия VK API
const ADMIN_ID = ''; // ID своей страницы (для быстрого просмотра ошибок у себя в личке)


Создаём экземпляры классов SimpleVK и Bot:

$vk = \DigitalStars\SimpleVK\SimpleVK::create( VK_KEY, VERSION ) // Экземпляр класса SimpleVK
    ->setConfirm( ACCESS_KEY ) // Подтверждение callback-сервера
    ->setUserLogError( ADMIN_ID ) // Логирование ошибок себе в личку
    ->initUserID( $user_id ); // Инициализация ID страницы написавшего нам пользователя

$bot = \DigitalStars\SimpleVK\Bot::create( $vk ); // Экземпляр класса Bot


Далее загружаем хранилище и получаем статус анкеты с помощью метода get() по ключу status:

$ctx = \DigitalStars\SimpleVK\Store::load( $user_id ); // Загружаем данные из хранилища (для каждого юзера будет создаваться файл по ID его страницы)
$status = $ctx->get( 'status' ); // Получаем статус анкеты юзера из хранилища

Вообще, загрузку хранилища лучше помещать внутри блока обработки команды, чтобы файл в кэше не создавался при любом сообщении от юзера. Но поскольку нам придётся получать неизвестные значения в анкете (имя, возраст, рассказ о себе), то сделаем пока что иначе.


Создадим команду /анкета для старта заполнения, а также воспользуемся методом sset( $key, $value ) для установки статуса 1 в анкете юзера ($key - какой-то любой ключ, $value - значение). В дальнейшем по статусу будем определять, на каком этапе заполнения анкеты находится человек:

$bot->cmd( 'cmd1', '/анкета' )->text( 'Укажите своё имя' )->func( function() use ( $ctx )
{

    $ctx->sset( 'status', 1 ); // Устанавливаем статус 1

} );


По такому же принципу заполняем все остальные поля анкеты (имя, возраст и инфу о юзере), походу дела проверяя статус:

$bot->preg_cmd( 'cmd4', '!(.*)!' )->func( function( $msg, $params ) use ( $ctx, $status ) // Заполнение анкета
{


    switch ( $status )
    {

        case 1:
        {
            $ctx->sset( 'status', 2 ); // Устанавливаем статус 2
            $ctx->sset( 'name', $params[0] ); // Устанавливаем имя

            $msg->text( 'Укажите возраст' ); // Просим пользователя указать возраст


            break;
        }

        case 2:
        {
            $ctx->sset( 'status', 3 ); // Устанавливаем статус 3
            $ctx->sset( 'age', (int)$params[0] ); // Устанавливаем возраст

            $msg->text( 'Расскажите о себе' ); // Просим пользователя рассказать о себе


            break;
        }

        case 3:
        {
            $ctx->sset( 'status', 4 ); // Устанавливаем статус 4
            $ctx->sset( 'about', $params[0] ); // Записываем рассказ пользователя о себе

            $msg->text( "Анкета заполнена. Доступные команды:\n/мояанкета - посмотреть свою анкету\n/удалить - удалить анкету" ); // Говорим, что всё окей, предлагаем на выбор список команд


            break;
        }

    }


} );


Далее реализуем возможность чтения и удаления анкет. С помощью метода get( $key ) по очереди вытащим из кэша все данные пользователя по ключу, запишем всё в переменную $mess и отправим через бота:

$bot->cmd( 'cmd2', '/мояанкета' )->func( function( $msg ) use ( $ctx ) // Команда /мояанкета (для просмотра анкеты)
{

    $mess = "Твоя анкета:\n\n";
    $mess .= "Имя: {$ctx->get( 'name' )}\n";
    $mess .= "Возраст: {$ctx->get( 'age' )}\n";
    $msg->text( $mess .= "О себе: {$ctx->get( 'about' )}" ); // В переменную $mess записали анкету, далее формируем сообщение юзеру

} );


Для удаления анкет будем юзать встроенную в PHP функцию unlink():

$bot->cmd( 'cmd3', '/удалить' )->func( function( $msg ) use ( $user_id ) // Команда /удалить (для удаления анкеты)
{

    unlink( './cache/' . $user_id . '.php' ); // Удаляем файл-хранилище юзера по ID его страницы

    $msg->text( '+' ); // Говорим пользователю, что всё ок

} );


И в конце запускаем бота, используя метод run():

$bot->run(); // Запуск бота


Ну, и смотрим, что получилось 🤗:


store.zip

  • 5id15
  • 22.08.2022
  • 2 447
  • 0
Создаем бота VK на библиотеке SimpleVK 3.x [Часть 1]
Создаем бота VK на библиотеке SimpleVK 3.x [Часть 1]
26-07-2022, 17:01, PHP
Пагинация кнопок для LongPoll-бота ВК — на библиотеке SimpleVK 3.x [Часть 2]
Пагинация кнопок для LongPoll-бота ВК — на библиотеке SimpleVK 3.x [Часть 2]
4-08-2022, 16:43, PHP
Стейты для бота ВК (последовательный ввод step by step)
Стейты для бота ВК (последовательный ввод step by step)
20-07-2022, 20:03, PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
23-06-2022, 16:32, PHP
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Movie

Нет комментариев. Не желаешь оставить первый комментарий?

Перед публикацией, советую ознакомится с правилами!

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
<Script>Alert("hello");</Script>
Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)
Qwertyuiopasdfghjklzxcvbnm 1234567890
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 938
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль