#telegram #api #bot

telexide

An async Rust library for the telegram bot API

7 releases

0.1.6 Apr 28, 2021
0.1.5 Mar 9, 2021
0.1.4 Nov 10, 2020
0.1.3 Jun 6, 2020
0.1.1 Apr 28, 2020

#174 in Web programming

Download history 3/week @ 2022-01-13 2/week @ 2022-01-20 8/week @ 2022-02-17 4/week @ 2022-03-03 2/week @ 2022-03-10 51/week @ 2022-03-17 1/week @ 2022-03-24 3/week @ 2022-03-31 2/week @ 2022-04-07 1/week @ 2022-04-14 65/week @ 2022-04-28

68 downloads per month

Custom license

380KB
6K SLoC

Crate Docs Build Status Rust Version

telexide

Telexide is an easy to use library for making a telegram bot, built on tokio and hyper.

View the examples on how to make and structure a bot.

Use the ClientBuilder to easily create a Client object to your preferences and register commands with the create_framework macro and/or register your own update handlers, before running Client::start to start your bot. All of this is designed to be highly customisable. For further information about the client, please see the client's module-level documentation.

API calls are easy to make using the APIClient and the api data models, or create and use your own api client by implementing the API trait. For further information about the api client, please see the api's module-level documentation.

A default command framework is provided using the Framework object, providing easy handling of incoming telegram bot commands sent by users of your bot. For further information about the framework, please see the framework's module-level documentation.

Example Bot

A basic ping-pong bot can be written like:

use std::env;
use telexide::{api::types::SendMessage, prelude::*};

#[command(description = "just a ping-pong command")]
async fn ping(context: Context, message: Message) -> CommandResult {
    context
        .api
        .send_message(SendMessage::new(message.chat.get_id(), "pong"))
        .await?;
    Ok(())
}

#[tokio::main]
async fn main() -> telexide::Result<()> {
    let token = env::var("BOT_TOKEN").expect("no token environment variable set");

    ClientBuilder::with_framework(
        create_framework!("ping-pong", ping),
        token
    ).start().await
}

For more examples, please see the examples dir.

Features

  • easy to use and customisable client
  • long-polling based update handling
    • set your own timeout
    • set your own limit for updates gotten at once
  • easy to use, macro-based command framework
  • easy to use and heavily customisable api client
    • use your own hyper client
    • use your own api struct so you control the get and post methods
    • includes all telegram api endpoints
  • webhook based update handling

Planned:

  • choosing what you want from the lib using feature flags
  • subscribe to non-message events using command (or similar) framework
    • run command on receiving an inline query or answer to one
    • run command on receiving a poll that matches your requirements
  • wait_for style Context method to wait for an update matching your criteria
  • more builder methods for creating api data
  • methods on models for easier calling of API endpoints (like ChatMember::kick)

Installation

Add the following to your Cargo.toml file:

[dependencies]
telexide = "0.1.6"

Supported Rust Versions

The minimum supported version is 1.46. The current Telexide version is not guaranteed to build on Rust versions earlier than the minimum supported version.

Dependencies

~10MB
~192K SLoC