sig
  exception ApiException of string
  module ParseMode = TelegramApi.ParseMode
  module User = TelegramApi.User
  module Chat = TelegramApi.Chat
  module InputFile = TelegramApi.InputFile
  module MessageEntity = TelegramApi.MessageEntity
  module KeyboardButton = TelegramApi.KeyboardButton
  module InlineKeyboardButton = TelegramApi.InlineKeyboardButton
  module ReplyMarkup = TelegramApi.ReplyMarkup
  module PhotoSize = TelegramApi.PhotoSize
  module Audio = TelegramApi.Audio
  module Document = TelegramApi.Document
  module Sticker = TelegramApi.Sticker
  module Video = TelegramApi.Video
  module Voice = TelegramApi.Voice
  module Contact = TelegramApi.Contact
  module Location = TelegramApi.Location
  module Venue = TelegramApi.Venue
  module UserProfilePhotos = TelegramApi.UserProfilePhotos
  module Message = TelegramApi.Message
  module File = TelegramApi.File
  module CallbackQuery = TelegramApi.CallbackQuery
  module ChatMember = TelegramApi.ChatMember
  module InputMessageContent = TelegramApi.InputMessageContent
  module InlineQuery = TelegramApi.InlineQuery
  module ChatAction = TelegramApi.ChatAction
  module Update = TelegramApi.Update
  module Result = TelegramApi.Result
  module Command = TelegramApi.Command
  module type BOT =
    sig
      val token : string
      val command_postfix : string option
      val commands : Command.command list
      val inline : InlineQuery.inline_query -> Command.action
      val callback : CallbackQuery.callback_query -> Command.action
      val new_chat_member : Chat.chat -> User.user -> Command.action
      val left_chat_member : Chat.chat -> User.user -> Command.action
      val new_chat_title : Chat.chat -> string -> Command.action
      val new_chat_photo :
        Chat.chat -> PhotoSize.photo_size list -> Command.action
      val delete_chat_photo : Chat.chat -> Command.action
      val group_chat_created : Chat.chat -> Command.action
      val supergroup_chat_created : Chat.chat -> Command.action
      val channel_chat_created : Chat.chat -> Command.action
      val migrate_to_chat_id : Chat.chat -> int -> Command.action
      val migrate_from_chat_id : Chat.chat -> int -> Command.action
      val pinned_message : Chat.chat -> Message.message -> Command.action
    end
  module type TELEGRAM_BOT =
    sig
      val url : string
      val commands : Command.command list
      val inline : InlineQuery.inline_query -> Command.action
      val callback : CallbackQuery.callback_query -> Command.action
      val get_me : User.user Result.result Lwt.t
      val send_message :
        chat_id:int ->
        text:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val forward_message :
        chat_id:int ->
        from_chat_id:int ->
        ?disable_notification:bool ->
        message_id:int -> unit Result.result Lwt.t
      val send_chat_action :
        chat_id:int -> action:ChatAction.action -> unit Result.result Lwt.t
      val send_photo :
        chat_id:int ->
        photo:string ->
        ?caption:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_photo :
        chat_id:int ->
        photo:string ->
        ?caption:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_audio :
        chat_id:int ->
        audio:string ->
        performer:string ->
        title:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_audio :
        chat_id:int ->
        audio:string ->
        performer:string ->
        title:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_document :
        chat_id:int ->
        document:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_document :
        chat_id:int ->
        document:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_sticker :
        chat_id:int ->
        sticker:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_sticker :
        chat_id:int ->
        sticker:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_video :
        chat_id:int ->
        video:string ->
        ?duration:int option ->
        ?caption:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_video :
        chat_id:int ->
        video:string ->
        ?duration:int option ->
        ?caption:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_voice :
        chat_id:int ->
        voice:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        string Result.result Lwt.t
      val resend_voice :
        chat_id:int ->
        voice:string ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_location :
        chat_id:int ->
        latitude:float ->
        longitude:float ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_venue :
        chat_id:int ->
        latitude:float ->
        longitude:float ->
        title:string ->
        address:string ->
        foursquare_id:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val send_contact :
        chat_id:int ->
        phone_number:string ->
        first_name:string ->
        last_name:string option ->
        ?disable_notification:bool ->
        reply_to:int option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit Result.result Lwt.t
      val get_user_profile_photos :
        user_id:int ->
        offset:int option ->
        limit:int option ->
        UserProfilePhotos.user_profile_photos Result.result Lwt.t
      val get_file : file_id:string -> File.file Result.result Lwt.t
      val get_file' : file_id:string -> string option Lwt.t
      val download_file : file:File.file -> string option Lwt.t
      val kick_chat_member :
        chat_id:int -> user_id:int -> unit Result.result Lwt.t
      val leave_chat : chat_id:int -> unit Result.result Lwt.t
      val unban_chat_member :
        chat_id:int -> user_id:int -> unit Result.result Lwt.t
      val get_chat : chat_id:int -> Chat.chat Result.result Lwt.t
      val get_chat_administrators :
        chat_id:int -> ChatMember.chat_member list Result.result Lwt.t
      val get_chat_members_count : chat_id:int -> int Result.result Lwt.t
      val get_chat_member :
        chat_id:int ->
        user_id:int -> ChatMember.chat_member Result.result Lwt.t
      val answer_callback_query :
        callback_query_id:string ->
        ?text:string option ->
        ?show_alert:bool -> unit -> unit Result.result Lwt.t
      val answer_inline_query :
        inline_query_id:string ->
        results:InlineQuery.Out.inline_query_result list ->
        ?cache_time:int option ->
        ?is_personal:bool option ->
        ?next_offset:string option -> unit -> unit Result.result Lwt.t
      val edit_message_text :
        ?chat_id:string option ->
        ?message_id:int option ->
        ?inline_message_id:string option ->
        text:string ->
        parse_mode:ParseMode.parse_mode option ->
        disable_web_page_preview:bool ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit -> unit Result.result Lwt.t
      val edit_message_caption :
        ?chat_id:string option ->
        ?message_id:int option ->
        ?inline_message_id:string option ->
        caption:string ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit -> unit Result.result Lwt.t
      val edit_message_reply_markup :
        ?chat_id:string option ->
        ?message_id:int option ->
        ?inline_message_id:string option ->
        reply_markup:ReplyMarkup.reply_markup option ->
        unit -> unit Result.result Lwt.t
      val get_updates : Update.update list Result.result Lwt.t
      val peek_update : Update.update Result.result Lwt.t
      val pop_update :
        ?run_cmds:bool -> unit -> Update.update Result.result Lwt.t
      val run : ?log:bool -> unit -> unit
    end
  module Mk = TelegramApi.Mk
end