{"repo":"Smertig/banana","free":true,"listed":false,"github":"https://github.com/Smertig/banana","clone":"git clone https://github.com/Smertig/banana.git","description":"🍌 Modern C++ Telegram Bot API library","language":"C++","stars":43,"topics":["cpp17","telegram-bot-api","telegram-bot","coroutines","async-await","cpp20"],"license":"MIT","category":"workflow-automation","readme_excerpt":"🍌 banana - thin wrapper over Telegram Bot API written in C++17. Key Features - Simple API - Single interface for both blocking, non-blocking and even coroutine-based operations - Generic in terms of networking backend (bundled support for WinAPI , cpr and boost::beast ) - Extendable (see custom-agent example) - Automatically generated from Telegram Bot API 8.3 (thanks ark0f/tg-bot-api) - Cross-platform (tested on Windows, Linux, macOS) Example Building Library only To build the library without any external dependencies: Examples To build examples, you'll need vcpkg . The examples use manifest mode with an optional examples feature. Documentation Notes about breaking changes TL;DR: use designated initialization from C++20 and forget about breaking changes. Most of banana is automatically generated from the Telegram Bot API documentation. The main problem here is that there's no guarantee for the order of function parameters and members of types. Let's have a look at the following example: There are several similar ways to call send message : However, they differ in the way they are affected by breaking changes. Nothing prevents the Telegram API team from updating send message parameters (and documentation) in the following way: How does this change affect existing code? That's why it's highly preferable to use C++20 designated initialization instead of a raw aggregate initialization. There's also another case - when no new parameter is added, but existing parameters are swapp","default_branch":null,"files":null,"tree":[],"storefront":"/r/Smertig","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Smertig/banana/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}