исходный код бота для вк
Чат-бот для Вконтакте на ASP.NET Core C#
В данной статье представлен пошаговый пример создания простого чат-бота в социальной сети VK на ASP.NET Core C#.
Глава 1. Подготовка
Начнем с создания и настройки сообщества.
Выбираем любой тип сообщества
Заполняем поля любыми данными и готово! Группа создана.
Приступим к настройке API
Создаем API ключ (Разрешаем все)
Чтобы реагировать на какие-либо события, наш скрипт должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll. Мы будем реализовывать Callback API.
Callback API — это инструмент для отслеживания активности пользователей в сообществе ВКонтакте. С его помощью можно реализовать, например:
Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдет какое-либо событие (например, придёт новое сообщение), либо истечет заданное время ожидания.
Используя Callback API, нам не потребуется регулярно повторять запросы, чтобы отслеживать обновления — мы будем получать их мгновенно.
Настройка Callback API
Выбираем последнюю версию API
Выбираем тип события «входящее сообщение».
Глава 2. Реализация Callback API
Запускаем любимую IDE, создаем ASP.NET Core Web Application.
Тип проекта: Web Api
Framework: netcoreapp 2.2
Для подтверждения адреса сервера нам потребуется вернуть строку с уникальным значением.
Берем ее в настройках Callback API.
Здесь мы будем хранить все ключи, которые будут задействованы в разработке.
Когда в сообществе произойдет событие, ВКонтакте отправит на сервер запрос с данными в формате JSON с основной информацией об объекте, вызвавшем данное событие.
Для удобства десериализации входящего JSON воспользуемся паттерном Data Transfer Object (DTO).
Для обработки входящих запросом создадим CallbackController.cs.
Обратите внимание: после получения уведомления Ваш сервер должен возвращать строку «ok» и статус HTTP 200. Если сервер несколько раз подряд вернет ошибку, Callback API временно перестанет отправлять на него уведомления
Callback API готов!
Глава 3. Вк?
Для взаимодействия с VK API на C# воспользуемся библиотекой VkNET
Установка через Nuget:
Package manager:
PM> Install-Package VkNet
.NET CLI:
> dotnet add package VkNet
Глава 4. Больше функционала!
Перед расширением логики бота, авторизуем группу в нашем веб-приложении.
Для этого регистрируем IVkApi в IoC-контейнере.
Класс Startup.cs метод ConfigureServices.
Теперь расширим наш CallbackController.cs, добавив обработку входящих сообщений.
Внедряем IVkApi по аналогии с IConfiguration.
И сам кейс, который будет ловить новые сообщения. В нем мы добавить немного логики.
RandomId — уникальный (в привязке к API_ID и ID отправителя) идентификатор, предназначенный для предотвращения повторной отправки одинакового сообщения. Сохраняется вместе с сообщением и доступен в истории сообщений.
Заданный RandomId используется для проверки уникальности за всю историю сообщений, поэтому используйте большой диапазон(до int32).
PeerId — идентификатор назначения.
Text — текст личного сообщения. Обязательный параметр, если не задан параметр attachment.
Глава 5. Деплой
Теперь нам потребуется сервер, куда будут направлены все запросы. Один из бесплатных вариантов это Heroku.
После регистрации на сайте, нам предложат создать новое приложение.
Вводим название проекта.
После создания проекта будет перенаправление на страницу Deploy
Для Heroku CLI требуется Git. Если у вас еще не установлен Git, то скачайте его перед установкой CLI.
Для начала скачаем Heroku CLI.
Авторизуем Heroku аккаунт.
$ heroku login
Переходим в проектный каталог.
$ cd (путь до проекта)
$ git push heroku master
И идем делать чаёк.
Когда наше приложение будет загружено на Heroku, то мы сможем открыть его по следующей ссылке https://**PROJECT_NAME**.herokuapp.com/
Возвращаемся в нашу группу, и в настройках Callback API указываем ссылку,
обращаясь к Callback контроллеру.
https://**PROJECT_NAME**.herokuapp.com/api/callback
Вк отправит JSON запрос на наш сервер, чтобы подтвердить адрес. После ответа будет выведено следующее уведомление: Адрес сервера успешно сохранён
Теперь напишем нашему боту в личные сообщения.
Создание VK чат-бота на базе VkBotCore C#
Данная статья создана для ленивых людей, которые не хотят много кодить и иметь дело со всей «начинкой».
Подготовка группы
Для начала нам необходимо создать сообщество, которое будет привязано к нашему боту.
Для этого заходим в раздел «Сообщества» и нажимаем «Создать сообщество»
Теперь настроим его для работы с Callback-API //Подробнее про Callback-API
Переходим в «Управление»>>
>>«Настройки»>>«Работа с API»
Создаём ключ доступа со всеми разрешениями и выписываем его, он нам ещё пригодится
Далее переходим на вкладку Callback-API, Выбираем последнюю версию API и выписываем указанный код конфирмации
Осталось включить сообщения. Переходим в раздел «Сообщения»>>«Настройки для бота» включаем и сохраняем настройку
Подготовка сервера
Мною рассмотрен пример с VPS сервером на Ubuntu 18.04
Вводим следующие команды:
Команда для регистрации ключа Microsoft и веб-канала:
Обновляем продукты, доступные для установки:
Для Software Development Kit версии:
После установки среды проверим её готовность командой:
Установка и настройка
Переходим непосредственно к боту.
Скачиваем и выгружаем архив со сборкой.
Открываем файл appsettings.json
Вставляем в значения AccessToken ключ доступа и в значение Confirmation ключ конфирмации, сохранённые ранее.
Сохраняем и возвращаемся в консоль.
Командой 《 cd «путь к папке» 》 переходим к папке со сборкой и вводим команду для запуска:
Остаётся привязать бота к группе. Для этого в разделе Callback-API в поле адреса вписываем домен, к которому привязан сервер с путём /api/callback
Если всё сделано правильно, то после подтверждения появится зелёная галочка.
Создание плагина
Базовые функции VkBotCore как чат-бота включают в себя только 2 команды: /help и /everyone
Для увеличения функционала необходимо написать плагин.
Плагины представляют из себя библиотеку классов с базовым функционалом, необходимым для подключения, как плагина.
Создадим новый проект
Подключим к проекту библиотеку vkBotCore.dll из сборки
Добавляем using на vkBotCore.Plugins и наследуем основной класс от Plugin
Добавим команду hello, чтобы она отвечала Привет
Теперь создадим в папке сборки новую папку с названием plugins
Сохраним в ней собранный плагин
Создание и интегрирование бота VK в группу через VkBotLongPoll [Python]
В этой статье мы создадим бота и интегрируем его в группу VK на Python 3.x
Для кого эта статья?
Для тех, кто хочет написать простого бота для своего сообщества, умеющего определять команды и выводить соответствующий ответ
Основные стадии
Создание группы-бота
Начнем мы с создания бота, а именно группы в ВК.
Для это нужно зайти в «группы» → «создать сообщество».
Выберите любой тип сообщества и введите название, тематику группы.
На открывшейся странице настроек, выберите «Работа с API».
Далее, необходимо создать API-ключ.
Затем выберите нужные вам параметры с доступом для вашего API-ключа.
Скорее всего, вам придётся подтверждать действие в ВК с помощью мобильного телефона. Затем скопируйте полученный API-ключ где-нибудь в файл. Он нам еще понадобится.
Там же разрешим добавить сообщество в группы, если мы хотим чтобы бот мог получать сообщения из группы.
Настройка Long Poll
Для работы с Long Poll API используем библиотеку vk_api. Установить его можно через pip.
Перед работой сохраним наш API-токен в файл config.py оттуда мы будем загружать наш ключ.
Создадим наш первый скрипт. Назовем server.py, который будет основным скриптом сервера.
Импортируем нужные нам модули:
Теперь создадим файл server_manager.py, в котором будет управлять разными серверами. Пока для тестов пропишем лишь вызов класса Server:
Важно!
Бот может писать сообщения только тем пользователям, которые разрешили боту присылать сообщения. Сделать это можно на странице сообщества или же первым написать боту
Если все сделано правильно, то бот пришлет нам личное сообщение.
Теперь добавим бота в группу и научим его обрабатывать сообщения.
Для добавления бота в группу нужно нажать «Пригласить в беседу» в правом меню сообщества.
Запустим его через server_manager.py:
Теперь, если напишем сообщение в группу, то сможем увидеть объект event’a:
Из этих данных нам следует обратить внимание на type, object.from_id, object.id, object.peer_id, object.text. Данные полученные из сообщений и из группы ничем сильно не отличаются, кроме object.peer_id и object.id.
Если присмотреться, object.id у всех сообщений из группы равен 0, а сообщения из личных нет. Таким образом, можно разделить сообщения получаемые из группы и из личных.
Обработаем полученные данные внутри класса Server:
Напишем боту два сообщения: один из группы, один в личку. Тогда получим:
Username: Артур
From: Санкт-Петербург
Text: [club172998024|@club172998024] this is a message from group
Type: group message
—
Username: Артур
From: Санкт-Петербург
Text: this is a private message
Type: private message
—
Примечание
Как вы могли заметить перед сообщением в группе есть [club172998024|@club172998024], для правильной обработки команды следует избавиться от всего содержимого в квадратных скобках, либо разрешить боту доступ ко всей переписке
Как мы видим, vk_api позволяет нам легко использовать методы VK API. К примеру, сейчас мы использовали метод users.get
Список всех методов доступен по ссылке: vk.com/dev/methods
Советую изучить и поэкспериментировать с методами, которые вас заинтересуют. Благо VK предоставило нам очень хорошую документацию, еще и на русском языке.
Чтобы закрепить материал, давайте добавим функцию отправки сообщения через метод messages.send:
— идентификатор назначения. Чтобы ответить на чье-то сообщение, в качестве параметра peer_id укажем event.object.peer_id. То есть, пошлем сообщение туда, откуда пришел запрос.
Изменим метод start:
Теперь, если бот примет сообщение, то он нам ответит в таком стиле:
Артур, я получил ваше сообщение!
server.py
server_manager.py
Задачка для закрепления материала:
Создайте функцию, которая принимает параметр peer_id и посылает пользователю фотографию загруженную в сообщество. Полезный док: vk.com/dev/messages.send
Нас интересует лишь выделенная часть: photo-172998024_456239017. Передадим её в качестве аргумента метода messages.send:
Добавим его в метод start и получим:
Вот и все основы. Главное, научиться пользоваться vk_api, используя различные методы, весь их список: vk.com/dev/methods. Если вы научитесь работать с документацией VK API, то сможете создавать ботов различной сложности и назначений. Пример моего бота для учебной группы: github.com/AppLoidx/GroupAssistant/tree/master
Теперь приступим к созданию логики бота
Создадим commander.py, который будет принимать команды и возвращать ответ, передаваемый пользователю Vk:
Построим архитектуру нашей программы:
Чтобы определить режим и команду, создадим два файла command_enum.py и mode_enum.py. С помощью них мы будем определять режимы и команды через методы класса Enum:
command_enum.py:
mode_enum.py:
Для смены режимов используем [слэш(«/»)+ ], а все остальные команды примем как команды.
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
По началу покажется что это не возможно, но поверьте, Вам стоит только начать и все получится. Так как бота мы будем делать на сообществе, нам нужно его создать или использовать уже созданное
Данный токен сообщать другим пользователям нельзя, иначе Вы рискуете потерять доступ к своему сообществу, в моем случае после написания статьи я его удалю и он станет не активный. Сохраните токен в блокноте, он нам пригодится.
С настройками сообщества пока закончим, но в данный раздел нам нужно будет еще вернутся, теперь приступаем к написанию кода для нашего будущего бота. Конечно в данной статье я не буду показывать основные функции своего бота, а лишь небольшую часть, остальное Вы сможете сделать сами при желании, это лишь начальный этап создания бота, учитывайте это.
Бота мы будем писать на PHP.
Для удобства написания кода, я рекомендую скачать Sublime Text, один из лучших редакторов, самое главное удобный и практичный.
Теперь создаем константы, они нужны для удобства
Их нужно заполнить. в кавычках вставляем тот самый длинный код (токен), вторую константу мы пока пропускаем, а в 3 пишем версию API, которую мы будем использовать. Давайте возьмем 5.81. Нам так же нужно указать и ACCESS_KEY его мы берем в сообществе.
В моем случае это: be20ea35 у Вас будет другой, копируем и вставляем во вторую константу. У Вас должно получится вот так:
Продолжаем. Теперь нам нужно создать экземпляр класса работы с api, получить и декодировать JSON пришедший из VK и сообщить VK что мы приняли callback, все это кажется сложным, но на деле все очень просто и понятно.
Получаем следующий код:
Теперь приступаем к самому интересному, обработке сообщений и созданию команд. Для начала нам нужно получить объект новых сообщений, для его дальнейшей обработки:
Теперь можно создать первую команду! Наша команда будет !бот, давайте напишем ее:
Этот код работать не будет, так как мы не создали переменные $id и $message давайте создадим их. Переменные создаем выше строки
if ($data->type == ‘message_new’) <
Статья обновлена 17.12.2020
Теперь часть переменных инициализируется в функции InitVars но для примера оставим как их можно задавать еще!
У нас получается следующий код:
Это уже полностью рабочий бот, Вы уже можете его запустить, давайте это и сделаем, потом вернемся в код и напишем еще 1 команду.
Нам понадобиться любой хостинг, на котором будет установлен PHP версии не ниже 5.6, стоимость такого хостинга от 30 рублей и выше, статью о том как работать с хостингом я напишу позже, у меня есть видео ролик по работе с игровым хостингом, скрипт будет работать и там. Видео можете посмотреть ниже
Допустим Вы разобрались с хостингом и готовы установить туда сам скрипт. Заходим на сервер и загружаем туда наш скрипт с ботом VK и библиотеку. Саму библиотеку скачать можно только после регистрации!
[/hide]
Скачиваем архив, туда я так же положил и скрипт, в нем нужно будет заменить лишь токен и строку, которую скрипт возвращает VK и дописать 2 команду при желании, если она Вам будет нужна.
Теперь нужно получить прямую ссылку к скрипту, в моем случае скрипт залит в корень сайта и ссылка выглядит так:
копируем ссылку, у вас будет другая, возможно состоящая даже из IP адреса, если используете игровой сервер или хостинг без домена. Возвращаемся к настройкам бота в сообществе и вставляем ссылку:
Выбираем версию API 5.126, указываем ссылку и подтверждаем, если все сделали правильно, VK сообщит нам об этом
Если сейчас написать боту, он не ответит, так как нам нужно включить тип событий:
Этого будет достаточно, что бы бот начал функционировать и отвечать нам. Давайте это проверим:
Теперь нам нужно создать саму команду:
Весь исходный код выглядит так:
У нас получилось всего 37 строк кода
Что бы Вы понимали, бот KotOFF и Conference Kot содержит 1761 строку кода! Хотя функционал не самый большой на данный момент.
Давайте проверим работу команды:
Отлично! Все работает. Если данная статья будет интересна, я напишу продолжение и там мы будем создавать новые команды для нашего бота, а пока только вводный курс о создании собственного бота с удобной и очень классной библиотекой, которая помогает упросить код и облегчить работу с методами API. Вместе с Вами учусь и я, ведь я не являюсь программистом и делюсь с вами личным опытом, который я получил совсем недавно.
UPD: Что бы бот отвечал и в беседах нужно заменить частично код, инструкция ниже
Если возникли вопросы или трудности, пишите в комментарии, я с радостью отвечу на них.
На этом у меня все, со временем буду корректировать статью и дополнять ее.
Данный бот отлично подойдет как автоответчик или инструкция (FAQ) для вашего сообщества.
Скачать архив с ботом и библиотекой можно после регистрации на сайте! Регистрация доступна через социальные сети 🙂
Рекомендуем размещать скрипты на таких хостингах: firstvds.ru или hostline.ru
СТАТЬЯ ОБНОВЛЕНА 17.12.20 ДЛЯ ПОДДЕРЖКИ ПОСЛЕДНИХ ВЕРСИЙ АПИ ВК 5.126
Исходный код бота для вк
Чат-бот — это скрипт на Вашем сервере, который получает уведомления о новых событиях из ВКонтакте и обрабатывает их. Например, определяет текстовую команду в сообщении от пользователя и присылает в ответ какое-нибудь изображение.
Если ранее Вы не работали с API ВКонтакте, перед началом работы мы рекомендуем Вам прочитать это руководство.
Для подключения чат-бота Вы можете использовать любое своё сообщество ВКонтакте — группу, встречу или публичную страницу. Ваш бот должен соответствовать правилам, подробнее о них Вы можете узнать здесь.
Первым делом нужно указать, что в вашем сообществе будет работать бот. Для этого перейдите в «Управление сообществом» →»Сообщения» →»Настройки для бота» и включите пункт «Возможности ботов».
Сообщество — это точка входа для пользователей, которые будут общаться с Вашим ботом. Стоит позаботиться о том, чтобы оно выглядело привлекательно и содержало описание Вашего бота, иначе его действия могут стать сюрпризом для пользователей. Не забудьте включить сообщения в Вашем сообществе («Управление сообществом» → «Сообщения»), когда бот будет готов к использованию, чтобы ему можно было написать.
Итак, если Вы выбрали сообщество, можно приступать к настройке уведомлений.
Ключ доступа потребуется Вам для получения обновлений (в Long Poll), а также для работы с API.
Откройте раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выберите вкладку «Работа с API» и нажмите «Создать ключ доступа».
Отметьте необходимые права доступа и подтвердите свой выбор.
Вы можете создать несколько ключей с разными правами доступа. Ключи нельзя размещать публично — узнав его, третье лицо может обращаться к API ВКонтакте от имени Вашего сообщества. Если ключ был скомпрометирован, необходимо удалить его из списка — после этого он станет недействителен.
Также Вы можете получить ключ доступа с помощью OAuth. Используйте схему авторизации Authorization Code Flow.
Чтобы пользователи смогли добавлять бота в беседы, необходимо включить эту возможность в настройках. Перейдите в «Управление сообществом» →«Сообщения» →«Настройки для бота» и поставьте галочку в пункте «Разрешать добавлять сообщество в беседы». После этого в сообществе появится кнопка «Пригласить в беседу», открывающая модальное окно со списком бесед.
Сейчас у бота в беседе есть три уровня доступа:
Важное замечание: для получения событий из беседы версия API у callback-сервера должна быть не ниже 5.80.
Чтобы реагировать на какие-либо события, Ваш скрипт должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll.
Callback API присылает уведомления на Ваш сервер, как только в сообществе происходит нужное событие. Событие может быть каким угодно: комментарий к фотографии, новая запись на стене, вступление в сообщество, отправка сообщения, и многое другое. Посмотреть полный список доступных событий, а также прочитать подробнее о настройке Вы можете в документации Callback API.
Для подключения Callback API в сообществе нужно указать адрес скрипта на Вашем сервере и выбрать события, которые Вы хотите получать. Например, если Ваш бот должен распознавать текстовые команды, отметьте событие «Входящее сообщение».
Уведомления от Callback API выглядят как JSON с основной информацией о событии:
В этом примере пользователь с id 123456 отправил сообществу сообщение с текстом «start».
Для каждого события Callback API отправляет отдельный запрос на Ваш сервер. Ваш скрипт должен подтверждать получение каждого запроса, отправляя в ответ строку «ok».
Второй способ получения обновлений — это подключение к Bots Long Poll API. Прочитать подробнее о работе с Bots Long Poll API Вы можете на этой странице.
Когда произойдет новое событие или истечет время ожидания, сервер вернет Вам ответ в формате JSON:
Начиная с версии API 5.103 информация о доступных функциях будет приходить вместе с событием message_new в Callback API и Bots Long Poll API. Она будет находиться в объекте client_info:
По мере появления новых возможностей в объекте client_info и массиве button_actions могут появляться новые сущности.