如何下载发送到Telegram机器人的文件或照片?在node.js中,我使用telegraf模块

时间:2019-03-19 09:44:51

标签: node.js telegraf

我已经尝试过这个console.log(photo.file_path);但是我得到了file_path

var picture = (context)ctx.message.photo[0].file_id; 
var photo = `https://api.telegram.org/bot1234-ABCD/getFile?file_id=${picture}`;
console.log(photo.file_path);

2 个答案:

答案 0 :(得分:0)

npm插入针

`var needle = require('needle');

needle.get(https://api.telegram.org/bot1234:ABCD/getFile?file_id=${picture},function(error,response){   如果(!error && response.statusCode == 200)     console.log(response.body.resuolt); });`

答案 1 :(得分:0)

您可以使用axios存储图像。假设文件ID为fileId,上下文为ctx。我将图像存储在路径${config.basePath}/public/images/profiles/${ctx.update.message.from.id}.jpg

ctx.telegram.getFileLink(fileId).then(url => {    
    axios({url, responseType: 'stream'}).then(response => {
        return new Promise((resolve, reject) => {
            response.data.pipe(fs.createWriteStream(`${config.basePath}/public/images/profiles/${ctx.update.message.from.id}.jpg`))
                        .on('finish', () => /* File is saved. */)
                        .on('error', e => /* An error has occured */)
                });
            })
})

如何获取为机器人发送的图像的文件ID

bot.on('message', ctx => {
    const files = ctx.update.message.photo;
    // telegram stores the photos for different sizes
    // here is a sample files result
    // [ { file_id:
    //   'AgADBAADgbAxG768CFDXChKUnJnzU5jjLBsABAEAAwIAA20AA_PFBwABFgQ',
    //   file_size: 29997,
    //   width: 320,
    //   height: 297 },
    //   { file_id:
    //   'AgADBAADgbAxG768CFDXChKUnJnzU5jjLBsABAEAAwIAA3gAA_HFBwABFgQ',
    //   file_size: 80278,
    //   width: 580,
    //   height: 538 } ]
    //   })

    // I am getting the bigger image
    fileId = files[1].file_id
    // Proceed downloading
});

不要忘记将axios安装为npm install axios --save,并要求将其安装为const axios = require('axios')

N.B。不要公开发布文件链接,因为它会暴露您的机器人令牌。