Задать вопрос
kan3k1k3n
@kan3k1k3n

Как дешифровать картинку с помощью telebot и stegano?

я создал бота, который принимает картинку, текст из сообщения, и шифрует его, а потом присылает тот самый текст.
вот код:
import random

import telebot
from stegano import lsb
import os

bot = telebot.TeleBot('')
img_name = None

@bot.message_handler(commands=['start'])
def start(message):
    user_name = message.from_user.first_name
    bot.reply_to(message, 'Привет, {0}!'.format(user_name) + '\nОтправьте мне изображение и текстовое сообщение для шифрования!')

@bot.message_handler(commands=['get_img'])
def get_image(message):
    bot.send_message(message.chat.id, 'Отправьте изображение: ')
    bot.register_next_step_handler(message, save_image)

def save_image(message):
    if not message.document:
        bot.send_message(message.chat.id, 'пожалуйста, отправьте документ с изображением')
        return
    global downloaded_file
    file_info = bot.get_file(message.document.file_id)
    downloaded_file = bot.download_file(file_info.file_path)
    global img_name
    img_name = 'img_' + str(random.randint(1, 100)) + '.jpg'
    with open(img_name, 'wb') as file:
        file.write(downloaded_file)
    with open('C:/Users/motor/OneDrive/Рабочий стол/pythonProject1/' + img_name, 'wb') as file:
        file.write(downloaded_file)
    bot.send_message(message.chat.id, 'введите сообщение, которое вы хотите зашифровать: ')
    bot.register_next_step_handler(message, get_encrypted_message)

def get_encrypted_message(message):
    text = message.text
    if img_name is None:
        bot.send_message(message.chat.id, 'пожалуйста, загрузите изображение с помощью команды /get_img')
        return
    password = text
    secret = lsb.hide(f'{img_name}', f'{password}')
    new_img_name = 'img_' + str(random.randint(1, 100)) + '.png'
    secret.save(new_img_name)

    with open(new_img_name, 'wb') as file:
        file.write(downloaded_file)
    with open('C:/Users/motor/OneDrive/Рабочий стол/pythonProject1/' + new_img_name, 'wb') as file:
        file.write(downloaded_file)
    with open(new_img_name, 'rb') as f:
        bot.send_photo(message.chat.id, f)
    secret = lsb.reveal(f'{new_img_name}')
    bot.send_message(message.chat.id, f'Ваше сообщение: {secret}')
    os.remove(img_name)
    os.remove(new_img_name)

bot.infinity_polling()

но возникает ошибка IndexError: Impossible to detect message
Скриншот фрагмента кода удалён модератором.
как ее решить, в чем проблема?
  • Вопрос задан
  • 156 просмотров
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
Скорее всего, когда пользователь отправляет картинку, она сжимается на стороне телеги. (или даже в момент отправки картинки ботом)
Нужно отправлять картинку как документ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы