Функции в ТГ-боте срабатывают несколько раз

Имеется телеграм-бот на Telebot для обратной связи после посещения различных мест. Вот полный код:

import json
import telebot
import database.database as db
import frontend.markup_frontend as mk

bot = telebot.TeleBot('токен', parse_mode=None)


# -------------------
# Обработчик всех нажатий (divine intellect)
# -------------------
@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data.startswith('menu_'):
        if call.data == 'menu_new_review':
            review_id = db.add_review(call.from_user.id)
            choose_region(call.message, review_id)
            return
        elif call.data == 'menu_uncompleted_reviews':
            uncompleted_reviews(call.message)
            return
        elif call.data == 'menu_stats':
            stats(call.message)
            return
        elif call.data == 'menu_predict':
            predict(call.message)
            return

    elif call.data.startswith('region_'):
        _, region, review_id = call.data.split('_')
        review_id = int(review_id)
        db.update_review_with_city(call.from_user.id, review_id, region)

        bot.send_message(call.message.chat.id, 'Введите номер точки')
        bot.register_next_step_handler(call.message, lambda message: choose_station_number(message, review_id))

    elif call.data.startswith('network_'):
        _, network, review_id = call.data.split('_')
        review_id = int(review_id)
        db.update_review_with_network(call.from_user.id, review_id, network)
        if network == 'main':
            main_network(call.message, review_id)
            return
        elif network == 'partner':
            partner_network(call.message, review_id)
            return

    elif call.data.startswith('partner_'):
        _, choose, review_id = call.data.split('_')
        review_id = int(review_id)

        if choose == 'list':
            list_search(call.message, review_id)
            return
        elif choose == 'name':
            print(choose)
            return

        # -------------------


# Регистрация / первый запуск
# -------------------
@bot.message_handler(commands=['start'])
def start(message):
    if db.check_user(message.from_user.id):
        main_menu(message)
        return
    else:
        get_name_msg = bot.send_message(message.chat.id, 'Представьтесь в формате Смирнова А.П.')
        bot.register_next_step_handler(get_name_msg, get_name)


def get_name(message):
    global name
    name = message.text
    get_email_msg = bot.send_message(message.chat.id, 'Введите вашу почту.')
    bot.register_next_step_handler(get_email_msg, get_email)


def get_email(message):
    global email
    email = message.text
    db.insert_user(message.from_user.id, name, email)
    main_menu(message)
    return


# -------------------
# Главное меню
# -------------------
@bot.message_handler(commands=['main_menu'])
def main_menu(message):
    bot.send_message(message.chat.id, f'Здравствуйте, {db.get_user_name(message.from_user.id)}\n\n'
                                      f'Выберите что-то из пунктов ниже.', reply_markup=mk.main_menu_markup())


# -------------------
# Новый отзыв
# -------------------
def choose_region(message, review_id):
    bot.send_message(message.chat.id, 'Выберите отделение.', reply_markup=mk.choose_region_markup(review_id))


def choose_station_number(message, review_id):
    station_number = message.text
    db.update_review_with_station_number(message.from_user.id, review_id, station_number)
    choose_network(message, review_id)
    return


def choose_network(message, review_id):
    bot.send_message(message.chat.id, 'Выберите принадлежность сети.', reply_markup=mk.choose_network_markup(review_id))


def main_network(message, review_id):
    print('faggot')


def partner_network(message, review_id):
    bot.send_message(message.chat.id, 'Как вы хотите найти партнера?',
                     reply_markup=mk.choose_partner_markup(review_id))


# Если партнера ищут по списку:
def list_search(message, review_id):
    review_data = db.get_review_data(message.chat.id, review_id)
    region = review_data['region']
    with open('../stations list/data/json/partners_info.json', 'r', encoding='utf-8') as file:
        partners_data = json.load(file)
    print(partners_data[region])


# -------------------
# Незаконченные отзывы
# -------------------
def uncompleted_reviews(message):
    pass


# -------------------
# Статистика
# -------------------
def stats(message):
    pass


# -------------------
# Прогноз
# -------------------
def predict(message):
    pass


bot.polling(none_stop=True)

При запуске абсолютно непредсказуемо срабатывает какой-либо кусок кода несколько раз. С чем это может быть связано? Создать единый обработчик нажатий на кнопку мало чем помогло.


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