//! Common imports for building Telegram bots with `tele`.

#[cfg(feature = "_blocking")]
pub use crate::BlockingClient;
#[cfg(feature = "_async")]
pub use crate::Client;
pub use crate::{ClientBuilder, Error, Result};
pub use crate::{VerifiedWebAppInitData, parse_web_app_init_data, verify_web_app_init_data};

#[cfg(feature = "_async")]
pub use crate::client::{
    AnimationSendBuilder, AppApi, AudioSendBuilder, CallbackAnswerBuilder, ControlApi,
    DocumentSendBuilder, MediaGroupSendBuilder, MembershipApi, ModerationApi, ModerationNoticeApi,
    PhotoSendBuilder, RawApi, SetupApi, StickerSendBuilder, TextSendBuilder, TypedApi,
    VideoSendBuilder, VoiceSendBuilder, WebAppApi,
};
pub use crate::client::{
    BanMemberOptions, BootstrapFetchStepReport, BootstrapGetMePolicy, BootstrapOutcome,
    BootstrapPlan, BootstrapReport, BootstrapRetryPolicy, BootstrapStepDiagnostics,
    BootstrapStepPhase, BootstrapStepStatus, BootstrapSyncStepReport, ClientMetric,
    ClientMetricHook, MenuButtonConfig, RestrictMemberOptions, WebAppQueryPayload,
};
#[cfg(feature = "_blocking")]
pub use crate::client::{
    BlockingAnimationSendBuilder, BlockingAppApi, BlockingAudioSendBuilder,
    BlockingCallbackAnswerBuilder, BlockingControlApi, BlockingDocumentSendBuilder,
    BlockingMediaGroupSendBuilder, BlockingMembershipApi, BlockingModerationApi,
    BlockingModerationNoticeApi, BlockingPhotoSendBuilder, BlockingRawApi,
    BlockingStickerSendBuilder, BlockingTextSendBuilder, BlockingTypedApi,
    BlockingVideoSendBuilder, BlockingVoiceSendBuilder,
};
#[cfg(feature = "_blocking")]
pub use crate::client::{BlockingSetupApi, BlockingWebAppApi};

pub use crate::types::{
    AllowedUpdate, BotCommand, BusinessConnection, BusinessMessagesDeleted, CallbackCodec,
    CallbackPayload, ChatAdministratorCapability, ChatBoostRemoved, ChatBoostUpdated, ChatId,
    ChatJoinRequest, ChatMemberStatus, ChatMemberUpdated, ChatPermissions, CompactCallbackPayload,
    InputMedia, InputMediaAnimation, InputMediaAudio, InputMediaDocument, InputMediaPhoto,
    InputMediaVideo, ManagedBotUpdated, Message, MessageEntityKind, MessageId, MessageKind,
    MessageOrigin, MessageReactionCountUpdated, MessageReactionUpdated, PaidMediaPurchased,
    ParseMode, PollKind, PreCheckoutQuery, ReplyMarkup, ReplyParameters, ShippingQuery, Update,
    UpdateKind, UploadFile, UploadPart, WebhookSecretToken,
};

#[cfg(all(feature = "bot", feature = "postgres-session"))]
pub use crate::bot::PostgresSessionStore;
#[cfg(all(feature = "bot", feature = "redis-session"))]
pub use crate::bot::RedisSessionStore;
#[cfg(feature = "bot")]
pub use crate::bot::{
    BotApp, BotContext, BotEngine, BotOutbox, BusinessConnectionInput,
    BusinessMessagesDeletedInput, CURRENT_ACTOR_CHAT_MEMBER, CURRENT_BOT_CHAT_MEMBER,
    CallbackInput, CallbackQueryInput, CallbackRouteBuilder, ChannelUpdateSource, ChatBoostInput,
    ChatBoostRemovedInput, ChatJoinRequestInput, ChatMemberUpdatedInput, ChatSession,
    ChosenInlineResultInput, CommandArgs, CommandRouteBuilder, CompactCallbackInput,
    CompactCallbackRouteBuilder, ContextAppApi, DispatchMetricOutcome, DispatchOutcome,
    EngineConfig, EngineEvent, EngineMetric, ErrorPolicy, HandlerError, InMemorySessionStore,
    InlineQueryInput, JsonCallback, JsonFileSessionStore, LongPollingSource, ManagedBotInput,
    MessageReactionCountInput, MessageReactionInput, MyChatMemberUpdatedInput, OutboxConfig,
    PaidMediaPurchasedInput, ParsedCommandRouteBuilder, PollAnswerInput, PollInput, PollingConfig,
    PreCheckoutQueryInput, RequestStateKey, RouteRejection, Router, ShippingQueryInput,
    SourceErrorBackoffConfig, TextInput, ThrottleScope, TypedCallbackInput,
    TypedCallbackRouteBuilder, TypedCommandInput, UpdateExt, UpdateExtractor, UpdateSink,
    WebAppInput, WebhookRunner, WriteAccessAllowedInput, channel_source,
};

#[cfg(feature = "macros")]
pub use crate::BotCommands;
