Пытаюсь в телеграм боте сделать добавление данных в БД

У меня есть телеграм бот. Ему присылают геолокацию, бот достаёт ширину и долготу и отдаёт в другой скрипт, второй же скрипт преобразовывает ширину и долготу в город. Потом уже первый скрипт получает название города и присылает его пользователю. Если пользователь подтверждает что город правильный то вызывается другая функция из третьего скрипта. Третий скрипт берёт название города и telegram_id и добавляет название города в БД где telegram_id(в базе) == telegram_id(в функции). НО у меня почему то это не работает.

Вот хендлер:

@bot.message_handler(content_types=['location'])
def location_lat_loc(message):
    if message.location:
        lat = message.location.latitude
        loc = message.location.longitude
        city = dadata_city(lat=lat, loc=loc)  # Функция определения города по координатам
        if not city:  # Если город не найден
            bot.send_message(
                message.chat.id,
                text='К сожалению я *не нашёл* рядом с вами *поддерживаемый* город, чтобы попробовать ещё раз, введите команду */gps*',
                parse_mode='Markdown',
                reply_markup=types.ReplyKeyboardRemove()
            )
        else:
            bot.send_message(
                message.chat.id,
                text=f'*Определяем город.*',
                parse_mode='Markdown',
                reply_markup=types.ReplyKeyboardRemove()
            )
            keyboard = types.InlineKeyboardMarkup()
            button_yes_it_my = types.InlineKeyboardButton(text="✅Да, мой", callback_data=f'yes_my_city_{city}')
            button_not_my = types.InlineKeyboardButton(text="❌Нет не мой.", callback_data='no_is_not_my_city')
            keyboard.add(button_yes_it_my, button_not_my)
            bot.send_message(
                message.chat.id,
                text=f'Это ваш город? {city}',
                reply_markup=keyboard
            )

@bot.callback_query_handler(func=lambda call: call.data.startswith('yes_my_city'))
def yes_my_city(call):
    city = call.data[len('yes_my_city_'):]
    bot.send_message(call.message.chat.id, f'*Вы поставили свой город {city}*', 
parse_mode='Markdown')
    delete_city_value(call.message.from_user.id)
    if city_update(call.message.from_user.id, str(city)) == 'Success':
        bot.send_message(call.message.chat.id, 'Ваш город успешно обновлен.')
    else:
        bot.send_message(call.message.chat.id, 'Произошла ошибка при обновлении вашего города.')
    if city_search(call.message.from_user.id) is None:
        bot.send_message(call.message.chat.id, 'Не подтверждаю.')
        print('Города нет.')

@bot.callback_query_handler(func=lambda call: call.data == 'no_is_not_my_city')
def no_is_not_my_city(call):
    bot.send_message(call.message.chat.id, 'Пожалуйста, попробуйте еще раз, используя команду /gps.')

Вот функция установки значения в бд:

def city_update(telegram_id, city):
    Success = 'Success'
    city = str(city)
    connection = None
    try:
        connection = sqlite3.connect('data.db')
        cursor = connection.cursor()
        delete_city_value(telegram_id)
        cursor.execute('UPDATE Telegram SET city = ? WHERE telegram_id = ?', (city, telegram_id))
        connection.commit()
        print("Апдейт города успешно.")
        return Success
    except sqlite3.Error as e:
        print(f"Ошибка city_update: {e}")
        return False
    finally:
        if connection:
            connection.close()

Если что в самом начале при команде /start бот в бд записывает telegram_id если этот человек заходит в первый раз и ставит в поле города 'not_set'. Везде защиты от ошибок. Вот как выглядит cmd после этого.

Бот запущен!
Пользователь с ID 5649807381 существует.
Значение в ячейке city для telegram_id = 7472280268 было удалено.
Значение в ячейке city для telegram_id = 7472280268 было удалено.
Апдейт города успешно.
Город не найден для данного telegram_id.
Города нет.

Библиотека telebot.


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