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
//! 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
//! use tbot::prelude::*;
//!
//! let mut bot = tbot::bot!("BOT_TOKEN").event_loop();
//!
//! bot.text(|context| {
//!     let reversed: String = context.text.value.chars().rev().collect();
//!     let reply = context
//!         .send_message_in_reply(&reversed)
//!         .into_future()
//!         .map_err(|err| {
//!             dbg!(err);
//!         });
//!
//!     tbot::spawn(reply);
//! });
//! ```
//!
//! 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
//! # use tbot::prelude::*;
//! # let mut bot = tbot::Bot::new(tbot::Token::new(String::new()))
//! #     .event_loop();
//! use tbot::types::chat;
//! const ADMIN_CHAT: chat::Id = chat::Id(0);
//!
//! bot.text(|context| {
//!     let notification = context
//!         .bot
//!         .send_message(ADMIN_CHAT, "New message!")
//!         .into_future()
//!         .map_err(|err| {
//!             dbg!(err);
//!         });
//!
//!     tbot::spawn(notification);
//! });
//! ```
//!
//! 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 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 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 traits;

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