Skip to content

Instantly share code, notes, and snippets.

@alexeyev
Created August 31, 2021 12:12
Show Gist options
  • Save alexeyev/591ffee237ce5d430a527066481da19a to your computer and use it in GitHub Desktop.
Save alexeyev/591ffee237ce5d430a527066481da19a to your computer and use it in GitHub Desktop.
Telegram bot saving (hogweed) photos on disk
# coding: utf-8
import configparser
import logging
import telebot
logger = logging.getLogger("hogweed-ground-level")
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("everything.log")
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
parser = configparser.ConfigParser()
parser.read("configs/bot_config.ini")
ACCESS_KEY = parser["telegram"]["key"]
bot = telebot.TeleBot(ACCESS_KEY, num_threads=4)
content_types = "audio, sticker, video, video_note, location, contact, new_chat_members, " \
"left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, " \
"supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, " \
"pinned_message".split(", ")
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
logger.debug(message)
bot.reply_to(message, "Привет, это бот, которому отправляют фото борщевика, "
"сфотографированного от уровня земли (или хотя бы с высоты голени), "
"держа смартфон вертикально или почти вертикально.")
@bot.message_handler(content_types=['voice'])
def handle_voice(message):
logger.debug(message)
bot.reply_to(message, "Не очень удобно сейчас слушать голосовые, давайте лучше командами.")
@bot.message_handler(content_types=["text"] + content_types)
def handle_text(message):
logger.debug(message)
bot.reply_to(message, "Увы, бот воспринимает только снимки и команды, начинающиеся на \"/\".")
@bot.message_handler(content_types=["document"])
def handle_file(message):
logger.debug(message)
bot.reply_to(message, "Бот ещё не умеет обрабатывать файлы, но обязательно научится. Пожалуйста, отправляйте пока "
"в \"сжатом\" формате.")
@bot.message_handler(content_types=['photo'])
def handle_photo(message):
logger.debug(message)
try:
file_id = message.photo[-1].file_id
file_info = bot.get_file(file_id)
downloaded_file = bot.download_file(file_info.file_path)
username = message.from_user.username
date = message.date
with open("data/from_telegram/img/%d_%d_%s.jpg" % (date, message.message_id, username), "wb") as new_file:
new_file.write(downloaded_file)
bot.reply_to(message, "Спасибо, сохранил.")
except Exception as e:
logger.error("Can't save image", exc_info=True)
logger.critical("Can't save image", e, exc_info=True)
bot.reply_to(message, "Не удалось сохранить, напишите автору, пожалуйста.")
bot.polling()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment