Сегодня мы расскажем: как создать бота для ВК. Тебя ждет пошаговая инструкция.
В качестве яп, мы будем использовать 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 и всё!
Бот успешно запущен!