1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//! Contexts for update handlers.
//!
//! A context is a struct that is passed to update handlers, contains data about
//! the update, and provides methods that infer certain data from the update.
//! For example:
//!
//! ```no_run
//! # async fn foo() {
//! use tbot::prelude::*;
//!
//! let mut bot = tbot::from_env!("BOT_TOKEN").event_loop();
//!
//! bot.text(|context| {
//!     async move {
//!         let reversed: String = context.text.value.chars().rev().collect();
//!         context.send_message_in_reply(&reversed).call().await.unwrap();
//!     }
//! });
//! # }
//! ```
//!
//! Here, we set a [`text`][text-handler] handler for our bot. Whenever we get
//! a text message, the handler is called with a reference to
//! a [`Text`][text-context] context that contains data about the incoming data,
//! e.g. the text of the message. Then we call the [`send_message_in_reply`]
//! method on the context, which does what the name says: sends a message
//! in the same chat in reply to the incoming message, inferring your bot's
//! token and IDs of the chat and the message.
//!
//! All contexts have one common field named `bot`. Through this field, you can
//! call any API method you can call using a [`Bot`]:
//!
//! ```no_run
//! # async fn foo() {
//! # use tbot::prelude::*;
//! # let mut bot = tbot::Bot::new(String::new()).event_loop();
//! use tbot::types::chat;
//! const ADMIN_CHAT: chat::Id = chat::Id(0);
//!
//! bot.text(|context| {
//!     async move {
//!         context
//!             .bot
//!             .send_message(ADMIN_CHAT, "New message!")
//!             .call()
//!             .await
//!             .unwrap();
//!     }
//! });
//! # }
//! ```
//!
//! Most contexts implement certain traits, such as [`ChatMethods`]
//! or [`Pinnable`]. These traits share common methods between contexts,
//! e.g. [`send_message_in_reply`] you have seen above.
//!
//! [text-handler]: ../struct.Bot.html#method.text
//! [text-context]: ./struct.Text.html
//! [`send_message_in_reply`]: ./traits/trait.ChatMethods.html#method.send_message_in_reply
//! [`Bot`]: ../struct.Bot.html
//! [`ChatMethods`]: ./traits/trait.ChatMethods.html
//! [`Pinnable`]: ./traits/trait.Pinnable.html

#[macro_use]
mod macros;

mod animation;
mod audio;
mod chosen_inline;
mod command;
mod connected_website;
mod contact;
mod created_group;
mod data_callback;
mod deleted_chat_photo;
mod document;
mod edited_animation;
mod edited_audio;
mod edited_document;
mod edited_location;
mod edited_photo;
mod edited_text;
mod edited_video;
mod game;
mod game_callback;
mod inline;
mod invoice;
mod left_member;
mod location;
mod migration;
mod new_chat_photo;
mod new_chat_title;
mod new_members;
mod passport;
mod payment;
mod photo;
mod pinned_message;
mod poll;
mod poll_answer;
mod pre_checkout;
mod shipping;
mod sticker;
mod text;
mod unhandled;
mod update;
mod updated_poll;
mod venue;
mod video;
mod video_note;
mod voice;

pub mod fields;
pub mod traits;

pub use {
    animation::Animation, audio::Audio, chosen_inline::ChosenInline,
    command::Command, connected_website::ConnectedWebsite, contact::Contact,
    created_group::CreatedGroup, data_callback::DataCallback,
    deleted_chat_photo::DeletedChatPhoto, document::Document,
    edited_animation::EditedAnimation, edited_audio::EditedAudio,
    edited_document::EditedDocument, edited_location::EditedLocation,
    edited_photo::EditedPhoto, edited_text::EditedText,
    edited_video::EditedVideo, game::Game, game_callback::GameCallback,
    inline::Inline, invoice::Invoice, left_member::LeftMember,
    location::Location, migration::Migration, new_chat_photo::NewChatPhoto,
    new_chat_title::NewChatTitle, new_members::NewMembers, passport::Passport,
    payment::Payment, photo::Photo, pinned_message::PinnedMessage, poll::Poll,
    poll_answer::PollAnswer, pre_checkout::PreCheckout, shipping::Shipping,
    sticker::Sticker, text::Text, unhandled::Unhandled, update::Update,
    updated_poll::UpdatedPoll, venue::Venue, video::Video,
    video_note::VideoNote, voice::Voice,
};