Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get the user picture/avatar using the Telegram bot chat API?

The user object has no photo_id, so is there way to get the user's avatar?

like image 781
Antonio Carlos Ribeiro Avatar asked Apr 20 '16 03:04

Antonio Carlos Ribeiro


People also ask

How can I add profile picture in Telegram bot?

1. Send the command /setuserpic to the bot responsible for creating other @BotFather bots. 2. Send an image to the dialog that will be set as the bot's avatar.

How do I download a file or photo that was sent to my Telegram bot?

Any file can be downloaded by calling upload. getFile.

Can Telegram bot send pictures?

Pass a file_id as String to send a photo that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a photo from the Internet, or upload a local photo by passing a file path. (Optional). Photo caption (may also be used when re-sending photos by file_id), 0-1024 characters.


1 Answers

I didn't find any php code, but this nodejs snippet worked for me so I put this to give you the idea that how it works.

  1. Create a bot(start chatting with @botfather in your telegram)
  2. After creation of bot finished, it will give you a token for HTTP API
  3. $ npm install --save node-telegram-bot-api
  4. create a js file beside the node_modules folder(for example: server.js)
  5. put this codes in the server.js file and then run it with $ node server.js

        const TelegramBot = require('node-telegram-bot-api');
        // replace the value below with the Telegram token you receive from @BotFather  
        const token = 'XXXX35XXXX:XXXX7DCYw5IsY6DHcwXXXXXXXXX';
        // Create a bot that uses 'polling' to fetch new updates    
        const bot = new TelegramBot(token, {
            polling: true
        });
        // Matches "/echo [whatever]"    
        bot.onText(/\/echo (.+)/, (msg, match) => {
            // 'msg' is the received Message from Telegram    
            // 'match' is the result of executing the regexp above on the text content    
            // of the message    
    
            const chatId = msg.chat.id;
            const resp = match[1]; // the captured "whatever"    
    
            // send back the matched "whatever" to the chat    
            bot.sendMessage(chatId, resp);
        });
        // Listen for any kind of message. There are different kinds of  
        // messages.  
        bot.on('message', (msg) => {
            const chatId = msg.chat.id;
            var user_profile = bot.getUserProfilePhotos(msg.from.id);
            user_profile.then(function (res) {
                var file_id = res.photos[0][0].file_id;
                var file = bot.getFile(file_id);
                file.then(function (result) {
                    var file_path = result.file_path;
                    var photo_url = `https://api.telegram.org/file/bot${token}/${file_path}`
                    bot.sendMessage(chatId, photo_url);
                });
            });
        });
    
like image 200
Bagherani Avatar answered Oct 26 '22 06:10

Bagherani