@xx_RuBiCoN_xx

Как правильно импортировать набор функций и хандлеров?

Написал в файле userAdd.py вот такой код
def handle_adm_btn1(bot, message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(table_btn1, table_btn2)
    keyboard.add(table_btn3, table_btn4)
    keyboard.add(table_btn5, table_btn6)
    keyboard.add(table_btn7, table_btn8)
    keyboard.add(table_btn9, table_btn10)
    keyboard.add(table_btn11)
    # Отправляем сообщение с запросом выбора таблицы
    bot.send_message(message.chat.id, text39, reply_markup=keyboard)
    @bot.callback_query_handler(func=lambda call: True)
    def chekCallData(call):
        if call.data == calldata1:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata2:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata3:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata4:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata5:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata6:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata7:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata8:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata9:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata10:
            table_name = call.data
            handle_table_selection(call.message, table_name)
        elif call.data == calldata11:
            table_name = call.data
            handle_table_selection(call.message, table_name)
    
def handle_table_selection(message, table_name):
    # Отправляем сообщение с запросом ввода номера
    bot.send_message(message.chat.id, text40)
    # Устанавливаем состояние пользователя в ожидание ввода номера
    bot.register_next_step_handler(message, lambda msg: handle_number_input(msg, table_name))

def handle_number_input(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)


Код рабочий, проверил на чистом боте - всё работает, в базу данных номера вносит. Теперь импортирую его в start.py:
#тут всякие разные импорты, токен, телеботы и т.д.
from userAdd import handle_adm_btn1, handle_table_selection, handle_number_input
#тут всякие разные ответы на разные кнопки
    elif message.text == text42:
        handle_adm_btn1(bot, message)


В итоге бот распознаёт, когда я нажимаю на кнопку с текстом "text42", присылает в ответ инлайн кнопки, при нажатии на кнопки переходит в следующую функцию, запрашивает номер телефона, я ввожу, отправляю... И всё. Почему то не срабатывает последняя функция def handle_number_input(message, table_name).

Кто подскажет почему?

P.S. Почему то отступы в спойлере не отображаются в предпросмотре. Чуток коряво выходит.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@xx_RuBiCoN_xx Автор вопроса
Всем спасибо, проблему решил сам. Особенный привет "куратору тэга python".

Решилось всё добавлением bot в каждую функцию:
def handle_adm_btn1(bot, message)
def handle_table_selection(bot, call.message, table_name)
def bot.register_next_step_handler(message, lambda msg: handle_number_input(bot, msg, table_name))
def handle_number_input(bot, message, table_name):


P.S. Убрать лапшу через allowed_data или if call.data in [calldata1, ...] не получилось - бьёт кучу ошибок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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