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

Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!

Статьи / PHP

По началу покажется что это не возможно, но поверьте, Вам стоит только начать и все получится. Так как бота мы будем делать на сообществе, нам нужно его создать или использовать уже созданное 


После того как создали сообщество, переходим в настройки  

Далее в раздел Сообщения и включаем данную функцию, без нее работать наш бот не будет.

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

Далее переходим: Настройки -> Работа с API -> Ключи доступа и создаем ключ со следующими параметрами:

Этого будет достаточно, так как мы будем работать с сообщениями, получаем вот такой большой код (токен)

3a5eb7b4f02821c71813ef13ba3d0eccfca127bd1e64d97f077bb3467c31a7808af1bda385230fbbc18db


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


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


Бота мы будем писать на PHP.


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


Создаем файл с расширением .php, например bot.php

Открываем любым редактором и начинаем писать код.

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

Библиотека упрощает работу с кодом и методами API VK.


Подключаем библиотеку:


<?php
require_once('simplevk-master/autoload.php');
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс



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





Их нужно заполнить. в кавычках вставляем тот самый длинный код (токен), вторую константу мы пока пропускаем, а в 3 пишем версию API, которую мы будем использовать. Давайте возьмем 5.81. Нам так же нужно указать и ACCESS_KEY его мы берем в сообществе.

В моем случае это: be20ea35 у Вас будет другой, копируем и вставляем во вторую константу. У Вас должно получится вот так:


<?php

require_once('simplevk-master/autoload.php');
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс


const VK_KEY = "3a5eb7b4f02821c71813ef13ba3d0eccfca127bd1e64d97f077bb3467c31a7808af1bda385230fbbc18db";  // Токен сообщества
const ACCESS_KEY = "be20ea35";  // Тот самый ключ из сообщества
const VERSION = "5.126"; // Версия API VK



Обратите внимание, что токен и строка сообщества будет отличаться от вашего!


Продолжаем. Теперь нам нужно создать экземпляр класса работы с api, получить и декодировать JSON пришедший из VK и сообщить VK что мы приняли callback, все это кажется сложным, но на деле все очень просто и понятно.


Получаем следующий код:


$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY);

$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных


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


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


    }


Теперь можно создать первую команду! Наша команда будет !бот, давайте напишем ее:


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

    if ($message == '!бот') {

            $vk->sendMessage($peer_id, "Привет :-)"); // Отправляем ответ
            
        }


    }


Этот код работать не будет, так как мы не создали переменные $id и $message давайте создадим их. Переменные создаем выше строки

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


$id = $data->object->from_id; // Узнаем ID пользователя, кто написал нам
$message = $data->object->text; // Само сообщение от пользователя


Статья обновлена 17.12.2020 

Теперь часть переменных инициализируется в функции InitVars но для примера оставим как их можно задавать еще!


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



<?php

require_once('simplevk-master/autoload.php');
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс


const VK_KEY = "3a5eb7b4f02821c71813ef13ba3d0eccfca127bd1e64d97f077bb3467c31a7808af1bda385230fbbc18db";  // Токен сообщества
const ACCESS_KEY = "be20ea35";  // Тот самый ключ из сообщества
const VERSION = "5.126"; // Версия API VK


$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY);

$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных
// ====== Наши переменные ============
$vk_id = $data->object->from_id; // Узнаем ID пользователя, кто написал нам
$message = $data->object->text; // Само сообщение от пользователя
// ====== *************** ============

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

    if ($message == '!бот') {
            $vk->sendMessage($peer_id, "Привет :-)");
        }

   }



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


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


% buffered00:00
19:56




Добавлена статья как залить скрипт на сервер с инструкцией

Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК 



Допустим Вы разобрались с хостингом и готовы установить туда сам скрипт. Заходим на сервер и загружаем туда наш скрипт с  ботом VK и библиотеку. Саму библиотеку скачать можно только после регистрации!


Внимание! У Вас нет прав для просмотра скрытого текста.


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

 



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

http://qu4.ru/bot.php


копируем ссылку, у вас будет другая, возможно состоящая даже из IP адреса, если используете игровой сервер или хостинг без домена. Возвращаемся к настройкам бота в сообществе и вставляем ссылку:


Выбираем версию API 5.126, указываем ссылку и подтверждаем, если все сделали правильно, VK сообщит нам об этом 

Если сейчас написать боту, он не ответит, так как нам нужно включить тип событий:


Этого будет достаточно, что бы бот начал функционировать и отвечать нам. Давайте это проверим:


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

Если Вы допустили в коде ошибку, то у Вас появится Ошибка 500, это означает что Вы допустили ошибку в самом коде скрипта:

Данный бот будет работать только с хостингом, запустить с ПК скрипт не получится

(Получится, но это требует особых навыков hushed)



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


Создаем переменную $date и записываем в нее текущую дату и время, с помощью PHP функции date(); получаем следующий код


$date = date("d.m.Y  H:i");


Теперь нам нужно создать саму команду:


        if ($message == '!дата') {

            $vk->sendMessage($peer_id, $date);
            
        }


Весь исходный код выглядит так:


<?php

require_once('simplevk-master/autoload.php');
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс


const VK_KEY = "3a5eb7b4f02821c71813ef13ba3d0eccfca127bd1e64d97f077bb3467c31a7808af1bda385230fbbc18db";  // Токен сообщества
const ACCESS_KEY = "be20ea35";  // Тот самый ключ из сообщества
const VERSION = "5.126"; // Версия API VK


$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY);

$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных
// ====== Наши переменные ============
$vk_id = $data->object->from_id; // Узнаем ID пользователя, кто написал нам
$message = $data->object->text; // Само сообщение от пользователя

$date = date("d.m.Y  H:i");
// ====== *************** ============

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

    if ($message == '!бот') {

            $vk->sendMessage($peer_id, "Привет :-)");
         
        }
    if ($message == '!дата') {

        $vk->sendMessage($peer_id, $date);

    }


   }
   



У нас получилось всего 37 строк кода 



Что бы Вы понимали, бот KotOFF и Conference Kot содержит 1761 строку кода! Хотя функционал не самый большой на данный момент.


Давайте проверим работу команды:

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



UPD: Что бы бот отвечал и в беседах нужно заменить частично код, инструкция ниже


Где:

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




Заменить на 

$id = $data->object->from_id;
$peer_id = $data->object->peer_id;




Далее заменить:

$vk->sendMessage($id, "Привет :-)");




На 

$vk->sendMessage($peer_id, "Привет :-)");



$id - хранит ид пользователя
$peer_id - хранит в себе ид беседы




Если возникли вопросы или трудности, пишите в комментарии, я с радостью отвечу на них.


На этом у меня все, со временем буду корректировать статью и дополнять ее.


Данный бот отлично подойдет как автоответчик или инструкция (FAQ) для вашего сообщества.



Разработка ботов на заказ, любой сложности, обращаться:
 VK Дмитрий Котов
TELEGRAM: @treivkotov




Скачать архив с ботом и библиотекой можно после регистрации на сайте! Регистрация доступна через социальные сети :)

Внимание! У Вас нет прав для просмотра скрытого текста.


Внимание! У Вас нет прав для просмотра скрытого текста.



Рекомендуем размещать скрипты на таких хостингах: firstvds


СТАТЬЯ ОБНОВЛЕНА 17.12.20 ДЛЯ ПОДДЕРЖКИ ПОСЛЕДНИХ ВЕРСИЙ АПИ ВК 5.131

  • Сергей Котов
  • 16.01.2019
  • 138 366
  • 251
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
2-11-2019, 06:01, Статьи / PHP
Обновление Conference Kot v4.0 Customization
Обновление Conference Kot v4.0 Customization
25-02-2019, 22:32, Обновления
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
24-01-2019, 04:11, Статьи
  1. Dyec

    Dyec@Дмитрий Секретнов 7 июня 2020 22:08

    у кого не работает sendImage(): замените код на этот в файле vk_api.php:

    public function sendImage($id, $local_file_path, $message_img)
        {
            $upload_url = $this->sendDocuments($id, 'photo')['upload_url'];
            $answer_vk = json_decode($this->sendFiles($upload_url, $local_file_path, 'photo'), true);
            $upload_file = $this->savePhoto($answer_vk['photo'], $answer_vk['server'], $answer_vk['hash']);
            $this->request('messages.send', array('attachment' => "photo".$upload_file[0]['owner_id']."_".$upload_file[0]['id']."_".$up
    load_file[0]['access_key'], 'peer_id' => $id, 'message' => $message_img));
          
            return 1;
        }

    добавлен json_decode и убраны [0] при сохранении
    так же добавил текст к картинке можно не указывать переменную для текста и бот пришлет картинку вложенную без сообщения.

    по сути работает как sendMessage. можно указать текст а можно и нет, фото указываем путь к картинке у вас на сервере в папке, можно без __DIR__ указывать. Я два дня убил чтобы понять почему этот код не работал, другие решения в гугле и яндексе не помогали. Единственно он не отправляет фото в беседу группы, только в обычную беседу и лс группы.
  2. Виталий Успенский

    Виталий Успенский@Виталий Успенский 14 июня 2020 18:56

    Здравствуйте. Есть проблемка:
    <b>Notice</b>:  Undefined index: text in <b>/storage/ssd4/233/14073233/public_html/bot.php</b> on line <b>38</b><br /> <br /> <b>Notice</b>:  Undefined variable: send in <b>/storage/ssd4/233/14073233/public_html/bot.php</b> on line <b>74</b><br />
    Что с ней делать?
    1. Dyec

      Dyec@Дмитрий Секретнов 28 июня 2020 14:08

      error_reporting(0);
      ini_set('display_errors', 'off'); пробуй
  3. Богдан

    Богдан Гость 22 июня 2020 12:00

    А для чего нужен файл vk_api.php? Что там находится? Ведь всё написано в файле bot.php.
    1. Dyec

      Dyec@Дмитрий Секретнов 28 июня 2020 14:08

      там функции загляни и узнаешь, чтобы код короче был если так проще тебе объяснить, без него работать не будет бот.рнр
  4. Влад Шишечкин

    Влад Шишечкин@Влад Шишечкин 30 августа 2020 01:09

    А как получить прямую ссылку на скрипт?

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

      Сергей Котов@Сергей Котов 31 августа 2020 09:32

      https://kotoff.net/index.php?do=download&id=10
  5. Тимофей Тихонов

    Тимофей Тихонов@Тимофей Тихонов 3 сентября 2020 17:48

    {
        "type": "message_new",
        "object": {
            "id": 8,
            "date": 1599144373,
            "out": 0,
            "user_id": 447774397,
            "read_state": 0,
            "title": "Привет",
            "body": "!бот",
            "owner_ids": []
        },
        "group_id": 198433371,
        "event_id": "8463962b949c4e63ae34c90f7b28396afa3ef0e0",
        "secret": "8a43b1e6"
    }{
        "type": "message_new",
        "object": {
            "id": 8,
            "date": 1599144373,
            "out": 0,
            "user_id": 447774397,
            "read_state": 0,
            "title": "Привет",
            "body": "!бот",
            "owner_ids": []
        },
        "group_id": 198433371,
        "event_id": "8463962b949c4e63ae34c90f7b28396afa3ef0e0",
        "secret": "8a43b1e6"
    }

    callback отвечает а сообщение не присылается в поле титл в ответе пустое значение хотя код правильный
  6. Айнур Бирдин

    Айнур Бирдин@Айнур Бирдин 14 сентября 2020 13:27

    [Mon Sep 14 10:25:46.204295 2020] [php7:error] [pid 19639] [client 62.133.162.145:6152] PHP Fatal error:  Uncaught Error: Call to undefined function json_decode() in /var/www/html/bot.php:12\nStack trace:\n#0 {main}\n  thrown in /var/www/html/bot.php on line 12
    1. Сергей Котов

      Сергей Котов@Сергей Котов 16 сентября 2020 23:37

      Обновить PHP до 5.4+ если стоит ниже или проверьте disable_functions ini-директиву, чтобы узнать, есть ли json_decode в этом списке, поэтому ругается на нее. Если стоит Ubuntu то:

      sudo apt-get install php7.2-json
      (или php7.1-jsonили в php5-jsonзависимости от версии PHP, которую вы используете)

      Затем, конечно, не забудьте перезапустить Apache :
      sudo service apache2 restart
  7. Aleksei Pozdnyakov

    Aleksei Pozdnyakov@Aleksei Pozdnyakov 22 октября 2020 09:10

    private $token = ' ';
    private $v = ' ';
    что ставить в эту часть кода?

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

      Сергей Котов@Сергей Котов 22 октября 2020 22:04

      Эту часть трогать не нужно, файл vk_api это библиотека, меняйте данные в файле bot.php
  8. Konstanta

    Konstanta@Константин Хакимов 25 октября 2020 12:27

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

    }elseif ($message == '!test') {
              if ( !R::testConnection() )
        {
            $vk->sendMessage($peer_id, "Соединения с БД нет");
            exit;
        }else{
            $vk->sendMessage($peer_id, "Соединение с БД есть");
        }



    После плясок с бубном вокруг хостинга, бот мне таки ответил, что соединение есть.

    Далее переписал команду смены ника:
     
     
    if (mb_substr($cmd,0,5) == '!ник'){
        $new_nick = mb_substr($message, 6);
        if($new_nick != ''){
          $get_user = R::findOne('users', 'user_id = ?', [$id]);
          if($get_user){
            $get_user->nick = $new_nick;
            R::store($get_user);
          }else{
            $new_nick = mb_substr($message, 6);
            $new_user = R::dispense('Имя БД');
            $new_user->user_id = $id;
            $new_user->nick = $new_nick;
            R::store($new_user);
          }
          $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь  {$new_nick}");
        }else{
          $vk->sendMessage($peer_id, "@id{$id} (Укажите имя)");
        }

     Если после "!ник" ничего не указано, то бот, как и следует, просит указать имя. Но вот если написать, к примеру, "!ник создатель", бот просто проигнорирует сообщение, даже не удосужившись занести меня в БД. Как можно решить сию проблему?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 26 октября 2020 23:57

      Попробуйте заменить это:
      if (mb_substr($cmd,0,5) == '!ник'){
          $new_nick = mb_substr($message, 6);


      на
      $cmd = explode(' ', $message);
      if ($cmd[0] == '!ник'){
          $new_nick = $cmd[1];

      1. Konstanta

        Konstanta@Константин Хакимов 27 октября 2020 17:53

        Здравствуйте, всё равно молчит. 

            $cmd = explode(' ', $message);
            if ($cmd[0] == '!ник'){
            $new_nick = $cmd[1];
            if($new_nick != ''){
              $get_user = R::findOne('users', 'user_id = ?', [$id]);
              if($get_user){
                $get_user->nick = $new_nick;
                R::store($get_user);
              }else{
                $new_nick = mb_substr($message, 6);
                $new_user = R::dispense('Имя БД');
                $new_user->user_id = $id;
                $new_user->nick = $new_nick;
                R::store($new_user);
              }
              $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь  {$new_nick}");
            }else{
              $vk->sendMessage($peer_id, "@id{$id} (Укажите имя)");
            }

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

          Сергей Котов@Сергей Котов 27 октября 2020 19:31


          $message = $data->object->text; // Само сообщение от пользователя
          $cmd = explode(' ', $message);
              if ($cmd[0] == '!ник'){
              $new_nick = $cmd[1];
              if($new_nick != ''){
                $get_user = R::findOne('users', 'user_id = ?', [$id]);
                if($get_user){
                  $get_user->nick = $new_nick;
                  R::store($get_user);
                }else{
                  $new_nick = $cmd[1]; // Тут 2 элемент массива вместо обрезки mb_substr
                  $new_user = R::dispense('Имя БД');
                  $new_user->user_id = $id;
                  $new_user->nick = $new_nick;
                  R::store($new_user);
                }
                $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь  {$new_nick}");
              }else{
                $vk->sendMessage($peer_id, "@id{$id} (Укажите имя)");
              }

          если не поможет, то проблема либо с бд, либо с  переменными 
          1. Konstanta

            Konstanta@Константин Хакимов 27 октября 2020 20:07

            Бот так и не отвечает. И в БД не заносит. Но теперь в статистике показывается, что во время отправки сообщения есть нагрузка, но вот таблиц никаких не создалось. Да и сама БД почему-то теперь весит 0,01 Мб.
            1. TREiV

              TREiV@Дмитрий Котов 27 октября 2020 20:32

              Попробуйте использовать MySQLi или обертку из этой статьи мы не работали с RedBean
            2. Konstanta

              Konstanta@Константин Хакимов 27 октября 2020 21:24

              Спасибо, попробую
  9. Дима Гребенюк

    Дима Гребенюк@Дима Гребенюк 26 ноября 2020 09:32

    какая версия пхп?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 29 ноября 2020 12:24

      5.3+
  10. gfhfien

    gfhfien 27 ноября 2020 22:26

    Здравствуйте!
    Подскажите, как сделать, чтобы бот показывал видео в беседе, а не просто ссылку?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 29 ноября 2020 12:24

      Прикрепить видео как вложение, используя параметр attachments
      1. gfhfien

        gfhfien 3 декабря 2020 09:34

        Сергей, а можно кодом?
        Пробовал разные варианты, но почему-то видео отправляется только в сообщениях группы, в беседе идёт "голая" ссылка.
        1. Сергей Котов

          Сергей Котов@Сергей Котов 3 декабря 2020 11:41

          ДА
          Код:
          $vk->request('messages.send', ['message' => 'новое видео!', 'attachment' => 'video-36508616_168883754']);

  11. m_m4vr1n

    m_m4vr1n 16 декабря 2020 18:03

    Добрый день, нужна ваша помощь. Застрял на пункте где надо проверять работу скрипта, cделал все правильно а при переходе по ссылке пишет "ОШИБКА 404" Буду благодарен если поможете с проблемой
    1. Сергей Котов

      Сергей Котов@Сергей Котов 17 декабря 2020 11:18

      Значит по этому пути нет скрипта, вы точно залили скрипт в корень или папку сайта? Это важно
  12. DarckS Дима

    DarckS Дима@DarckS Дима 18 декабря 2020 17:44

    Добрый день, благодарю за такой отличный мануал, подскажите как мне не учитывать регистр, чтобы и большие и маленькие буквы мог улавливать бот, например пишут "Привет" а бот отвечает только на "привет", или в масиве указывать овер миллион значений?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 20 декабря 2020 11:42

      Самый простой способ привести получаемый текст в нижний регистр, добавьте переменную 
      $msg = mb_strtolower($message);

      mb_strtolower() - Эта встроенная функция в PHP приводит текст в нижний регистр, далее просто обрабатывайте команды так:
      $msg == 'привет' обязательно с маленькими буквами, ведь текст у нас преобразуется именно в него. И теперь какой бы текст не отправил пользователь, пусть это даже будет ПрИвЕт, функция mb_strtolower() приведет его в привет
  13. DarckS Дима

    DarckS Дима@DarckS Дима 20 декабря 2020 18:48

    Сергей, спасибо большое, у меня много вопросов, только знакомлюсь с php и с api vk, если не сложно будет попрошу ответов)
    1) не отправляет почему то видео     if ($message == 'видео') {

            $vk->request('messages.send', ['message' => 'видео', 'attachment' => 'video-139004531_456239090']);
        }
    2) возможно ли сделать чтобы при входе и выходе из беседы в вк, было сообщение, если можно кодом
    3) не работает рандомайзер, что бы например на слово "привет" отвечало по разному, пробовало разному, перерыл много форумов нечего не нашел нечего
    4) может быть как то можно оледенить команды чата, чтобы видеть какие есть, или это нужно руками делать, все перечислять списком.
    5) как сделать чтобы улавливало слово даже в середине предложения, что написали после какого то многодомного слова ли предложения привет и оно ответило
    эти вопросы может быть многие кто задавал бы
    пробовал использовать код со старых версий бота, https://lolz.guru/threads/31497/ вот от сюда пытался преобразовать под себя, мб что-то криво делаю.. я понимаю что за все вопросы нужно платить) но надеюсь хоть на чтото получу овтет, еще раз спасибо за вашу работу, Поддержу проект копеечкой)

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

      Сергей Котов@Сергей Котов 21 декабря 2020 15:13

      1. Нужно смотреть логи ошибок, может быть не хватает прав или видео не доступно группе, только в логах можно узнать истинную проблему

      2. Все просто, нужно добавитьв переменные:
      if (isset($data->object->action)){
      $invite = $data->object->action; // Какое действие произошло 
      $invite_id = $invite->member_id; // ИД кого пригласили
      }

      if (isset($invite->type) and $invite->type == 'chat_invite_user') {
      // Тут выполняем код после инвайта/ов
      }

      3. Самый просто рандомайзер который мы используем в боте @confbot по команде !монетка:

      $quotes = ['выпадает Орёл &#129413;','выпадает Решка 🤗','выпадает Орёл &#129413;','выпадает Решка 🤗','выпадает Орёл &#129413;','выпадает Решка 🤗','монетка встала на ребро 😮']; // Список случайных фраз
      $rand_keys = array_rand($quotes); // array_rand - выдергивает 1 случайный массив
      $vk->sendMessage($peer_id, "Выпала фраза: {$quotes[$rand_keys]}"); // Отправляем ответ 

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

      5. Самый просто вариант:
      $text = 'Привет, мой kotoff.net';
      if (strpos($text , 'kotoff.net') !== false) {
      // Выполняем код если нашли искомую фразу букву, текст 
      }

      я понимаю что за все вопросы нужно платить)

      На нашем сайте за это платить не нужно, мы идем против системы и когда можем помочь, поможем  😉 
      1. DarckS Дима

        DarckS Дима@DarckS Дима 21 декабря 2020 22:12

        Вы Лучший! спасибо вам огромное, с вашей помощью развиваюсь сам и создаю прикольного бота для своего коммюнити)) все очень довольны)) 400 человек сидят играются 24/7 ахах, хорошо хоть нагрузка на сервер минимальная вообще) не мешает работе сайту

        логи вот так выглядят
        [Exception]: возникла ошибка:
        [Exception]: текст: {"error":{"error_code":100,"error_msg":"One of the parameters specified was missing or invalid: you should specify peer_id, user_id, domain, chat_id or user_ids param","request_params":[{"key":"method","value":"messages.send"},{
        "key":"oauth","value":"1"},{"key":"attachment","value":"video-139
        004531_456239089"},{"key":"v","value":"5.126"},{"key":"random_id",
        "value":"497200248"}]}}
        [Exception]: код ошибки: 100
        [Exception]: файл: **/vk/simplevk-master/src/vk_api.php:230
        [Exception]: путь ошибки: #0 **/vk/bot.php(63): DigitalStar\vk_api\vk_api->request('messages.send', Array)
        1. Сергей Котов

          Сергей Котов@Сергей Котов 22 декабря 2020 17:54

          не сложно понять что она означает если ее перевести. Вы забыли указать 1 обязательный параметр выделил жирным

            $vk->request('messages.send', ['peer_id' => $peer_id, 'message' => 'видео', 'attachment' => 'video-139004531_456239090']);
  14. Гость DarckS Дима

    Гость DarckS Дима Гость 22 декабря 2020 22:56

    Спасибо Сергей! Я решил сам подумать часа два експерементировал, но понял, все заработало, вы правы именно этого и не хватало, кстати теперь у меня бот пишет при приглашении человека приветствие и ник человека который пригласил а не кого пригласили и кто вошёл, тоесть если заходит человек по приглашению то после фразы "Ваня пупкин пригласил Григория пуппкина" бот пишет фразу "привет Ваня пупкин, не понимаю как поправить 
    1. Сергей Котов

      Сергей Котов@Сергей Котов 23 декабря 2020 10:42

      if (isset($data->object->action)){
      $invite = $data->object->action; // Какое действие произошло 
      $invite_id = $invite->member_id; // ИД кого пригласили
      }
      Внимание на выделенный текст, нужно использовать ID кого пригласили для получения ФИО

      $userInfo = $vk->userInfo($invite_id);
      $first_name = $userInfo['first_name']; // Имя
      $last_name = $userInfo['last_name']; // Фамилия
      1. DarckS Дима

        DarckS Дима@DarckS Дима 23 декабря 2020 22:15

        $userInfo = $vk->userInfo($invite_id);  это строка крашит бота, логи тоже не показывают нечего, но бот молчит совсем, не реагирует ни на что, хотя ошибок в коде нет проверял, но при добавлении кого то он выводит имя и фамилию правильно но остальные запросы не реагирует...

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

          Сергей Котов@Сергей Котов 24 декабря 2020 14:34

          Ошибка в коде, смотрите лучше :)
          1. DarckS Дима

            DarckS Дима@DarckS Дима 24 декабря 2020 17:13

            разобрался, не туда впихнул))
  15. DarckS Дима

    DarckS Дима@DarckS Дима 26 декабря 2020 16:30

    if (isset($invite->type) and $invite->type == 'chat_invite_user_by_link') {
            $vk->sendImage($peer_id,  __DIR__ . DIRECTORY_SEPARATOR . 'images/ylitka.png');
    подскажите почему не выводит сообщения на вхождение человека по ссылке?если добавить пользователя то картинка выводится, в других смс выводиться картинка а вот если по ссылке человек зашел в беседу не выводиться
  16. DarckS Дима

    DarckS Дима@DarckS Дима 27 декабря 2020 00:32

    еще подскажите пожалуйста, как вытянуть имя того чье сообщение пересылаем, например человек написал привет, я переслал его сообщение с какой то фразой и бот отвечает  с именем того человека которого переслал а не моим, id получаеться вытащить а имя не хочет ставить, это вытаскивает id $reply_author = $data->object->reply_message->from_id; а имя я не могу $first_name_reply = $userInfo['first_name']; подскажите где я не правильно свернул((

    хочу сделать типа чтобы при на пересланое сообщение или на фразу !убить @123456 бот писал типа рандомно "человек (имя того кто пересылает) убил человека (имя того кого хочет убить) " или  " человек (имя того кого хочет убить) поставил волшебный щит и (имя того кто пересылает) не смог его убить
    1. Сергей Котов

      Сергей Котов@Сергей Котов 29 декабря 2020 10:24

      $userInfo = $vk->userInfo($reply_author);
      $first_name_reply = $userInfo['first_name']; 
      1. DarckS Дима

        DarckS Дима@DarckS Дима 30 декабря 2020 15:36

        код тот который нужно работает верно, но все сообщения где есть массивы отключаются и не работают более, пробовал массу вариантов, не хочет работать с массивами если ставить такой код, ставил и перед и после и вообще сносил отдельно https://prnt.sc/wczaim , если сношу отдельно весь процесс то не работает функция но работает все остальное...

  17. Александр Крючков

    Александр Крючков@Александр Крючков 4 января 2021 16:07

    Сервер вернул неправильный ответ: Can't connect to server
    что делать?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 5 января 2021 19:27

      А доступ к серверу есть?
  18. DarckS Дима

    DarckS Дима@DarckS Дима 8 января 2021 22:26

    @Сергей Котов подскажи как настроить приветсвие на вход по ссылке, код не работает мой
    if (isset($data->object->action)){
    $invite = $data->object->action;
    $invite_id = $invite->member_id;


    $userInfo = $vk->userInfo($invite_id);
    $first_name = $userInfo['first_name'];
    $last_name = $userInfo['last_name'];
    }
    if (isset($invite->type) and $invite->type == 'chat_invite_user') {
            
            $vk->sendImage($peer_id,  __DIR__ . DIRECTORY_SEPARATOR . "images/{$inv[$rand_keys]}");
    }

    if (isset($invite->type) and $invite->type == 'chat_invite_user_by_link') {
            $vk->sendImage($peer_id,  __DIR__ . DIRECTORY_SEPARATOR . "images/{$inv[$rand_keys]}");
    }
    по приглашению отсылает фото а по ссылке нет


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

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

      пишите в вк
  19. bannedofff

    bannedofff 15 марта 2021 17:57

    автор, ты просто лучший. Благодарю за полезную информацию
  20. Дмитрий Калашов

    Дмитрий Калашов@Дмитрий Калашов 21 августа 2021 21:29

    как добавить свои переменные в новую версию кода?
  21. Елена

    Елена Гость 14 октября 2021 11:39

    Привет!
    Подскажите, пожалуйста, как к сообщению прикрепить не статичную ($vk->sendMessage($peer_id, "%fn%, привет :-)", $params = ['attachment' => 'photo-15991700_457517900']);), а рандомную фоткуиз альбома группы?
  22. Алексей Леонтьев_2

    Алексей Леонтьев_2@Алексей Леонтьев 14 ноября 2021 18:54

    Слушай, автор.

    Здоровья тебе побольше! И долгих лет жизни.

    Ты реально меня выручил. Я понять не мог, почему у меня на версии 5.131 бот не работал.

  23. Dedushka Severus

    Dedushka Severus@Dedushka Severus 23 декабря 2021 02:29

    Здравствуйте, а возможно прописать "бота-банкира"? Меня интересует то, чтобы участники беседы могли обмениваться условными баллами. Получается, бот должен уметь запоминать у кого какой баланс, складывать, вычитать и т.д. 

    1. seria

      seria 23 декабря 2021 02:49

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

      1. Dedushka Severus

        Dedushka Severus@Dedushka Severus 23 декабря 2021 22:56

        Большое спасибо!

  • 1 2 3 4
{login}

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

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

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • 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
Создать аккаунт / Регистрация
Авторизация

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