3

Can't receive images from my telegram bot, trying something like this:

import telegram
from telegram.ext import Updater
from telegram.ext import MessageHandler
from telegram.ext import Filters

def photo_handler(bot, update):
    file = bot.getFile(update.message.photo.file_id)
    print ("file_id: " + str(update.message.photo.file_id))
    file.download('photo.jpg')

updater = Updater(token='my token')
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.photo, photo_handler))

No any errors while running

Yevgen
  • 51
  • 1
  • 1
  • 5
  • I already answered this question [how save photo in telegram python bot?](https://stackoverflow.com/questions/50388435/how-save-photo-in-telegram-python-bot). First line in photo_handler needs to be file = bot.getFile(update.message.photo[-1].file_id). – dev4Fun Jun 30 '18 at 16:11
  • @dev4Fun , what if you are sending more than one image to telegram? How can we handle such scenario? – KbiR Jul 28 '20 at 10:55

1 Answers1

0

I've used this to send images generated by matplotlib. You can adapt it to your needs.

import telegram
from telegram.bot import Bot
import yachain
import cStringIO
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

cfg = yachain.Config().load("telegram.cfg")

token = cfg["token"]
chat_id = cfg["chatID"]

bot = Bot(token=token)

y = [2,4,6,8,10,12,14,16,18,20]
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
ax.plot(x, y, label='$y = numbers')
plt.title('Legend inside')
ax.legend()
#plt.show()

buffer = cStringIO.StringIO()
fig.savefig(buffer, format='png')

buffer.seek(0)
bot.send_photo(chat_id=chat_id,
               photo=buffer)
hootnot
  • 1,005
  • 8
  • 13