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

Простой игровой бот для ВК, создаем игру для Вконтакте + исходники! | Часть 2

Статьи / PHP


Если Вы новичок, то советуем изучить 1 часть создания игры Вкнонтакте, именно с конца той статьи мы начинаем делать обновление для нашего бота, погнали!


В прошлой статье мы сделали регистрацию, кнопку бонус и игру "Казино"


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


Начем с простого, это личный кабинет. Открываем наш исходный код и начинаем писать:


Находим строчку

$bonus = $vk->buttonText('⏰ Бонус!', 'green', ['command' => 'bonus']);


и добавляем новую кнопку:


$profile = $vk->buttonText('📜 Профиль', 'blue', ['command' => 'profile']);


Именно так создаются кнопки, о них на нашем сайте уже было написано несколько статей


Теперь когда кнопка наша создана, добавим ее к общим кнопкам, пока она у нас была одна - Бонус


Найти:

 $vk->sendButton($peer_id, "Приветствую  тебя, @id$id ($userinfo[first_name] $userinfo[last_name]), ты теперь один из нас, вступай в ряды мощных панамеровцев!", [ [$bonus]]);

 Заменить:

 $vk->sendButton($peer_id, "Приветствую  тебя, @id$id ($userinfo[first_name] $userinfo[last_name]), ты теперь один из нас, вступай в ряды мощных панамеровцев!", [[$profile], [$bonus]]);


Найти:

 if ($cmd[0] == 'казино'){ // Первая команда

Сверху добавим новую команду:

    if ($cmd[0] == 'меню'){
        $vk->sendButton($peer_id, "📋Список команд и кнопок:\nКазино - Игра в казино \n", [[$profile], [$bonus]]);
    }


Проверим?


Кнопка появилась, но она не работает, давайте сделаем на нее нужные действия:


Находим наш switch ($payload)


        case 'profile':
            $user_id = $id_reg_check['id'];
            $user_nick =  $id_reg_check['nick'];
            $user_balance = $id_reg_check['balance'];
            $user_reg = date("d.m.y H:i:s", $id_reg_check['time']);

            $vk->sendMessage($peer_id,"$userinfo[first_name] $userinfo[last_name], Ваш игровой профиль:\n🆔 ID: $user_id \n🎫 Ник: $user_nick\n💶 Баланс: $user_balance\n⌚ Аккаунт создан: $user_reg");

            break;


А выше находим и заменяем строку :

$id_reg_check = $db->query('SELECT vk_id FROM users WHERE vk_id = ?i', $id)->fetch_assoc()['vk_id'];
if (!$id_reg_check and $id > 0) { 


На

 $id_reg_check = $db->query('SELECT * FROM users WHERE vk_id = ?i', $id)->fetch_assoc(); // Пытаемся получить пользователя который написал сообщение боту
    if (!$id_reg_check['vk_id'] and $id > 0) {


Таким образом что бы не создавать лишний запрос к MySQL мы получим данные сразу все, проверим пользователя на регистрацию и дальше будем манипулировать этими данными.


Давайте проверим что получилось:


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


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


Добавляем новую кнопку рядом к кнопке Профиль, я думаю вы помните куда мы ее вставляли 

$case = $vk->buttonText('📦 Кейсы', 'blue', ['command' => 'case']);


Добавляем так же кнопку в меню и регистрацию, сделаем ее рядом с профилем, а бонус будет переноситься на новую строку

Найти везде (в 2х местах):

[[$profile], [$bonus]]

Заменить на:

[[$case, $profile], [$bonus]]


Так у нас получится вид кнопок следующий:


Теперь повесим на кнопку функционал, но давайте еще сделаем текстовые команды кнопок, так как еще не во всех клиентах есть кнопки


Выше над командой меню вставим набор кейсов которые эмулируют кнопки:


    // Эмуляция нажатия кнопок с помощью команд
    switch ($cmd[0])
    {
        case 'кейсы':
            $payload = 'case';
            break;
        case 'бонус':
            $payload = 'bonus';
            break;
        case 'профиль':
            $payload = 'profile';
            break;
        
    }

Проверим как это работает:


Работает, небольшой комментарий к коду как это работает:

Все очень просто, в переменной $cmd храниться массив слов написанный через пробел, берем первое слово $cmd[0] (ключи массива начинаются с нуля по умолчанию) и проверяем текст. Если бот получил текст, например, профиль, мы записываем в переменную $payload 

команду соответствующую кнопке - profile, так работает импровизированная эмуляция кнопок, это выглядит более приятнее и читаемо, нежели городить конструкции if else: Пример if ($cmd[0] == 'профиль' or $payload == 'profile') {// code} 



Теперь нужно сделать логику на кейсы, ну и сами кейсы добавить тоже не помешает  🙂 


Сначала давайте предложим пользователю виды кейсов и что он может получить:

Для начала мы добавим только 2 кейса, но в следующей статье с 3 частью мы сделаем динамические кейсы, которые можно будет добавлять и удалять командой


Я покажу реализацию самых простых кейсов, но так как наш бот совсем сырой и в нем очень мало функций, то придется импровизировать и добавить несколько выпадающих товаров фейковыми, но 1 сделаем рабочим и редковыпадаемым, как это обычно и бывает:


Добавляем case 'bonus'


        case 'case': // Пока это все бутафория, потому что у нас нет еще никаких систем куда можно было применять кейсы, но смысл их работы организуем сейчас на будущий удел :)

            $case_1 = "1. 🔹 Обычный 🔹\nЦена: 1кк\n\nМожет выпасть: \n1. Золотой пропуск \n2. 7кк бакосв \n3. Кепка барыги";
            $case_2 = "2. 🔹 Премиум 🔹\nЦена: 5кк\n\nМожет выпасть: \n1. 15кк \n2. Иммунитет \n3. Титановый пропуск";

            $vk->sendMessage($peer_id,"$userinfo[first_name] $userinfo[last_name], список доступных кейсов:\n$case_1\n\n$case_2\n\nЧто бы купить кейс, пришлите команду: Кейс N (Где N номер кейса)");

            break;



Теперь где наши команды добавим команду кейс N


        if ($cmd[0] == 'кейс' and $cmd[1] > 0 and $cmd[1] < 3){ // Для 2х кейсов используем > 0 и < 3 (1,2 будет TRUE все остальное FALSE и команда игнорируется)
            

            if ($cmd[1] == 1) { // Если выбрали 1 кейс

        if($id_reg_check['balance'] >= 1000000){ // Проверка на стоимость


                $db->query("UPDATE users SET balance = balance - ?i WHERE vk_id = ?i", 1000000, $id);

                $rand_case = mt_rand(2,3); // Кол-во призов, но все мы знаем что топ выпадает реже :) давайте что то придумаем
            // Изначально выбираем среди мусора, редкий дроп выпадает отдельно, для него ниже мы пишем отдельный рандом

                $rand_rare = mt_rand(1, 10); // Делаем шанс выпадение редкого дропа 1 из 10, можно поиграться 
                if ($rand_rare == 10){ // Если выпало 10 то выдаем редкий дроп, у нас это под номером 1 (бабло)
                    $rand_case = 1; // Выбираем из массива именно этот дроп с ключем 1
                    $db->query("UPDATE users SET balance = balance + ?i WHERE vk_id = ?i", 7000000, $id); // Выдаем бонус

                }
                $array_prizes = [2 => 'Золотой пропуск', 1 => '7кк', 3 => 'Премиум кейс'];
                $vk->sendMessage($peer_id,"Вам выпадает [".$array_prizes[$rand_case]."]");


            } else {// Если бабок не хватает то
                $vk->sendMessage($peer_id,"✖ Вам не хватает валюты ✖");
            }
            }


            if ($cmd[1] == 2) { // если второй
                if ($id_reg_check['balance'] >= 5000000) { // Проверка на стоимость


                    $db->query("UPDATE users SET balance = balance - ?i WHERE vk_id = ?i", 15000000, $id);

                    $rand_case = mt_rand(2, 3); // Кол-во призов, но все мы знаем что топ выпадает реже :) давайте что то придумаем

                    $rand_rare = mt_rand(1, 10);// Делаем шанс выпадение редкого дропа 1 из 10, можно поиграться 
                    if ($rand_rare == 10) {
                        $rand_case = 1;
                        $db->query("UPDATE users SET balance = balance + ?i WHERE vk_id = ?i", 15000000, $id);

                    }
                    $array_prizes = [2 => '10 обычных кейсов', 1 => '15кк', 3 => 'Автомобиль panamera'];
                    $vk->sendMessage($peer_id, "Вам выпадает [" . $array_prizes[$rand_case] . "]");


                } else { // Если бабок не хватает то
                    $vk->sendMessage($peer_id, "✖ Вам не хватает валюты ✖");
                }

            }


        }


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


Проверим:

Мне безумно повезло, с первого раза выпал редкий дроп, но повезет ли остальным?  😀 В бд новых таблиц и столбцов не появилось, значит в нее ничего не добавляем.


А что вы хотите видеть в боте дальше, решать только вам, ваши предложения можете оставлять в комментариях, а у меня на сегодня все, надеюсь эта статья будет такой же полезной как и предыдущие, обязательно обозначьте это лайком! ❤️


Исходник (при распаковке ошибка? Обновите WINRAR!):


panamera.rar


 Дамп БД

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";



CREATE TABLE `users` (

  `id` int(11) NOT NULL,
  `vk_id` int(11) NOT NULL,
  `nick` varchar(20) NOT NULL,
  `status` int(11) NOT NULL,
  `time` int(11) NOT NULL,
  `balance` int(11) NOT NULL,
  `time_bonus` int(11) NOT NULL



) ENGINE=InnoDB DEFAULT CHARSET=utf8;



ALTER TABLE `users`

  ADD PRIMARY KEY (`id`);



ALTER TABLE `users`

  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;



  • Сергей Котов
  • 21.03.2021
  • 13 207
  • 16
Простой игровой бот для ВК, создаем игру для Вконтакте + исходники! | Часть 1
Простой игровой бот для ВК, создаем игру для Вконтакте + исходники! | Часть 1
19-04-2020, 22:05, PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
2-11-2019, 06:01, Статьи / PHP
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
3-10-2019, 14:27, Статьи / PHP
  1. Гость Александр

    Гость Александр Гость 21 марта 2021 14:46

    в чем проблема заливать архив в .ZIP?..
    1. Ваше высочество

      Ваше высочество Гость 21 марта 2021 14:58

      В чем проблема скачать winrar?
    2. Сергей Котов

      Сергей Котов@Сергей Котов 22 марта 2021 13:05

      RAR сжимает сильнее, нам не принципиально, можем и в ZIP паковать, но как показывает практика почти у всех есть WinRAR
  2. Артем

    Артем Гость 23 марта 2021 04:44

    Спасибо

  3. Гость Александр

    Гость Александр Гость 11 мая 2021 20:15

    Как фотографии крепить? Чтоб у каждого свои были (например профиль). И как добавить донат в бота (к тем же кейсам), и как сделать чтобы после ввода доната у тебя прошло все гуд и зачислилось
    1. Артем Фриз

      Артем Фриз@Артем Фриз 1 сентября 2021 05:34

      Ручками :)
  4. ⁧⁧🌀gsp123

    ⁧⁧🌀gsp123@Семён Мингулов 3 ноября 2021 12:20

    при написании боту полный игнор, хотя установил всё правильно (при переходе на сервер.ру/bot.php пишет "ok")

    заметил что при дампе бд нет баланса, добавил его вручную и также вручную прописал в бд себя как пользователя, реакции 0 - бот как молчал так и молчит

    код точно верный, проверил через несколько сервисов и все говорят что всё норм

    не знаю в чем проблема, подскажите кто пробовал или кто шарит) вк vk.com/gamasekpro
    1. Сергей Котов

      Сергей Котов@Сергей Котов 8 ноября 2021 01:29

      Проверьте что уведомления от ВК отправляются. В настройках сообщества нужно включить на входящие их
      1. ⁧⁧🌀gsp123

        ⁧⁧🌀gsp123@Семён Мингулов 17 ноября 2021 07:24

        Спасибо, уже разобрался сам)

        Пара советов для тех у кого не работает - не ставьте на бесплатные хосты со слабой производительностью! Я изначально тестировал на Beget - на нём бот не работает (при попытке соединиться с сервером будет ошибка Cant connect to server). Такая же ошибка будет при использовании слишком слабого хостинга.

        Также под спойлером правильный дамп бд с полем balance (для новичков и не только)

         Показать / Скрыть текст

        SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

        SET time_zone = "+00:00";


        CREATE TABLE `users` (

          `id` int(11) NOT NULL,

          `vk_id` int(11) NOT NULL,

          `nick` varchar(20) NOT NULL,

          `status` int(11) NOT NULL,

          `time` int(11) NOT NULL,

          `balance` int(11) NOT NULL,

          `time_bonus` int(11) NOT NULL


        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


        ALTER TABLE `users`

          ADD PRIMARY KEY (`id`);


        ALTER TABLE `users`

          MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;



        1. Сергей Котов

          Сергей Котов@Сергей Котов 17 ноября 2021 18:00

          Спасибо за наводку. Внесли дамп бд в статью

  5. Айнур

    Айнур Гость 16 июля 2022 10:31

    Как юзать attachment?

    Так?

    message.send.attachment[photo39697579_57854

  6. Seraphim

    Seraphim Гость 18 июля 2022 02:05

    3 части нету?(

    1. 5id15

      5id15@Константин Дорофеев 18 июля 2022 12:50

      Пока, к сожалению, нет. Возможно, в скором времени появится. 

      1. Seraphim

        Seraphim Гость 18 июля 2022 17:04

        А я уже разобрался) скоро добавлю возможность передавать деньги, добавлю голду и рейтинг. если кому интересно посмотреть https://vk.me/join/iZUMAQu4Smbbw2andUDdA018S073iIoMTGA= 

        спасибо большое за помощь!

  7. Николай Клочков

    Николай Клочков@Николай Клочков 31 августа 2023 07:59

    хз но он не работает

  8. Витя Виталя

    Витя Виталя Гость 28 декабря 2023 15:13

    а если тебе с обычного кейса падает премиум то как его открыть или когда с премиум кейса падает 10 обычных кейсов то как их открыть?

{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
Пользователей: 4125
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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