code: func (b *Bot) FileByID(fileID string) (File, error) {
  	params := map[string]string{
  		"file_id": fileID,
  	}
  
  	respJSON, err := b.Raw("getFile", params)
  	if err != nil {
  		return File{}, err
  	}
  
  	var resp struct {
  		Ok          bool
  		Description string
  		Result      File
  	}
  
  	err = json.Unmarshal(respJSON, &resp)
  	if err != nil {
  		return File{}, errors.Wrap(err, "bad response json")
  	}
  
  	if !resp.Ok {
  		return File{}, errors.Errorf("api error: %s", resp.Description)
  
  	}
  
  	return resp.Result, nil
  }
docs: // FileByID returns full file object including File.FilePath, allowing you to
  // download the file from the server.
  //
  // Usually, Telegram-provided File objects miss FilePath so you might need to
  // perform an additional request to fetch them.