@xx_RuBiCoN_xx

Как остановить handler?

Есть файл start.py. Вот часть кода из него:
#Всякий нужный код до этого момента
    elif message.text == text42:
        handle_adm_btn1(bot, message)
    elif message.text == text43:
        handle_adm_btn2(bot, message)
#Всякий нужный код после этого момента


При этом есть ещё два файла: userAdd.py и userDelete.py
В них написанны функции по добавлению и удалению пользователя в таблице MySQL.

Вот часть кода из userAdd.py:
def handle_table_selection(bot, message, table_name):
    # Отправляем сообщение с запросом ввода номера
    bot.send_message(message.chat.id, text40)
    # Устанавливаем состояние пользователя в ожидание ввода номера
    bot.register_next_step_handler(message, lambda msg: handle_number_input(bot, msg, table_name))

def handle_number_input(bot, message, table_name):
    number = message.text
    cursor = mydb.cursor()
    sql_query = f"INSERT INTO {table_name} (phone_number, is_try) VALUES (%s, %s)"
    values = (number, 1)
    cursor.execute(sql_query, values)
    mydb.commit()
    cursor.close()
    bot.send_message(message.chat.id, text41)


Вот часть кода из userDelete.py:
def handle_table_selection2(bot, message, table_name):
    # Отправляем сообщение с запросом ввода номера
    bot.send_message(message.chat.id, text40)
    # Устанавливаем состояние пользователя в ожидание ввода номера
    bot.register_next_step_handler(message, lambda msg: handle_number_input2(bot, msg, table_name))

def handle_number_input2(bot, message, table_name):
    number = message.text
    cursor = mydb.cursor()
    sql_query = f"DELETE FROM {table_name} WHERE phone_number = %s"
    values = (number,)
    cursor.execute(sql_query, values)
    mydb.commit()
    cursor.close()
    bot.send_message(message.chat.id, text45)


Проблема заключается в том, что если я сначала добавляю пользователя в базу через userAdd, а потом хочу удалить другого юзера из базы - то на моменте
bot.register_next_step_handler(message, lambda msg: handle_number_input2(bot, msg, table_name))
происходит тот хандлер, который я использовал первым.

То есть, если я сначала добавил юзера, а потом удаляю - то именно в этом месте во время удаления вызовется хандлер добавления юзера. И наоборот, соответственно.

Изза этого ты можешь делать только то, что выбрал первым.

Вопрос как остановить этот хандлер или как изменить функцию, чтобы этого не происходило?
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
@xx_RuBiCoN_xx Автор вопроса
Для остановки handler подходит это:

bot.clear_step_handler(message)

или

bot.clear_step_handler_by_chat_id(message.chat.id)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Medovochka
Попробуйте так для файла:

# В userAdd.py
def handle_number_input(bot, message, table_name):
    number = message.text
    cursor = mydb.cursor()
    sql_query = f"INSERT INTO {table_name} (phone_number, is_try) VALUES (%s, %s)"
    values = (number, 1)
    cursor.execute(sql_query, values)
    mydb.commit()
    cursor.close()
    bot.send_message(message.chat.id, text41)

def handle_table_selection(bot, message, table_name):
    # Отправляем сообщение с запросом ввода номера
    bot.send_message(message.chat.id, text40)
    # Устанавливаем состояние пользователя в ожидание ввода номера
    bot.register_next_step_handler(message, lambda msg: handle_number_input(bot, msg, table_name))

# В userDelete.py
def handle_number_input2(bot, message, table_name):
    number = message.text
    cursor = mydb.cursor()
    sql_query = f"DELETE FROM {table_name} WHERE phone_number = %s"
    values = (number,)
    cursor.execute(sql_query, values)
    mydb.commit()
    cursor.close()
    bot.send_message(message.chat.id, text45)

def handle_table_selection2(bot, message, table_name):
    # Отправляем сообщение с запросом ввода номера
    bot.send_message(message.chat.id, text40)
    # Устанавливаем состояние пользователя в ожидание ввода номера
    bot.register_next_step_handler(message, lambda msg: handle_number_input2(bot, msg, table_name))


И соотвественно так для start.py :

# Всякий нужный код до этого момента
    elif message.text == text42:
        userAdd.handle_table_selection(bot, message, table_name)
    elif message.text == text43:
        userDelete.handle_table_selection2(bot, message, table_name)
# Всякий нужный код после этого момента


А вообще, вы скорее всего пользуетесь бездумно ChatGPT, который может выполнить что-то легкое, и то часто с ошибками, не говоря о чем-то более сложном
Ответ написан
Ваш ответ на вопрос

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

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