From 5601dd0354e62da1e52ea489a36a16160f603624 Mon Sep 17 00:00:00 2001 From: robatioor Date: Sun, 3 Mar 2019 08:44:14 +0330 Subject: [PATCH] add method GetFile and refactor code --- bot.go | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/bot.go b/bot.go index aafab57..46aa066 100644 --- a/bot.go +++ b/bot.go @@ -877,14 +877,12 @@ func (b *Bot) FileByID(fileID string) (File, error) { // Download saves the file from Telegram servers locally. // // Maximum file size to download is 20 MB. -func (b *Bot) Download(f *File, localFilename string) error { - g, err := b.FileByID(f.FileID) +func (b *Bot) Download(file *File, localFilename string) error { + reader, err := b.GetFile(file) if err != nil { - return err + return wrapSystem(err) } - - url := fmt.Sprintf("%s/file/bot%s/%s", - b.URL, b.Token, g.FilePath) + defer reader.Close() out, err := os.Create(localFilename) if err != nil { @@ -892,23 +890,34 @@ func (b *Bot) Download(f *File, localFilename string) error { } defer out.Close() - resp, err := http.Get(url) + _, err = io.Copy(out, reader) if err != nil { return wrapSystem(err) } - defer resp.Body.Close() + file.FileLocal = localFilename - _, err = io.Copy(out, resp.Body) + return nil +} + +// GetFile from Telegram servers +func (b *Bot) GetFile(file *File) (io.ReadCloser, error) { + f, err := b.FileByID(file.FileID) if err != nil { - return wrapSystem(err) + return nil, err } - g.FileLocal = localFilename - *f = g + url := fmt.Sprintf("%s/file/bot%s/%s", + b.URL, b.Token, f.FilePath) - return nil -} + resp, err := http.Get(url) + if err != nil { + return nil, err + } + // set FilePath + *file = f + return resp.Body, nil +} // StopLiveLocation should be called to stop broadcasting live message location // before Location.LivePeriod expires. //