Telgram bot. Python. Дублируются сообщения после того, как пользователь использовал определённые функции и вернулся к началу

login = ''

@bot.message_handler(func=lambda message: message.text == '/start') # Начальная панель
def start(message):
    markup = types.ReplyKeyboardMarkup()
    btn1 = types.KeyboardButton('Зарегестрировать счёт ??')
    btn2 = types.KeyboardButton('Мой счёт ?')
    btn3 = types.KeyboardButton('Информация о боте My finance')
    markup.add(btn1, btn2, btn3)

    bot.send_message(message.chat.id, f'''
Здраствуйте??! Я представляю telegram бота "My finance".
Выберете одну из предложенный функций''', reply_markup=markup)

@bot.message_handler(content_types=['text']) # Выбор функции
def works(message):
    if message.text == 'Зарегестрировать счёт ??':
        bot.send_message(message.chat.id,'Придумайте логин')
        bot.register_next_step_handler(message, data_base_reg)

    elif message.text == 'Мой счёт ?':
        bot.send_message(message.chat.id, 'Здравствуйте! Рады снова вас видеть, введите логин вашего счёт ')
        bot.register_next_step_handler(message, my_bill)


    elif message.text == 'Информация о боте My finance':
        bot.send_message(message.chat.id, 'My finance - представляет собой бота, который следит за вашими финансовыми показателями: Баланс, расходы, доходы и так далее.')

def data_base_reg(message): # Регистрация логина в базе данных
    con = sql.connect('tg_db.sqlite')
    cur = con.cursor()
    cur.execute('SELECT id FROM telegram_profile')
    id_list = [i for i in cur]
    cur.execute(f'''INSERT INTO telegram_profile(id, name) VALUES({str(id_list[-1][0] + 1)}, '{message.text}');''')
    bot.send_message(message.chat.id, 'Поздравляем вы успешно зарегестрированы! ?')
    
    con.commit()
    con.close()
    return result(message)

def result(message): # Результат регистрации
    con = sql.connect('tg_db.sqlite')
    cur = con.cursor()

    cur.execute('''SELECT id, name FROM telegram_profile''')
    l = [i for i in cur]
    bot.send_message(message.chat.id, f'''Ваш логин: {l[-1][1]}
Запомните его! Также ваш id: {l[-1][0]}''')

    con.commit()
    con.close()

def my_bill(message): # Вход в проифиль; функция - Мой счёт
    con = sql.connect('tg_db.sqlite')
    cur = con.cursor()

    cur.execute('SELECT name FROM telegram_profile')
    l = [i for i in cur]
    l2 = [j for i in l for j in i]
    if message.text in l2:
        global login
        login = message.text
        markup = types.InlineKeyboardMarkup(row_width=3)
        btn1 = types.InlineKeyboardButton('Напоминания ?', callback_data='reminders')
        btn2 = types.InlineKeyboardButton('Расходы', callback_data='expenses')
        btn3 = types.InlineKeyboardButton('Отчёт о счёте', callback_data='accnt')
        btn4 = types.InlineKeyboardButton('Доходы', callback_data='income')
        btn5 = types.InlineKeyboardButton('Баланс счёта', callback_data='balance')
        markup.add(btn1, btn2, btn3, btn4, btn5)
        bot.send_message(message.chat.id, f'Добро пожаловать в ваш профиль {message.text}', reply_markup=markup)
        bot.register_callback_query_handler(message, callback)

    else:
        bot.send_message(message.chat.id, f'Неверный логин, попробуйте снова')
        bot.register_next_step_handler(message, my_bill)

bot.callback_query_handler(func=lambda call:True)
def callback(call):     #Промежуток времени расходов; функция - Мой счёт
    if call.data == 'reminders':
        pass
    elif call.data == 'expenses':
        markup = types.InlineKeyboardMarkup(row_width=3)
        btn1 = types.InlineKeyboardButton('День', callback_data='day')
        btn2 = types.InlineKeyboardButton('Неделя', callback_data='week')
        btn3 = types.InlineKeyboardButton('Месяц', callback_data='month')
        btn4 = types.InlineKeyboardButton('Год', callback_data='year')
        markup.add(btn1, btn2, btn3, btn4)
        bot.send_message(call.message.chat.id, 'Выберете промежуток времени, за который вы совершали какие либо траты', reply_markup=markup)
        bot.register_callback_query_handler(call, exp)
    elif call.data == 'accnt':
        bot.send_message(call.message.chat.id, 'Good accnt')
    elif call.data == 'income':
        bot.send_message(call.message.chat.id, 'Good inco')
    elif call.data == 'balance':
        bot.send_message(call.message.chat.id, 'Укажите сумму вашего баланса')
        bot.register_next_step_handler(call.message, blnce)

def exp(call):  # Распределение промежутка расходов; функция - Мой счёт
    if call.data == 'day':
        con = sql.connect('tg_db.sqlite')
        cur = con.cursor()

        cur.execute('''CREATE TABLE IF NOT EXISTS day_exps(login VARCHAR(20), expenses INTEGER, type_exp TEXT)''')
        bot.send_message(call.message.chat.id, 'Введите сумму ваших расходов, а также категорию расходов через пробел')
        bot.register_next_step_handler(call.message, db_exp_day)

        con.commit()
        con.close()

    elif call.data == 'week':
        bot.send_message(call.message.chat.id, 'WEEK')
    elif call.data == 'month':
        bot.send_message(call.message.chat.id, 'MONTH')
    elif call.data == 'year':
        bot.send_message(call.message.chat.id, 'YEAR')

bot.message_handler()
def db_exp_day(message):    # Внесение данных о расходах за определённый промежуток времени в базу данных; функция - Мой счёт
    con = sql.connect('tg_db.sqlite')
    cur = con.cursor()
    exps = list(map(str, (message.text).split()))

    cur.execute(f'''INSERT INTO day_exps(login, expenses, type_exp) VALUES('{login}', {exps[0]}, '{exps[1]}');''')
    cur.execute(f'''SELECT expenses, type_exp FROM day_exps WHERE login='{login}';''')

    bot.send_message(message.chat.id, f'Расходы успешно добавлены')

    con.commit()
    con.close()

def blnce(message):
    con = sql.connect('tg_db.sqlite')
    cur = con.cursor()
    bot.send_message(message.chat.id, f'Ваша сумма: {message.text}')

    cur.execute('''CREATE TABLE IF NOT EXISTS balance(login VARCAR(20), amount INTEGER);''')
    cur.execute(f'''INSERT INTO balance(login, amount) VALUES('{login}', {message.text});''')

    con.commit()
    con.close()

bot.polling(non_stop=True)

Ответы (0 шт):