sig
  type message = {
    message_id : int;
    from : Api.User.user option;
    date : int;
    chat : Api.Chat.chat;
    forward_from : Api.User.user option;
    forward_date : int option;
    reply_to_message : Api.Message.message option;
    text : string option;
    audio : Api.Audio.audio option;
    document : Api.Document.document option;
    photo : Api.PhotoSize.photo_size list option;
    sticker : Api.Sticker.sticker option;
    video : Api.Video.video option;
    voice : Api.Voice.voice option;
    caption : string option;
    contact : Api.Contact.contact option;
    location : Api.Location.location option;
  }
  val create :
    message_id:int ->
    ?from:Api.User.user option ->
    date:int ->
    chat:Api.Chat.chat ->
    ?forward_from:Api.User.user option ->
    ?forward_date:int option ->
    ?reply_to:Api.Message.message option ->
    ?text:string option ->
    ?audio:Api.Audio.audio option ->
    ?document:Api.Document.document option ->
    ?photo:Api.PhotoSize.photo_size list option ->
    ?sticker:Api.Sticker.sticker option ->
    ?video:Api.Video.video option ->
    ?voice:Api.Voice.voice option ->
    ?caption:string option ->
    ?contact:Api.Contact.contact option ->
    ?location:Api.Location.location option -> unit -> Api.Message.message
  val read : Yojson.Safe.json -> Api.Message.message
  val get_sender_first_name : Api.Message.message -> string
  val get_sender_username : Api.Message.message -> string
  val get_sender : Api.Message.message -> string
end