Conogram: async Telegram Bot API client written in Rust
# Aims
- Full support of latest Bot API version _[no webhooks yet](#webhooks-support)_
- 1 to 1 API methods and entitities mapping
- Ease of use
# Features
- Fully async
- Utility extension methods for _(not all yet)_ API entities _(e.g. ``message.reply`` method)_
- Can be used in multithreaded context
- Full control over update handling
# TODO
- More handy entity extension methods
- #### Webhooks support
- More examples
# Logging
[How to enable logging in your executable](https://github.com/rust-lang/log#in-executables)
# Quick usage overview
## Using [Local Bot API Server](https://core.telegram.org/bots/api#using-a-local-bot-api-server)
```rust, no_run
let server_config = ApiServerConfig::local("http://localhost", 80, true);
let api_config = APIConfig::new("BOT_TOKEN", server_config)?
let api = API::new(api_config);
```
## Calling API methods
```rust, no_run
let mut api = API::new(/**/);
// Required request parameters are in the request constructor, optionals are set via builder-like methods
// ChatId can be username of a channel
let request = api.send_message("@channelusername","Text").reply_to_message_id(42);
// All requests implement IntoFuture
let message = request.await?;
// You can handle some common API errors automatically:
// 1. By wrapping manually
let message = API::request(request).await?;
// 2. Or by using a trait
use conogram::api::WrapRequest;
let message = request.wrap().await?;
```
## Mutating and calling requests by references
```rust, no_run
let mut request = api.send_message(chat_id, "Text");
for i in 0..5 {
request = request.chat_id(i);
// &Request implements IntoFuture too
let message = (&request).await?;
}
```
## Very-Mini-FAQ
**Q: Is it production-ready?**
A: The library is not thoroughly tested, some stuff may be broken, unconventional or unusable for you. The reason is I'm developing it for my personal use. But if you're using it too, suggestions on improvement are welcome