Функции в ТГ-боте срабатывают несколько раз
Имеется телеграм-бот на 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)
При запуске абсолютно непредсказуемо срабатывает какой-либо кусок кода несколько раз. С чем это может быть связано? Создать единый обработчик нажатий на кнопку мало чем помогло.