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

Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK

Статьи / PHP


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

Если Вы читаете эту статью, значит Вы уже более менее разбираетесь в работе сервера. Для начала давайте рассмотрим то, что требуется для работы с базой данных.
Сервер с PHP не ниже 5.6
MySQL 5.5.х и выше
А теперь я отвечу на несколько вопросов
Что такое MySQL - Это система управления базами данных (СУБД), простым языком, с помощью MySQL мы можем сохранять, получать и удалять данные из таблиц.
Почему лучше выбирать SQL? Хранение данных в файлах при большом объеме информации будет с каждым разом нагружать работу вашего скрипта, дело может дойти до того, что данные просто не будут сохранятся. При использовании MySQL это проблема пропадает из за высокой скорости работы и структурированного хранения данных, что идеально подходит для работы с большим объемом данных.

Операторы SQL делятся на:
операторы определения данных:
CREATE создаёт объект БД (саму базу, таблицу, представление, пользователя и т. д.),
ALTER изменяет объект,
DROP удаляет объект;
операторы манипуляции данными:
SELECT выбирает данные, удовлетворяющие заданным условиям,
INSERT добавляет новые данные,
UPDATE изменяет существующие данные,
DELETE удаляет данные;

Для нашего проекта мы будем использовать операторы манипуляции данными, давайте уже начнем. В связи с тем что мы используем PHP для создания бота, то сами разработчики PHP рекомендуют использовать MySQLi, а начиная с версии PHP 7.x работает только MySQLi
MySQLi (от англ. MySQL improved) — расширение драйвера реляционных баз данных, используемого в языке программирования PHP для предоставления доступа к базам данных MySQL. MySQLi является обновлённой версией драйвера PHP MySQL, и даёт различные улучшения в работе с базами данных.

Перед тем как мы приступим к подключению, я рекомендую скачать среду разработки PHPStorm. Данная среда помогает в разработке, указывая на ошибки и подсказки при написании кода.

Что бы упростить работу с подключением и дальнейшей работой с базами данных, нужно скачать библиотеку и распаковать ее на сервер. Используя данную библиотеку, нам будет проще обращаться и получать данные с базы данных (далее БД).
vendor.rar

Теперь создаем файл нашего будущего проекта, давайте сделаем бота для Вконтакте, который будет сохранять информацию о пользователе в БД, для примера можем написать админку для нашего прошлого кода, о котором я писал здесь

Берем готовый код с прошлой статьи 
<?php

include "vk_api.php";



const VK_KEY = "b48c23e7e4aa9c7c02f61a51aff85b90e59a4c52567f8604e25074a9a82b2ccf8258f9b938095be8c5e9d"; //тот самый длинный ключ доступа сообщества
const ACCESS_KEY = "be20ea35"; //например c40b9566, введите свой
const VERSION = "5.81"; //ваша версия используемого api



$vk = new vk_api(VK_KEY, VERSION); // создание экземпляра класса работы с api, принимает ключ и версию api
$data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
//print_r($data);
if ($data->type == 'confirmation') { //Если vk запрашивает ключ
    exit(ACCESS_KEY); //Завершаем скрипт отправкой ключа
}
$vk->sendOK(); //Говорим vk, что мы приняли callback
// Создаем необходимые переменные
$peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
$id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
$message = $data->object->text; // Текст самого сообщения
$is_admin = [87444494, 183657]; // создаем массив с ID's наших будущих админов через запятую
$chat_id = $peer_id - 2000000000;

if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

            if (in_array($id, $is_admin)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

        $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
        $kick_id = explode("|", mb_substr($kick_id, 3))[0];

        if($kick_id == ""){
            $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

        } else {

        $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
        $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

    }
    } else {
            $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

        }
    }
}

Админ права нужно было прописывать постоянно в скрипте, в строке 
$is_admin = [87444494, 183657]; // создаем массив с ID's наших будущих админов через запятую
Это не совсем удобно, давайте создадим команду !админ, которая будет принимать 1 аргумент, это ID пользователя, его мы уже научились принимать в той же статье про исключение пользователя.

    if (mb_substr($message,0,6) == '!админ'){ // Обрезаем сообщение и сравниваем что получилось

        if (in_array($id, $is_admin)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

            $user_id = mb_substr($message ,7); // еще раз обрезаем и получаем все что написано после !админ_
            $user_id = explode("|", mb_substr($user_id, 3))[0];

            if($user_id == ""){
                $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

            } else {

               
                $vk->sendMessage($peer_id, "id - {$user_id}");

            }
        } else {
            $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

        }
    }

Такой командой мы получаем ID пользователя

Этот ID мы будем сохранять в базу данных, потом получать его и сверять, есть ли этот ID в БД, если да, то даем доступ к команде.

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

Теперь ниже переходим в phpMyAdmin

Или просто перейти с раздела Базы данных, если такая кнопка есть

После того как зашли в phpMyAdmin, нам нужно создать таблицу в БД, выбираем сверху в меню SQL и вставляем туда запрос, не забудьте выбрать название БД, где мы будем создавать саму таблицу

CREATE TABLE admin (
id int NOT NULL AUTO_INCREMENT,
vk_id int,
PRIMARY KEY (id)
)

Наша таблица готова, теперь мы можем сохранять туда наши данные, это будет ID пользователя. Переходим к нашему коду и делаем подключение к БД, выше мы скачали библиотеку для работы с БД, распакуем ее в корень, где лежит наш бот

и делаем подключение в самом скрипте 

require  './vendor/autoload.php';
use Krugozor\Database\Mysql\Mysql as Mysql;
$db = Mysql::create("localhost", "login", "password")->setDatabaseName("nameBD")->setCharset("utf8");

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

$db->query("INSERT INTO admin (vk_id) VALUES ($user_id)");

Давайте напишем команду и посмотрим что произойдет 
Данные сохранились в таблицу, но если мы повторно отправим команду с этим же ID, будет создана еще 1 запись, а это нам не нужно, давайте сделаем проверку, если запись уже есть, то ничего предупредим об этом, иначе создадим запись в БД

Что бы проверить наличие записи, нужен оператор SELECT, им будем проверять наличие записей в БД. Давайте сделаем проверку на наличие записи в БД. Пишем следующий код:


          $sql = $db->query("SELECT * from admin WHERE vk_id = $user_id")->getNumRows(); // Проверяем на наличие записи в БД
             if ($sql){ // Если есть запись, сообщим об этом

               $vk->sendMessage($peer_id, "Этот пользователь уже сохранен в базе данных.");
             } else { // Иначе создаем новую запись 
                 $db->query("INSERT INTO admin (vk_id) VALUES ($user_id)");

                 $vk->sendMessage($peer_id, "id - {$user_id}");
                }

Как вы уже догадались из комментариев к коду, мы сделали проверку на запись, иначе создаем новую запись, давайте проверим.

Таким образом делается проверка на наличие записи. 

Теперь рассмотрим вариант получения данных с базы данных, это делается так же легко и просто. Используем все тот же оператор SELECT
    if (mb_substr($message,0,8) == '!адмлист'){ // Обрезаем сообщение и сравниваем что получилось

        $is_admins = $db->query("SELECT * FROM admin")->fetch_assoc()['vk_id']; // Получаем данные из колонки vk_id

        $vk->sendMessage($peer_id, "Данные с БД - $is_admins");

    }

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

 $is_admins = $db->query("SELECT * FROM admin"); // Получаем данные из колонки vk_id
        while ($row = $is_admins->fetch_assoc()) { // Запускаем цикл

            $is_adminss .= $row['vk_id']. " - запись с бд\n";

        }
        $vk->sendMessage($peer_id, "ЦИКЛ\n $is_adminss");

Создаем еще 1 запись в БД и проверим получения данных из БД:

С получением данных разобрались, теперь рассмотрим последний пример на сегодня, это UPDATE, для обновления записей в БД.
    if (mb_substr($message,0,9) == '!обновить'){ // Обрезаем сообщение и сравниваем что получилось

        $db->query("UPDATE admin SET vk_id = 777777 WHERE vk_id = 87444494  LIMIT 1"); // WHERE - Поиск записей в которые нужно внести изменения, перечесляются через AND, LIMIT 1 - Найти 1 запись, другие похожие не трогать


        $vk->sendMessage($peer_id, "Данные обновлены");

    }

В SET указываем то, что нужно обновить, если в строке несколько записей, указывайте их через запятую. Таким образом мы обновилиID пользователя. Используя статьи с нашего сайта, вы уже можете создать полноценного бота, или обратиться в нашу группу за разработкой. 

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

mybot.rar
  • TREiV
  • 05.04.2019
  • 20 856
  • 44
VK ограничит доступ к методу секции Messages в API
VK ограничит доступ к методу секции Messages в API
15-01-2019, 18:58, Новости
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
24-01-2019, 04:11, Статьи
  1. Kukuhin1221

    Kukuhin1221 5 апреля 2019 20:43

    Вау, спасибо!
  2. arseniykvasov

    arseniykvasov@Arseniy 5 апреля 2019 20:55

    спасибо!!!
  3. Runnin

    Runnin Гость 6 апреля 2019 05:43

    Автора на мыло, за то, что не использует возможности библиотеки и допускает возможность SQL инъекций
    1. Нео Метал

      Нео Метал@Infinite 23 августа 2019 17:53

      лучше автора на мыло за mysql, а не mysqli или что-то другое...
      1. Сергей Котов

        Сергей Котов@Сергей Котов 23 августа 2019 23:32

        Там вообще то и есть MySQLi  wink
        1. Нео Метал

          Нео Метал@Infinite 24 августа 2019 17:06

          я в статье вижу, как всё делается через mysql, даже в скрипте он есть))
          потому мне немножечко всё пришлось переделывать под mysqli,ибо работал с ним и всё нормально)
          1. Сергей Котов

            Сергей Котов@Сергей Котов 26 августа 2019 00:01

            В статье используется библиотека, которая использует MySQLi, скачайте и посмотрите сами, в самом верху речь сразу зашла про использование mysqli, так как в примере используются php 7.0 а там mysql не работает уже
  4. Николай Ермаков

    Николай Ермаков@Николай Ермаков 18 апреля 2019 19:17

    Хотелось бы увидеть как через бота отправлять фото
  5. 12345

    12345 27 апреля 2019 15:01

    Не удалось подключиться к базе данных '' Access denied for user 'root'@'localhost' (using password: YES)

    Ok

    пигет когда я создаю бд в https://ispmgr1.demo.ispsystem.net:1500/ispmgr

    че делать?
    1. Николай Ермаков

      Николай Ермаков@Николай Ермаков 27 апреля 2019 15:03

      Неправильно указали пользователя или пароль
      1. 12345

        12345 27 апреля 2019 15:37

        А я его даже не указывал. Там демо-версия вроде и сразу все дается. В итоге ничего.
  6. 12345

    12345 27 апреля 2019 17:41


    Warning: require(./vendor/autoload.php): failed to open stream: No such file or directory in /storage/ssd1/327/9348327/public_html/bot.php on line 6

    Fatal error: require(): Failed opening required './vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /storage/ssd1/327/9348327/public_html/bot.php on line 6

    require  './vendor/autoload.php';
    use Krugozor\Database\Mysql\Mysql as Mysql; ошибки в этих строках. че делать?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 28 апреля 2019 06:33

      Дайте права на эти файлы 777
      1. 111

        111 Гость 4 мая 2019 21:47

        Как выдать эти права? У меня такая же ошибка...
      2. лолол

        лолол 20 мая 2019 10:16

        А как сделать так, чтобы отправлялось сообщение не просто с id, а типа @id$user_id. Как так сделать?
        1. Нео Метал

          Нео Метал@Infinite 24 августа 2019 17:08

          если актуально: $vk->sendMessage($peer_id,"@id{$id}(Пользователь), здравствуйте!");
  7. лолол

    лолол 8 мая 2019 19:28

    Можно поподробнее объяснить куда что распаковывать?
  8. Паша Захаров

    Паша Захаров@Паша Захаров 12 мая 2019 23:26

    У кого не работает код, хотя всё сделано правильно, попробуйте поменять !админ на !admin. 
  9. лолол

    лолол 19 мая 2019 11:16

    Как вообще распаковать эту библиотеку на сервер, подскажите пж?

  10. アレクセイ サモシュキン

    アレクセイ サモシュキン@アレクセイ 2 июля 2019 13:58

    Получение ID пользователя по пересланному сообщению: 
    После $vk->sendOK();
    Добавьте $reply_author = $data->object->reply_message->from_id;
    Далее можно использовать это по разному, просто вместо $user_id используем $reply_author

    Пример использования на исключении пользователя из беседы

    <?php
    include "vk_api.php";

    const VK_KEY = "ваш_токен";
    const ACCESS_KEY = "Ваш_ключ_подтверждения";
    const VERSION = "Версия";

    $vk = new vk_api(VK_KEY, VERSION);
    $data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
    //print_r($data);
    if ($data->type == 'confirmation') { //Если vk запрашивает ключ
        exit(ACCESS_KEY); //Завершаем скрипт отправкой ключа
    }
    $vk->sendOK(); //Говорим vk, что мы приняли callback
    // Создаем необходимые переменные

    $peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
    $id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
    $message = $data->object->text; // Текст самого сообщения
    $is_admin = [2344312, 183657]; // создаем массив с ID's наших будущих админов через запятую
    $chat_id = $peer_id - 2000000000; // id беседы
    $reply_author = $data->object->reply_message->from_id;

    if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии
      if (mb_substr($message,0,5) == '!kick'){ // Обрезаем сообщение и сравниваем что получилось
        if (in_array($id, $is_admin)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's
          $kick_id = mb_substr($message ,5); // еще раз обрезаем и получаем все что написано после /kick_
          $kick_id = explode("|", mb_substr($kick_id, 3))[0];
          if($kick_id == "" && $reply_author == ""){
            $vk->sendMessage($peer_id, "Вы забыли указать аргумент");
          }else{
            if ($kick_id == ""){
              $vk->request('messages.removeChatUser', array('chat_id'=>$chat_id, 'member_id'=>$reply_author));
            }elseif($reply_author == ""){
              $vk->request("messages.removeChatUser", array('chat_id'=>$chat_id, 'member_id'=>$kick_id));
            }
          }
        }else{
          $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");
        }
      }
    }



    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 2 июля 2019 13:59

      P.S. Не забудьте выдать боту права Администратора
    2. Макс Сидоренко

      Макс Сидоренко@Макс Сидоренко 11 июля 2019 16:22

      Не работает
      1. iwantcreate

        iwantcreate@Юлий 10 февраля 2020 16:10

        на версии 5.81 api оно почему-то не работает, если поставить выше, 5.92, например, то значение переменных reply_message оно получает.
  11. Гость 12345

    Гость 12345 Гость 16 июля 2019 22:00

    Приветствую, как сделать так, чтобы была проверка на доступ через базу данных? 
  12. HotBot

    HotBot@Дмитрий Мельник 12 августа 2019 18:15

    А как сделать чтобы вместо id, он выдавал имя и фамилию?

    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 13 августа 2019 14:37

      $userInfo = $vk->request("users.get", ["user_ids" => $id]);
      $first_name = $userInfo[0]['first_name'];
      $last_name = $userInfo[0]['last_name'];
      Вот с обращением:
      $vk->sendMessage($peer_id, "@id{$id} ({$first_name} {$last_name}, привет");
  13. Дмитрий Аблаев

    Дмитрий Аблаев@Дмитрий Аблаев 21 августа 2019 21:47

    Подскажите в чем проблема?
    Взял за основу скрипт со статьи. Скрипт для поиска юзера в БД.
    Но команда "/kick [link] не работает) Уже перепробовал и перекопал весь инет.)
    <?php

    include "vk_api.php"; 

    require  './vendor/autoload.php';
    use Krugozor\Database\Mysql\Mysql as Mysql;
    $db = Mysql::create("localhost", "id10561368_root", "")->setDatabaseName("seller")->setCharset("utf8");


    const VK_KEY = ""; 
    const ACCESS_KEY = "";  
    const VERSION = "5.81";


    $vk = new vk_api(VK_KEY, VERSION); 
    $data = json_decode(file_get_contents('php://input')); 

    if ($data->type == 'confirmation') { 
        exit(ACCESS_KEY); 
    }
    $vk->sendOK(); 

    $id = $data->object->from_id; 
    $message = $data->object->text; 


    if ($data->type == 'message_new') {

        if (mb_substr($message,0,5) == '/kick') {
                $vk->sendMessage("Тест");
                //$vk->sendMessage($id, "Привет :-)");
                $link = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
                //$link = explode("|", mb_substr($user_id, 3))[0];
                 $vk->sendMessage($link);
                 $vk->sendMessage("Тест");
                if($link == ""){
                    $vk->sendMessage("Вы забыли указать сслылку");

                } else {

              $sql = $db->query("SELECT * from seller WHERE link = $link")->getNumRows(); // Проверяем на наличие записи в БД
                 if ($sql){ // Если есть запись, сообщим об этом

                   $vk->sendMessage("Этот пользователь есть в базе данных.");
                 } else { // Иначе создаем новую запись
                     $vk->sendMessage("Этого пользователя нет в базе данных.");
                    }


                }
            }


        }
        

    1. Нео Метал

      Нео Метал@Infinite 23 августа 2019 17:58

      стырь у меня, если не робит.
      только не копируй всё точь в точь *  >*

      //$reply_author = $data->object->reply_message->from_id;
      if (mb_substr($message, 0,5) == "/kick"){
          $userIsAdmin = $mysqli->query("select user_id from p{$peer_id} where user_id = {$id}")->num_rows;
                  if ($userIsAdmin) {
              if ($reply_author){
                  $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
                  $vk->sendMessage($peer_id,"@id{$reply_author}(Пользователь) выгнан успешно отсель.
      Теперь на одного мешающего меньше.");
              } elseif (mb_substr($message, 5)) {
                  $kick_idR = mb_substr($message,5);
                  $kick_idR2 = $vk->request('users.get', ['user_ids' => $kick_idR]);
                  $kick_id = $kick_idR2[0]['id'];
                  $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
                  $vk->sendMessage($peer_id,"@id{$kick_id}(Пользователь) выгнан успешно отсель.
      Теперь на одного мешающего меньше.");
              } else {$vk->sendMessage($peer_id,"Укажи, кого выгонять-то в команде. Или перешли сообщение его и напиши эту же команду. 
      Сложно?");}
          } else {$vk->sendMessage($peer_id,"Я бы позволил тебе его выгнать, но у тебя должных прав нет.");}
          }

      1. Дмитрий Аблаев

        Дмитрий Аблаев@Дмитрий Аблаев 24 августа 2019 04:08

        Упростил код)
        Но не помогло)
        if ($data->type == 'message_new') {
            $vk->sendMessage($id,"а ну ка");// лог чтобы понимать "приезжает" ли сообщение
        $sql = $mysqli->query("select * from seller WHERE link = $message")->getNumRows();
            if ($sql) {
                $vk->sendMessage($id,"есть в базе");
            } else{
                $vk->sendMessage($id,"нет в базе");
            }
        }else{ 
        $vk->sendMessage($id,"что то пошло не так(");
        }

        Бот просто пишет "а ну ка"(т.е. до скрипта доходит "message_new")и все) Понимаю так, что запрос в бд не идет.
        Но явную проблему не вижу(
        1. Нео Метал

          Нео Метал@Infinite 24 августа 2019 17:03

          в статье используется mysql, я использую mysqli засчёт того, что она получше будет.
          либо замени везде, где есть $db, на запросы mysqli, либо замени $mysqli->query(..) на то, что будет подходить в $db

          если немного непонятно, то.. попробуй $db = Mysql::create(...)->... заменить на $mysqli = $mysqli = new mysqli("localhost", "user", "password", "database"), а запросы с $db->query(..) на $mysqli->query(..)
          или же замени $mysqli->query(..) у меня на $db->query(..)

          но лучше перейди на mysqli - mysql выпилили с пыхи седьмой.. да и первое получше будет...

          АПД: слепой и не увидел. у тебя getNumRows вместо num_rows! может потому ещё не работать) у mysqli же num_rows, а не как-то иначе, сколько знаю. но могу ошибаться))
  14. Ilya Saperov

    Ilya Saperov@Ilya Saperov 6 ноября 2019 21:56

    [spoiler]Не работает /kick


    Помогите пожалуйста, подключение к mysql есть.

    >> 

    CREATE TABLE gaadm( id int NOT NULL AUTO_INCREMENT, vk_id int, PRIMARY KEY (id) )

    1. Ilya Saperov

      Ilya Saperov@Ilya Saperov 6 ноября 2019 21:57

      <?php

      include "vk_api.php";


      require  './vendor/autoload.php';
      use Krugozor\Database\Mysql\Mysql as Mysql;
      $db = Mysql::create("localhost", "vh338238_saperov", "Mama1969")->setDatabaseName("vh338238_bot")->setCharset("utf8");

      const VK_KEY = "69b246fbf07ade3abf0c9fb2924ef35461ef3b7fe98c047106d61b7474876c883baee9e3a1eff
      76221368";  // Токен сообщества
      const ACCESS_KEY = "0b399c87";  // Тот самый ключ из сообщества 
      const VERSION = "5.81"; // Версия API VK


      $vk = new vk_api(VK_KEY, VERSION); // создание экземпляра класса работы с api, принимает ключ и версию api
      $data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
      //print_r($data);
      if ($data->type == 'confirmation') { //Если vk запрашивает ключ
          exit(ACCESS_KEY); //Завершаем скрипт отправкой ключа
      }
      $vk->sendOK(); //Говорим vk, что мы приняли callback
      // Создаем необходимые переменные
      $peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
      $id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
      $message = $data->object->text; // Текст самого сообщения
      $id_specadm = [252107586]; // создаем массив с ID's наших будущих админов через запятую
      $id_specadm = [445917049];
      $id_gaadm = [];
      $id_admin = [];
      $id_moder = [];
      $chat_id = $peer_id - 2000000000;

      if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


          if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

              if (in_array($id, $id_specadm)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

                  $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
                  $kick_id = explode("|", mb_substr($kick_id, 3))[0];

                  if($kick_id == ""){
                      $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

                  } else {

                      $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
                      $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

                  }
              } else {
                  $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

              }
          }





      1. Ilya Saperov

        Ilya Saperov@Ilya Saperov 6 ноября 2019 21:57

            if (mb_substr($message,0,6) == '!админ'){ // Обрезаем сообщение и сравниваем что получилось

                if (in_array($id, $id_specadm)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

                    $user_id = mb_substr($message ,7); // еще раз обрезаем и получаем все что написано после !админ_
                    $user_id = explode("|", mb_substr($user_id, 3))[0];

                    if($user_id == ""){
                        $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

                    } else {

                  $sql = $db->query("SELECT * from gaadm WHERE vk_id = $user_id")->getNumRows(); // Проверяем на наличие записи в БД
                     if ($sql){ // Если есть запись, сообщим об этом

                       $vk->sendMessage($peer_id, "Этот пользователь уже сохранен в базе данных.");
                     } else { // Иначе создаем новую запись
                         $db->query("INSERT INTO gaadm (vk_id) VALUES ($user_id)");

                         $vk->sendMessage($peer_id, "id - {$user_id}");
                        }


                    }
                } else {
                    $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

                }
            }


            if (mb_substr($message,0,8) == '!getadm'){ // Обрезаем сообщение и сравниваем что получилось

                $id_specadm = $db->query("SELECT * FROM gaadm")->fetch_assoc()['vk_id']; // Получаем данные из колонки vk_id

                $vk->sendMessage($peer_id, "Данные с БД - $id_specadm");


                $id_specadm = $db->query("SELECT * FROM gaadm"); // Получаем данные из колонки vk_id
                while ($row = $id_specadm->fetch_assoc()) { // Запускаем цикл

                    $id_specadm .= $row['vk_id']. " - запись с бд\n";

                }
                $vk->sendMessage($peer_id, "ЦИКЛ\n $id_specadm");

            }


            if (mb_substr($message,0,9) == '!обновить'){ // Обрезаем сообщение и сравниваем что получилось

                $db->query("UPDATE gaadm SET vk_id = 777777 WHERE vk_id = 87444494  LIMIT 1"); // WHERE - Поиск записей в которые нужно внести изменения, перечесляются через AND, LIMIT 1 - Найти 1 запись, другие похожие не трогать


                $vk->sendMessage($peer_id, "Данные обновлены");

            }



        }

  15. Айнур Бирдин

    Айнур Бирдин@Айнур Бирдин 9 апреля 2020 16:17

    А как создать команду,
    Команда: !чек (Слово)
    Вот такая была
    Проводить проверку в данном таблице которую я укажу если ид найдётся то он выполняет следуйщий запрос
    А если не найдёт он выводить у вас недостаточно прав
    Если выполняет следуйщий запрос он ищет в нескольких таблицах (Слово) которое указал в !чек (слово)
    После поиска он выводить все найденые слова
    Вот так:
    Ник: (Слово) 
    Пароль: (Найденная столбец password)
    ip: (Найденная столбец ip)
    email (Найденная столбец email)
     
    1. TREiV

      TREiV@Дмитрий Котов 10 апреля 2020 13:34

      Через explode получить ыторое слово, а далее передать в запрос его в WHILE slovo = '?s', $explode[1]

      Выше описано как это сделать, так же как и с выдачей админки 
  16. Алексей Панкратов

    Алексей Панкратов@Алексей Панкратов 20 января 2021 17:45

    Ошибка: 
    Fatal error: Uncaught Krugozor\Database\Mysql\Exception: Krugozor\Database\Mysql\Mysql::setDatabaseName: Access denied for user 'cu76735_botvk'@'localhost' to database 'bot' in путьдофайлов/vendor/krugozor/database/src/Mysql/Mysql.php:320 Stack trace: #0 путьдофайлов/bot.php(8): Krugozor\Database\Mysql\Mysql->setDatabaseName('bot') #1 {main} thrown in путьдофайлов/vendor/krugozor/database/src/Mysql/Mysql.php on line 320
    1. Сергей Котов

      Сергей Котов@Сергей Котов 26 января 2021 10:21

      а вы точно бд создали и указали верные данные в скрипте?
  17. Айнур Бирдин

    Айнур Бирдин@Айнур Бирдин 27 марта 2022 09:23

    Бот не работает я использую этот скрипт но у меня дублируются сообщения и логе ошибки: 
    malformed header from script 'php': Bad header:  200 OK
    malformed header from script 'php': Bad header:  200 OK
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 20
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 25
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 25
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 26
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 26
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 27
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 27
    AH01215: PHP Notice:  Trying to get property of non-object in /var/www/wh2104/data/www/домен/botzx1/bot.php on line 3

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

      Сергей Котов@Сергей Котов 27 марта 2022 16:30

      malformed header from script 'php': Bad header:  200 OK


      Что за хостинг? У Вас проблема с заголовками, сервер не отдает 200 OK для вк, поэтому и дублируется запрос

      1. Айнур Бирдин

        Айнур Бирдин@Айнур Бирдин 27 марта 2022 17:27

        Я в скидывал в вк подробности

  18. Гость Айнур Бирдин

    Гость Айнур Бирдин Гость 30 марта 2022 11:11

    Как сделать такую команду: !админ 1234567 sa чтобы изменял строку admin ,на sa желательно скрипт скиньте



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

    Николай Клочков@Николай Клочков 5 сентября 2023 01:10

    Есть тут чтоб команда работала через БД типо если админ тто работает 

  20. Danya

    Danya Гость 9 октября 2023 21:41

    Как сделать команду чтоб в БД отправлялся VK ID чела а потом в массиве $admins = [] проверялся если он там или нет и выводил ошибку " Нет доступа " По типу 

    !добавить_юзер @chel

    !снять_юзер @chel

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

      Сергей Котов@Сергей Котов 10 октября 2023 12:07

      В этой статье все описано

{login}

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

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

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 111
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +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
Создать аккаунт / Регистрация
Авторизация

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