@Nusup

Как сохранять сообщения c пометкой изменено в telegram боте?

Подскажите логику, если юзер(сделал ошибку в тексте) после изменил сообщение, сделав его с пометкой "изменено", как можно поменять user.func , чтобы во время отправки в бд это было уже измененное сообщение.
Может есть какой-нибудь метод?
Вот код:
import telebot
import mysql.connector
from telebot import types, TeleBot
from telebot.types import Message

bot = telebot.TeleBot("")

# Подключение к MySQL
 db = mysql.connector.connect(
     host="",
     user="",
     passwd="",
     port="",
     database=""
 ) 
cursor = db.cursor()

user_data = {}

# Последовательность шагов
class User:
    def __init__(self, openvisit):
        self.openvisit = openvisit
        self.name = ''
        self.email = ''
        self.phone = ''

# Убрать клавиатуру
remove_keyboard = types.ReplyKeyboardRemove()

@bot.message_handler(commands=['start'])
def send_welcome(message):

    # Меню кнопок
    reg = types.ReplyKeyboardMarkup(one_time_keyboard=True)
    reg_btn = types.KeyboardButton(text='Зарегистрироваться')
    reg.add(reg_btn)

    msg = bot.send_message(message.chat.id, "Здравствуйте, это бот-помощник, присутупим к регистрации?", reply_markup=reg)
    bot.register_next_step_handler(msg, process_openvisit_step)

def process_openvisit_step(message):
    user_id = message.from_user.id
    user_data[user_id] = User(message.text)

    msg = bot.send_message(message.chat.id, "Введите имя:",  reply_markup=remove_keyboard)
    bot.register_next_step_handler(msg, process_name_step)

def process_name_step(message):
    user_id = message.from_user.id
    user = user_data[user_id]
    user.name = message.text

    msg = bot.send_message(message.chat.id, "Введите Email:")
    bot.register_next_step_handler(msg, process_email_step)

def process_email_step(message):
    user_id = message.from_user.id
    user = user_data[user_id]
    user.email = message.text

    msg = bot.send_message(message.chat.id, 'Введите сотовый номер без "8" и "+7" (Например: 7014441122):')
    bot.edit_message_text(msg.chat.id, message.message_id, 'Введите сотовый номер без "8" и "+7" (Например: 7014441122):')

def process_phone_step(message):
    user_id = message.from_user.id
    user = user_data[user_id]
    user.phone = message.text

    # Меню кнопок
    closereg = types.ReplyKeyboardMarkup(one_time_keyboard=True)
    closereg_btn = types.KeyboardButton(text='Закончить регистрацию')
    closereg.add(closereg_btn)

     # Сохранение в БД
     sql = "INSERT INTO users (user_id,name,email,phone) \
                                                             VALUES (%s, %s, %s, %s)"
     val = (user_id, user.name, user.email, user.phone)
     cursor.execute(sql, val)
     db.commit()

    msg = bot.send_message(message.chat.id, "Спасибо за регистрацию!",reply_markup=closereg)
    bot.register_next_step_handler(msg, send_welcome)

# Enable saving next step handlers to file "./.handlers-saves/step.save".
# Delay=2 means that after any change in next step handlers (e.g. calling register_next_step_handler())
# saving will hapen after delay 2 seconds.
bot.enable_save_next_step_handlers(delay=2)

# Load next_step_handlers from save file (default "./.handlers-saves/step.save")
# WARNING It will work only if enable_save_next_step_handlers was called!
bot.load_next_step_handlers()

if __name__ == '__main__':
    bot.polling(none_stop=True)
  • Вопрос задан
  • 308 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
Используйте @bot.edited_message_handler чтобы отловить момент с измененным сообщением.
Главная проблема будет состоять в том, что вам надо будет понять что за сообщение поменялось. Первой версии сообщения вы уже не получите. Вы можете хранить ID сообщения где пользователь ввел имя, ID где фамилию, телефон и т.д. И уже по этим ID понимать что было изменено.

И это легко реализовать уже после записи данных в БД. А вот вклиниться посреди работы схемы из множества register_next_step_handler уже будет сложнее. Или нет, не пробовал. Но вы поэкспериментируйте!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 июн. 2024, в 16:36
4000 руб./за проект
01 июн. 2024, в 15:46
160000 руб./за проект
01 июн. 2024, в 15:01
5000 руб./за проект