Задать вопрос
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
Скриншот фрагмента кода удалён модератором.
как ее решить, в чем проблема?
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
Скорее всего, когда пользователь отправляет картинку, она сжимается на стороне телеги. (или даже в момент отправки картинки ботом)
Нужно отправлять картинку как документ.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Data World Москва
от 180 000 до 210 000 ₽
Wanted Москва
от 150 000 до 200 000 ₽
Wanted Москва
До 200 000 ₽