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

[VK BOT] Полезные функции (команды) для бота вк

Статьи / PHP



Список функций:
  • !cmd - список команд, в зависимости от места запроса (лс сообщества или беседа)
  • !kick - изменим команду исключения не от введенного id, а на пересланное сообщение
  • !nick - дадим возможность использовать ники в чате
  • !art - рандомное изображение из вашей группы вк
  • АвтоКик при выходе из беседы
Подготовка:

Я буду использовать redBeanPHP. Как скачать и настроить можно посмотреть тут или тут
Также можно просто скачать готовый архив к написанию команд:  vk-bot.zip (не забудьте изменить на свои данные)
Переменные должны быть следующие:
$peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
$id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
$message = $data->object->text; // Текст самого сообщения
$cmd = mb_strtolower($message, 'utf-8'); // Изменили текст сообщение из БоТ в бот

$chat_id = $peer_id - 2000000000; // id беседы

!CMD:
Дадим ответ один при запросе в беседе и другой ответ при запросе в лс группы

Создадим команду !cmd, для этого просто проверим в пришедшем к нам сообщении на её наличие:
if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии
  if($cmd == '!cmd'){

  }
}
Теперь надо проверить, где пришло это сообщение. Для этого проверим наш chat_id, если он будет меньше 0, то это личные сообщения группы
if($chat_id < 0){
    //Это в группе
}else{
    //Это в беседе
}
Дальше просто заполняем команды в первом случае для группы, во втором для бесед, у меня получиться так:

!KICK:
Для этой команды мы подготовим доп. переменные (имя пользователя) добавляем в начале перед обработкой команд:
$userInfo = $vk->request("users.get", ["user_ids" => $id]);
$first_name = $userInfo[0]['first_name'];
Теперь мы можем в любой команде вывести имя пользователя. Приступим к самой команде, для неё добавим переменную $reply_author, где мы получили автора пересланного сообщения:
$reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
ВНИМАНИЕ!: Была найдена ошибка с киком, если версия API в самой группе вк стоит 5:81, то он не работает, в таком случае измените его на 5:92 и выше, на этих версиях проблем нет.

Теперь приступим к команде
if($cmd == '!kick'){
    if($reply_author == ''){
      $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали человека, которого нужно исключить (перешлите любое его сообщение)");
    }else{
      //Будущий код исключения
    }
  }

для этого просто используем messages.removeChatUser при помощи $vk->request:
$vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
Давайте перед этим попрощаемся с этим человеком, для этого нужно отправить простое сообщение используя ссылку на пользователя. Такие ссылки делаются очень просто (выше уже использовали)
@id(числовой id пользователя без скобок, кавычек и т.п.) (в скобках указываем как его будем называть)
У меня это выглядит так, код ниже под спойлером
 Показать / Скрыть текст
if($cmd == '!kick'){
    if($reply_author == ''){
      $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали человека, которого нужно исключить (перешлите любое его сообщение)");
    }else{
      $userInfo_reply = $vk->request("users.get", ["user_ids" => $reply_author]);
      $first_name_reply = $userInfo[0]['first_name'];
      $vk->sendMessage($peer_id, "@id{$reply_author} ({$first_name_reply}), прощайте");
      $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
    }
  }


!NICK:

Давайте дадим возможность пользователям использовать свои никнеймы, для этого нужна база и соединение к ней. Подробнее можно прочитать в прошлых статьях (моих т.к. я буду использовать RedBeanPHP): [VK BOT] Бот раздающий ключи Steam или [Часть 1] Написание своего сайта. Регистрация и Авторизация

После чего мы создадим саму команду и проверим на наличие пользователя в базе. Для начала нам нужно обрезать сообщение и узнать что нам отправили, что делается прям в самой проверке:
if(mb_substr($cmd,0,5) == '!nick'){
    $get_user = R::findOne('users', 'user_id = ?', [$id]);
    if($get_user){
      //Пользователь существует
    }else{
      //Такой пользователь отсутствует из-за чего создадим его
    }
  }
Теперь нужно от сюда выразить текст после команды, что нужно делать из $message чтобы ник оставался таким, каким его задал пользователь, для этого после проверки команды создадим новую переменную с ником:
$new_nick = mb_substr($message, 6);
Теперь нужно записать пользователя, для чего выберем базу при помощи:
R::dispense('название');
Теперь нужно заполнить поля будущей строки в нашей базе:
$new_user->user_id = $id;
$new_user->nick = $new_nick;
И записать их в базу:
R::store($new_user);
В итоге получиться:
if(mb_substr($cmd,0,5) == '!nick'){
    $new_nick = mb_substr($message, 6);
    $get_user = R::findOne('users', 'user_id = ?', [$id]);
    if($get_user){
      //Пользователь существует
    }else{
      $new_nick = mb_substr($message, 6);
      $new_user = R::dispense('users');
      $new_user->user_id = $id;
      $new_user->nick = $new_nick;
      R::store($new_user);
    }
  }

Теперь давайте менять ник существующему пользователю в базе, для этого нужно просто в найденном пользователе заменить наш столбец с ником:
$get_user->nick = $new_nick;
R::store($get_user);

Остается уведомить пользователя, что его называем теперь $new_nick
$vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь именуется как {$new_nick}");

Итогом получилась команда:
 Показать / Скрыть текст
if(mb_substr($cmd,0,5) == '!nick'){
    $new_nick = mb_substr($message, 6);
    $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('users');
      $new_user->user_id = $id;
      $new_user->nick = $new_nick;
      R::store($new_user);
    }
    $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь именуется как {$new_nick}");
  }



Но бот меняет ник даже когда мы отправили просто !nick, давайте исправим (признаю свою ошибку, но у меня сейчас 22:46, надеюсь простите). Для этого просто нужно после $new_nick проверить на его пустоту:
if($new_nick != ''){

После чего идет выше написанный скрипт, потом закрываем эту проверку и пишем действие в else
    }else{
      $vk->sendMessage($peer_id, "@id{$id} (Вы) не указали желаемое имя");
    }

Итог:
 Показать / Скрыть текст
if(mb_substr($cmd,0,5) == '!nick'){
    $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('users');
        $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} (Вы) не указали желаемое имя");
    }
  }


!art:
Данная команда будет выводить нам одно рандомное изображение из альбома вк. Для этого в команде !art создайте массив:
if($cmd == '!art'){
      $img = [];
    }
Внутри скобок заполняйте id изображений вместе с владельцем, получить их можно из адресной строки открытого изображения:
Если этот id начинается с минуса, то его обязательно оставляем (это указывает что автором является группа), после чего такие id заносим в наш массив, пример:
$img = ['-183754490_456239026', '-183754490_456239025', '-183754490_456239024', '-183754490_456239023', '-183754490_456239022'];
Теперь нам нужно выбрать одно из них рандомным способом:
$rand_img = array_rand($img, 1);
При помощи array_rand мы выбрали одно изображение из массива (т.е. id слота в массиве), теперь давайте отправим его, для этого мы будем отправлять простое сообщение, но с дополнительным атрибутом из-за чего используем request:
$vk->request('messages.send', ['peer_id' => $peer_id, 'message' => 'Красивая не правда ли?', 'attachment' => "photo{$img[$rand_img]}"]);
'peer_id' => Переменная - используем $peer_id если бот должен отправлять в беседу или $id если отправляем личным сообщением пользователю
'message' => переменная - не обязательно, но я решил отправить сообщение 'Красивая не правда ли?'
'attachment' => "типа{переменная со всеми изображениями[сгенерированный id слота]" - Используем двойные кавычки ОБЯЗАТЕЛЬНО т.к. в одинарных нельзя указывать { } (переменные). мы к нашему id (владелец_фотография) прикрепили что это тип Фотографии и таким образом прикрепили его.

Автокик при выходе из беседы:
Для данного случая нам нужно получить акт, который произошел с пользователем, добавляем ко всем переменным:
$chat_act = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу)
В конце проверок на команды добавим:
if($chat_act->type == 'chat_kick_user'){
     // Исключаем
 }
В данном случае мы проверили, что пользователь покинул беседу ('chat_kick_user'), также можно проверить на любое другое действие, о которых вы можете узнать в разделе разработчиков VK
Теперь исключим из беседы этого пользователя,ничего сложного нет. Это как !kick, только без команды ( sweat_smile )
$vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $chat_act->member_id]);
В данном случае мы просто заменили $reply_author на id пользователя который указан в массиве с действием
Можно еще попрощаться с пользователем как я:
if($chat_act->type == 'chat_kick_user'){
    $userInfo = $vk->request("users.get", ["user_ids" => $id]);
    $first_name = $userInfo[0]['first_name'];
    $vk->sendMessage($peer_id, "@id{$chat_act->member_id} ({$first_name}) был исключен");
    $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $chat_act->member_id]);
  }

Это конец, если найдете какие-то недочеты, то пишите в комментариях 
(во время написания произошел съезд фрагментов кода из-за чего могут попадаться недочеты)

Также хочу вам показать фрагмент кода, как сделать переменную $nick, а не каждый раз получать её из базы. Для этого в начале кода (где получали имя) допишите:
  $get_user = R::findOne('users', 'user_id = ?', [$id]);
  $nick = $get_user['nick'];
  if(!$nick){
    $nick = $first_name;
  }
При обращении по нику мы получаем (в первом случае, если не зарегистрировать пользователь в нашей базе, второй наоборот):


Разработка ботов на заказ, любой сложности, обращаться:
 VK Дмитрий Котов, Сергей Котов mail: [email protected]
TELEGRAM: @seriamod
  • アレクセイ サモシュキン
  • 24.07.2019
  • 28 312
  • 53
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
[VK BOT] Полезные функции для бота вк (Часть 2)
[VK BOT] Полезные функции для бота вк (Часть 2)
4-09-2019, 07:43, PHP
[VK BOT] Полезные функции для бота вк (Часть 3)
[VK BOT] Полезные функции для бота вк (Часть 3)
29-09-2019, 08:15, Статьи / PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
  1. kronton

    kronton Гость 25 июля 2019 16:25

    годнота прилетела

  2. kronton

    kronton Гость 26 июля 2019 04:16

    Автор поста дай свой вк
    У меня пробелмы

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

      アレクセイ サモシュキン@アレクセイ 26 июля 2019 05:04

      https://vk.com/id540575911
  3. дед инсульт

    дед инсульт Гость 27 июля 2019 13:14

    не работает авто кик отсюда.
    1. Сергей Котов

      Сергей Котов@Сергей Котов 27 июля 2019 17:41

      у бота должна быть админка в беседе, тип доступа, да и вообще, для начала логи ошибок бы показать, посмотреть можно на сервере, в папке logs, файл папкассайтом.error.log
    2. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 31 июля 2019 05:27

      Нашел проблему:
      Замените $action = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу)
      На $chat_act = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу) 
      1. Сергей Котов

        Сергей Котов@Сергей Котов 31 июля 2019 11:15

        wink
      2. дед инсульт

        дед инсульт Гость 7 августа 2019 02:00

        ну, почти)

        if($chat_act->type == 'chat_kick_user'){    
        // Исключаем
        {

        в скобках ошибка)))))
        1. アレクセイ サモシュキン

          アレクセイ サモシュキン@アレクセイ 7 августа 2019 06:35

          Ой и правда. Извиняюсь, спасибо что подсказали  blush 
  4. Сергей Коваль

    Сергей Коваль@Сергей Коваль 5 августа 2019 18:07

    А почему название команды сменить нельзя?

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

      アレクセイ サモシュキン@アレクセイ 5 августа 2019 19:39

      Кто сказал, что нельзя?

  5. Арман Саргсян

    Арман Саргсян@Арман Саргсян 11 августа 2019 13:56

    как можно сделать так чтобы он реагировал только на выход из беседы,при использовании chat_kick_user,он реагирует и на исключение и на выход,как распределить если вышел то действие одно,если кикнули то действие другое?
    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 11 августа 2019 16:44

      Вроде бы не как. Когда происходит действие, вк нам отправляет лишь поля, по которым нельзя это определить
      1. Арман Саргсян

        Арман Саргсян@Арман Саргсян 11 августа 2019 16:47

        Просто знаю бота одного в вк для бесед,если выходит человек , то бот отправляет смс  в чат,а если исключаешь человека этого то он не реагирует,вот и думал сидел интересно как разработчики определяют
        1. Арман Саргсян

          Арман Саргсян@Арман Саргсян 11 августа 2019 18:21

          нашел способ,if from id == member_id ,значит пользователь вышел ,иначе его исключили 
          1. アレクセイ サモシュキン

            アレクセイ サモシュキン@アレクセイ 12 августа 2019 07:36

            Ага, понял. Учту )) Спасибо
  6. HotBot

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

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


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

                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]);
            $userInfo = $vk->request("users.get", ["user_ids" => $kick_id]);
    $first_name = $userInfo[0]['first_name']; // Имя исключаемого пользователя 
    $last_name = $userInfo[0]['last_name']; // Фамилия исключаемого пользователя

    $vk->sendMessage($peer_id, " Пользователь @id$kick_id ($first_name $last_name) был исключен :-)"); 

        }
        } else {
                $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");
            
            
            
     
             }
        if($cmd == 'х команды'){
           if($chat_id < 0){
            $vk->sendMessage($peer_id,"
           текст 
             ");
        
        }else{ 
             $vk->sendMessage($peer_id,"
            текст
             "); 
           }
         }   
        }
    }  





    ___________________________

    В чем проблема? я в php нуб поэтому могут быть тупейшие ошибки.

    если убрать cmd все работает атлишна. опечатка/скобки и тд. буду благодарен
    1. アレクセイ サモシュキン

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

      Ответил в ЛС
      1. Галиев Нурислам Рафисович

        Галиев Нурислам Рафисович Гость 11 декабря 2021 21:56

         $bot->sendMsg($user_id, "Успешно.");

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

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

          Сергей Котов@Сергей Котов 14 декабря 2021 16:44

          $vk->sendMessage($id, '', ['sticker_id' => '7958']);

  7. Xxxx Xxxx

    Xxxx Xxxx@Xxxx Xxxx 3 сентября 2019 14:19

    Добрый день, подскажите как просто отправить картинку?
  8. Никита Майоров

    Никита Майоров@Никита Майоров 10 сентября 2019 14:44

    Как можно при кике группы указать ее название и айди? Сейчас выходит такое: ub123456789 ()
    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 10 сентября 2019 16:39

      Через запрос groups.getById
      https://vk.com/dev/groups.getById
  9. SLAVACTC

    SLAVACTC@maxim 15 сентября 2019 19:14

    elseif($cmd == '!kick'){
    ошибка синтаксиса
    1. Сергей Котов

      Сергей Котов@Сергей Котов 4 октября 2019 13:59

      Потому что нужно последовательно вставлять все как в статье,

        if($cmd == '!cmd'){  

      } elseif($cmd == '!kick'){
    2. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 4 октября 2019 14:48

      Переработал статью. Теперь все команды можно использовать без соблюдения последовательности команд
  10. naughty555

    naughty555@Витя Коротков 4 октября 2019 01:14

    Как сделать прикрепление сразу нескольких изображений в 1 сообщении?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 4 октября 2019 14:09

      Использовать новую библиотеку, там есть удобный конструктор сообщений:


      <?php
      
      require_once "src/autoload.php"; //Подключаем библиотеку
      use DigitalStar\vk_api\Message as Message;
      use DigitalStar\vk_api\VK_api as vk_api;
      
      const VK_KEY = ""; // Токен сообщества
      const ACCESS_KEY = ""; // Тот самый ключ из сообщества
      const VERSION = "5.81"; // Версия API VK
      
      
      $vk = new vk_api(VK_KEY, VERSION);
      $my_msg = new Message($vk);
      $data = json_decode(file_get_contents('php://input'));
      
      if ($data->type == 'confirmation') {
      exit(ACCESS_KEY);
      }
      $vk->sendOK();
      $id = $data->object->from_id;
      $peer_id = $data->object->from_id;// Узнаем ID пользователя, кто написал нам
      
      if ($data->type == 'message_new') {
      
      &nbsp; &nbsp; &nbsp;if ($payload == 'btn_5'){
      $my_msg->setMessage("Оформление сделано для паблика @kotoffs (KotOFF)"); //добавить в конструктор сообщение
      $my_msg->addImage('img/Fh1BqkffpC4.jpg'); // 1 картинка
      $my_msg->addImage('img/Fh1BqkffpC4.jpg'); // 2 картинка
      $my_msg->send($peer_id);} //отправить пользователю
      
      }


      Картинки залить на сервер, у меня в папке img.Скачать библиотеку: https://github.com/digitalstars/simplevk

      Распаковать на сервер папку src, все остальное работает точно так же, как и в любой статье. В ближайшее время обновлю все статьи на новую библу, а пока можете скачать с гита и пользоваться

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

        MrTNTminer@MrTNTminer 21 декабря 2019 00:26

        Как на API 5.103 это сделать? Не получается сделать данный код, ничего не отправляет.
        1. Сергей Котов

          Сергей Котов@Сергей Котов 21 декабря 2019 20:35

          заменить 

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


          на

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

          1. MrTNTminer

            MrTNTminer@MrTNTminer 21 декабря 2019 20:38

            Я брал исходник из вашей статьи про API 5.103, там уже это все было. Может дело в этом? Если да то как сделать на тех исходниках которые были в вашей статье, или нужно делать ИМЕННО на этих?
            1. Сергей Котов

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

              Очень просто, добавить к object-> это message-> во всем коде где это встречается 
            2. MrTNTminer

              MrTNTminer@MrTNTminer 21 декабря 2019 20:44

              Хорошо, попробую. Спасибо!
            3. MrTNTminer

              MrTNTminer@MrTNTminer 22 декабря 2019 02:19

              Сделал как вы сказали - ничего не получилось, бот не читает сообщения.
            4. Сергей Котов

              Сергей Котов@Сергей Котов 22 декабря 2019 23:29

              версия апи 5.103 должна стоять везде и скрипте и настройках в вк, смотрите лог  ошибок
            5. MrTNTminer

              MrTNTminer@MrTNTminer 22 декабря 2019 23:45

              API установлен правильно, в логах ничего нету.
              Когда я пытаюсь поставить $my_msg = new Message($vk); между:
              $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR);
              ТУТ
              $data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
              $vk->sendOK(); //Говорим vk, что мы приняли callback

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

              Если ставлю в переменные:
              // ====== Наши переменные ============
              $peer_id = $data->object->message->peer_id;
              $id = $data->object->message->from_id; // Узнаем ID пользователя, кто написал нам
              $message = $data->object->message->text; // Само сообщение от пользователя
              $userInfo = $vk->request("users.get", ["user_ids" => $id]);
              $first_name = $userInfo[0]['first_name']; // Имя пользователя 
              $last_name = $userInfo[0]['last_name']; // Фамилия пользователя
              $my_msg = new Message($vk);
              // ====== *************** ============

              И делаю такой код:
              if ($data->type == 'message_new') {

              if ($payload == '!test'){
              $my_msg->setMessage("TEST"); //добавить в конструктор сообщение
              $my_msg->addImage('img/1.jpg'); // 1 картинка
              $my_msg->addImage('img/2.png'); // 2 картинка
              $my_msg->send($peer_id);} //отправить пользователю

              }

              Ничего не работает. Тупо не отвечает и бот опять ломается.
  11. ronin-24ru

    ronin-24ru@Артём Макарович 16 декабря 2019 19:37

    Уведомление о выходе участника есть, но кикать не кикает
  12. f0344076

    f0344076@Grizli 12 января 2020 18:45

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

      Сергей Котов@Сергей Котов 12 января 2020 22:23

      Проверяй ID Бота

      if ($kick_id == -1234567) // ид бота
      sendMessage($peer_id, "Я себя кикать не буду!");
      1. f0344076

        f0344076@Grizli 13 января 2020 08:36

        ???


        elseif($cmd == 'кик'){
            if($vk->isAdmin($peer_id, $id)){
            if($reply_author == ''){
              $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали пользователя, которого нужно кикнуть");
            }else{
              $reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
              $vk->sendMessage($peer_id, "Администратор @id{$id} исключил вас за нарушение правил беседы!");
              $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
            }
            }else{
              $vk->sendMessage($peer_id, "У вас нет доступа!");
            }
        }
      2. f0344076

        f0344076@Grizli 15 января 2020 15:37

        Так а куда вставлять в этом коде? Не работает, куда бы не вставлял.
        1. дд

          дд Гость 15 января 2020 22:42

          Замени 

          if($vk->isAdmin($peer_id, $id)){

          на 

          if($vk->isAdmin($peer_id, $id)){
          if ($kick_id == -1234567) {// ид бота
          sendMessage($peer_id, "Я себя кикать не буду!");
          exit();}
          1. f0344076

            f0344076@Grizli 16 января 2020 21:10

            Кикает всё-равно.
            1. дд

              дд Гость 16 января 2020 23:26

              укажи ид бота своего, вместо -1234567 
            2. f0344076

              f0344076@Grizli 17 января 2020 10:47

              Так и сделал.
            3. Сергей Котов

              Сергей Котов@Сергей Котов 17 января 2020 22:40

              код в студию 
            4. f0344076

              f0344076@Grizli 30 января 2020 00:49

              elseif($cmd == 'кик'){
                  if($vk->isAdmin($peer_id, $id)){
              if ($kick_id == -62262758) {// ид бота
              sendMessage($peer_id, "Я себя кикать не буду!"); 
              exit();}
                  if($reply_author == ''){
                    $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали пользователя, которого нужно кикнуть");
                  }else{
                    $reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
                    $vk->sendMessage($peer_id, "Администратор @id{$id} исключил вас за нарушение правил беседы!");
                    $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
                  }
                  }else{
                    $vk->sendMessage($peer_id, "У вас нет доступа!");
                  }
              }

              В итоге по пересланному сообщению кикает вообще всех.
              И себя. И админов. И создателя.

              Беседа группы.
            5. TREiV

              TREiV@Дмитрий Котов 30 января 2020 14:02

              Возьмите решение отсюда ​https://kotoff.net/article/10-sozdaem-sobstvennogo-bota-vk-podrobnaja-instrukci
              ja-kak-sozdat-bota-vk-za-5-minut.html
              ​​​

              Возьмите решение отсюда ​https://kotoff.net/article/10-sozdaem-sobstvennogo-bota-vk-podrobnaja-instrukci
              ja-kak-sozdat-bota-vk-za-5-minut.html
              ​​​
  13. Гость Никита

    Гость Никита Гость 22 июня 2020 08:30

    Скажите, как сделать так, чтобы бот закреплял только что присланное им сообщение? 
  14. Konstanta

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

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

    }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. Сергей

      Сергей Гость 23 ноября 2021 13:52

      if (mb_substr($cmd,0,4) == '!ник'){

      //$cmd,0,4 - значит первые 4 символа будут принадлежать к команде cmd

          $new_nick = mb_substr($message, 5);

      //$message, 5 - значит что все сииволы после 5 символа будут принадлежать к $new_nick


  15. Димон

    Димон Гость 14 февраля 2022 12:48

    Автокик не работает из беседы группы

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

      Сергей Котов@Сергей Котов 23 февраля 2022 19:45

      Там такое событие не приходит, поэтому и не работает

{login}

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

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

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

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