Опубликовано

Создание бота для соцсети ВКонтакте

как создать бота для вк

Сегодня мы расскажем: как создать бота для ВК. Тебя ждет пошаговая инструкция.

В качестве яп, мы будем использовать C#, а в качестве IDLE, будем использовать Visual Studio

 

Сделаем так, что бот будет отвечать на сообщение «работает?»

сообщением «Работает!» 

Это шаблон. Можете включить фантазию и сотворить все, что хотите.

 

Для начала нам нужно создать проект.

В роли шаблона выбираем: Консольное Приложение (.NET Core).

После создания проекта, нам нужно импортировать библиотеку Vknet, с помощью которой мы будем обращаться к методам VK API

Отображение vknet в nuget

https://yadi.sk/i/GfiwMFTFgdtc4w

 

Чтобы импортировать библиотеку нажмите на Средства>Диспетчер проектов NuGet>Управление пакетами NuGet для решения>Обзор, после чего, в текстовое поле вводите Vknet, и скачиваете библиотеку

 

Для начала нам нужно подключить все необходимые using

 

using System;

using VkNet;

using VkNet.Enums.SafetyEnums;

using VkNet.Model;

using VkNet.Model.RequestParams;

 

Далее введём все необходимые переменные:

 

      private static VkApi api = new VkApi(); // создаём экземпляр VkApi

       private static string key = » «; // сюда пишем api ключ группы(Его можно получить в настройках группы — Управление>Работа с api>создать ключ)

       private static int group_id; // сюда пишем ID группы, от лица которой бот будет слать сообщения

 

Теперь давайте сделаем авторизацию

Занесем ее в отдельный метод

 

public static void Auth()

        {

            api.Authorize(new ApiAuthParams()

            {

                AccessToken = key

            });

        }

Тут всё очень просто, мы обращаемся к выше созданному экземпляру VkApi и авторизируемся по ключу

 

Далее в методы Main (Всё что в этом методе, выполняется при старте программы), обратимся к этому методу, чтобы авторизироваться 

 

static void Main(string[] args)

{

Auth();

}

 

Отлично!

 

Теперь приступим к самой логике бота.

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

 

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

while(True)

{

  var s = api.Groups.GetLongPollServer(ulong.Parse(group_id.ToString()));

                   

var poll = api.Groups.GetBotsLongPollHistory(new BotsLongPollHistoryParams()

                    {

                        Server = s.Server,

                        Ts = s.Ts,

                        Key = s.Key,

                        Wait = 25

                    });

                    //проверяем появилось ли новое событие

                    if (poll?.Updates == null) continue;

}

Тут мы в переменную s, заносим данные LongPoll Сервера, далее в переменную poll, заносим как бы историю, что появилось нового в группе, в качестве параметров указывая полученные данные из переменной s

Строка — if (poll?.Updates == null) continue; отвечает за то, есть ли новое событие в группе, и если оно есть, то код продолжается.

 

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

Для этого пропишем следующий код

 

                  foreach (var a in poll.Updates)

                    {

                        if (a.Type == GroupUpdateType.MessageNew)

                        {

                            //получаем сообщение

                            string UserMessage = a.Message.Body.ToLower();

                            //получаем id отправителя

                            long? userID = a.Message.UserId;

                            if (UserMessage == «работает?»)

                            {

 

                            }

 

                        }

                    }

Тут мы “копаемся”, в полученных события и если, полученное событие равняется новому сообщению, то мы получаем текст этого сообщение и записываем в переменную UserMessage. Метод .ToLower(), отвечает за то, чтобы все заглавные буквы, превращались в обычные.

Далее в переменную userID мы записываем ID пользователя, который прислал нам сообщение, он нам понадобится для ответа на сообщение.

 

Теперь нам осталось только отправить ответ пользователю

 

                            if (UserMessage == «проверка»)

                            {

                                Random rnd = new Random();

                                api.Messages.Send(new MessagesSendParams

                                {

                                    Message = «Работает!»,

                                    UserId = userID,

                                    RandomId = rnd.Next(0, 99999)

                                });

                            }

тут мы создаем экземпляр Random, далее обращаемся к классу Messages и методу Send, в качестве параметров указывая сообщение, id пользователя которому мы отправим сообщение и RandomId, он нужен для того, чтобы сообщения не повторялись

 

И так, в конце у вас должен был получится такой код

 

using System;

using VkNet;

using VkNet.Enums.SafetyEnums;

using VkNet.Model;

using VkNet.Model.RequestParams;

 

namespace bot

{

    class Program

    {

 

        private static VkApi api = new VkApi();

        private static string key = «ключ api»;

        private static int group_id;

 

        static void Main(string[] args)

        {

            Auth();

            while (true)

            {

                //записываем данные для подключения к серверу

                var s = api.Groups.GetLongPollServer(ulong.Parse(group_id.ToString()));

                var poll = api.Groups.GetBotsLongPollHistory(new BotsLongPollHistoryParams()

                {

                    Server = s.Server,

                    Ts = s.Ts,

                    Key = s.Key,

                    Wait = 25

                });

                //проверяем появилось ли новое событие

                if (poll?.Updates == null) continue;

 

                //»копаемся» в новом событие

                foreach (var a in poll.Updates)

                {

                    if (a.Type == GroupUpdateType.MessageNew)

                    {

                        //получаем сообщение

                        string UserMessage = a.Message.Body.ToLower();

                        //получаем id отправителя

                        long? userID = a.Message.UserId;

                        if (UserMessage == «проверка»)

                        {

                            Random rnd = new Random();

                            api.Messages.Send(new MessagesSendParams

                            {

                                Message = «Работает!»,

                                UserId = userID,

                                RandomId = rnd.Next(0, 99999)

                            });

                        }

 

                    }

                }

            }

        }

 

        public static void Auth()

        {

            api.Authorize(new ApiAuthParams()

            {

                AccessToken = key

            });

        }

    }

}

 

Теперь комбинацией клавиш ctrl + f5 компилируем и запускаем код. Далее отправляем в личные сообщения группы “Проверка” и видим — бот нам отвечает!

 

Установка бота на VDS

 

VDS — Это виртуальный сервер, с помощью которого вы можете запускать свои скрипты. Одним из плюсов является то, что vds работает 24/7 и не зависит от вашего интернета. 

 

Теперь давайте разберемся как заставить бота работать на vds. Всё дело в том, что большинство VDS идут на Ubuntu, а как известно, Ubuntu не открывает .exe файлы

 

И так, откроем папку с проектом и перейдем по пути: bin>Debug>netcoreapp3.1

Видим, что в папке у нас есть bot.dll(Название может меняться в зависимости от того, как вы назвали проект)

 

Теперь подключаемся по FTP к нашему VDS и всё что находится в проекте, по пути bin>Debug>netcoreapp3.1, перекидываем на vds

 

Далее подключаемся по ssh к vds и устанавливаем dotnet(Как его установить можно прочитать тут

 

После чего пишем следующую команду — screen и нажимаем два раза Enter, это нужно для того, что бы после того, как мы отключились от ssh соединения бот оставался работать.

 

Далее вам нужно перейти в папку где находится бот, в моём случае он находится в папке root

cd /root/

 

Теперь пишет dotnet Названиеdllфайла.dll, нажимаем Enter и всё!

Бот успешно запущен!

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *