@TheGreatOdin

Как записать введенные значения в Python при создании бота?

Здравствуйте. Я новичок в python и у меня возник вопрос. Собственно, это бот для обработки изображения. Текущая версия, которая представлена ниже - работает (она и должна так работать). Главный вопрос в следующем - как добавить возможность пользователю ввести значения?
Существуют rgbmax и rgbmin. В данном коде они заданы мною, но необходимо добавить возможность пользователю ввести свои значения и после этого уже выполняется обработка изображения. То есть, процесс выглядит следующим образом: пользователь отправляет фото > приходит сообщение "Введите значение от 0 до 255" > он отправляет, проверяется диапазон от 0 до 255, записывается в rgbmax, присылается сообщение: "Введите второе значение" > отправляется значение, снова проверка и в случае, если правильно, идет запись в rgbmin > фото обработано и отправляется пользователю. Не могу понять как реализовать запись этих введенных значений. Был бы очень благодарен за помощь, если бы натолкнули на мысль как это реализовать.

Полный код:
import telebot
import os
import urllib.request
from PIL import Image
import numpy as np

TOKEN = 'тут токен бота, просто вырезал его'
bot = telebot.TeleBot(TOKEN)

result_storage_path = 'temp'

img = 'https://i.ibb.co/zXxYh6G/22.png'
img1 = 'https://i.ibb.co/JxYCPdg/30-240.jpg'


@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, 'Приветствую! Ботом я являюсь, обрабатывать твои фото создан я! ')
    bot.send_message(message.chat.id, 'Чтобы продолжить, отправь мне любое изображение')
    bot.send_message(message.chat.id, 'Чтобы понять как я работаю, используй команду /how')

@bot.message_handler(commands=['how'])
def start_message(message):
    bot.send_message(message.chat.id,
                     'Я могу повысить контраст изображения. Для того, чтобы это сделать, тебе нужно ввести 2 значения.')
    bot.send_message(message.chat.id, '1️⃣Первое значение - точка черного (самая темная точка твоей фотографии)')
    bot.send_message(message.chat.id, '2️⃣Второе значение - точка белого (самая светлая точка твоей фотографии)')
    bot.send_message(message.chat.id,
                     '❗️Главное ограничение - диапазон от 0 до 255. Чем больше разница между первым и вторым значением, '
                     'тем меньше контраст. Давай покажу, как это работает')
    bot.send_photo(message.chat.id, img)
    bot.send_message(message.chat.id,
                     '❗️И да, не забывай, если второе значение будет больше первого, то получится страшная инверсия '
                     '(примерно такая)')
    bot.send_photo(message.chat.id, img1)
    bot.send_message(message.chat.id, '✅Если всё понятно, то загрузи фото!')


@bot.message_handler(content_types=['photo'])
def handle_photo(message):
    cid = message.chat.id

    image_name = save_image_from_message(message)
    bot.send_message(cid, 'Отлично, я сохранил твое изображение! Для того, чтобы продолжить - введи первое значение')
    image_name_new = handle_image(image_name)
    bot.send_photo(message.chat.id, open('{0}/{1}'.format(result_storage_path, image_name_new), 'rb'),
                   'Ура, получилось!')
    bot.send_message(message.chat.id, 'Попробуем еще разок? :)')
    cleanup_remove_images(image_name, image_name_new)


def save_image_from_message(message):
    image_id = get_image_id_from_message(message)
    file_path = bot.get_file(image_id).file_path
    image_url = "https://api.telegram.org/file/bot{0}/{1}".format(TOKEN, file_path)
    if not os.path.exists(result_storage_path):
        os.makedirs(result_storage_path)

    image_name = "{0}.jpg".format(image_id)
    urllib.request.urlretrieve(image_url, "{0}/{1}".format(result_storage_path, image_name))

    return image_name


def get_image_id_from_message(message):
    return message.photo[len(message.photo) - 1].file_id


def handle_image (image_name):
    content_image = Image.open("{0}/{1}".format(result_storage_path, image_name))

    rgbmax = 230
    rgbmin = 15


    R, G, B = content_image.split()

    rout = R.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)
    gout = G.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)
    bout = B.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)

    result_img_pillow = Image.merge("RGB", (rout, gout, bout))
    image_name_new = "handled_image_" + image_name
    result_img_pillow.save("{0}/{1}".format(result_storage_path, image_name_new))

    return image_name_new


def cleanup_remove_images(image_name, image_name_new):
        os.remove('{0}/{1}'.format(result_storage_path, image_name))
        os.remove('{0}/{1}'.format(result_storage_path, image_name_new))

bot.polling()
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
@IKIQ
def rgb(message):
    msg = bot.send_message(chat_id, 'введите rgbmin')
    bot.register_next_step_handler(msg, rgbmin)

def rgbmin(message):
    ur = user_rgbmin = message.text
    If ur > 255 or ur < 0:
        msg = bot.send_message(chat_id, 'rgbmin должен быть в интервале от 0 до 255, введите ещё раз')
        bot.register_next_step_handler(msg, rgbmin)
        return
    msg = bot.send_message(chat_id, 'введите rgbmax')
    bot.register_next_step_handler(msg, rgbmax)

def rgbmax(message):
    ‘Аналогично def rgbmin(message)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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