Постараюсь поделиться своей библиотекой для работы API VK.
Что касается вопроса из заголовка - не знаю , хотелось дать возможность пишущим на С++ разработчикам поработать с ВК не меняя своих привычек.
#include "cpp_vk_lib/runtime/setup_logger.hpp"
#include "cpp_vk_lib/runtime/signal_handlers.hpp"
#include "cpp_vk_lib/vk/long_poll/long_poll.hpp"
#include "cpp_vk_lib/vk/config/config.hpp"
#include "cpp_vk_lib/vk/events/message_new.hpp"
#include "cpp_vk_lib/vk/methods/basic.hpp"
#include <iostream>
int main(int argc, char* argv[])
{
if (argc != 2) {
std::cerr << "Usage: ./long_poll <config.json>" << std::endl;
return 1;
}
vk::config::load(argv[1]);
runtime::setup_signal_handlers();
runtime::setup_logger(spdlog::level::level_enum::trace);
asio::io_context io_context;
vk::long_poll api(io_context);
api.on_event(vk::event::type::message_new, [](const vk::event::common& event) {
vk::event::message_new message = event.get_message_new();
vk::method::messages::send(message.peer_id(), "response");
});
api.run();
}
Причины создания
Однажды я задался мыслью узнать, что нужно для того, чтобы создать чат-бота используя С++. Первое, что я сделал - начал искать готовые решения, и нашёл эту библиотеку. Она, если честно, совсем мне не понравилась, как и большинству моих знакомых. К её главным недостаткам можно отнести неоднородный дизайн и недостаточно полно описанный модуль работы с сетью. В общем, я решил создать свой "аналог".Что касается вопроса из заголовка - не знаю , хотелось дать возможность пишущим на С++ разработчикам поработать с ВК не меняя своих привычек.
Краткий обзор
Библиотека разделена на 2 части: первая - так называемый runtime-модуль, который содержит в себе- код для работы с сетью;
- инструменты для базовых операций над строками;
- некоторые настройки для логгера;
- обработчики системных сигналов (обдумывается их полное удаление, ровно как и удаление трассировки стека).
- код для работы со вложениями, клавиатурой, событиями, long poll и механизмом OAuth;
- удобный интерфейс для конструирования запросов к VK API.
Цели
- Простой дизайн. Действительно, хотелось сделать так, чтобы пользователь не ограничивал себя чем-то, например отсутствием реализованных процедур для методов API, поэтому было принято решение сделать несколько жизненно необходимых функций для работы с методами API, а далее дать простор для работы конечному пользователю.
- Приемлимая производительность. Библиотека достаточно хорошо работает в многопоточных системах, полностью скрывая детали реализации асинхронного выполнения от пользователя.
Простой пример
Минимальный бот, слушающий события будет выглядеть так:#include "cpp_vk_lib/runtime/setup_logger.hpp"
#include "cpp_vk_lib/runtime/signal_handlers.hpp"
#include "cpp_vk_lib/vk/long_poll/long_poll.hpp"
#include "cpp_vk_lib/vk/config/config.hpp"
#include "cpp_vk_lib/vk/events/message_new.hpp"
#include "cpp_vk_lib/vk/methods/basic.hpp"
#include <iostream>
int main(int argc, char* argv[])
{
if (argc != 2) {
std::cerr << "Usage: ./long_poll <config.json>" << std::endl;
return 1;
}
vk::config::load(argv[1]);
runtime::setup_signal_handlers();
runtime::setup_logger(spdlog::level::level_enum::trace);
asio::io_context io_context;
vk::long_poll api(io_context);
api.on_event(vk::event::type::message_new, [](const vk::event::common& event) {
vk::event::message_new message = event.get_message_new();
vk::method::messages::send(message.peer_id(), "response");
});
api.run();
}
В заключение
Репозиторий. В данный момент ведутся некоторые работы по переработке сетевого модуля. В дальнейшем планируется реализовать long poll для пользователя, также есть желание немного доработать документацию.Зачем писать ботов ВК на C++?
Постараюсь поделиться своей библиотекой для работы API VK. Причины создания Однажды я задался мыслью узнать, что нужно для того, чтобы создать чат-бота используя С++. Первое, что я сделал - начал...
habr.com