Тема: Проблема в handler при написанні tg бота для зберігання фольклору
Пишу бота на telebot, який зможе зберігати пісні від користувача в sqlite3 бд та видавати інформацію про пісні. Зараз готова частина з додаванням пісень. Тобто користувач може додати пісню. Після чого вся інфа додається до бд. Вже трохи довго застиг на реалізації пошуку пісні за назвою.
Вище ще є код, який викликає process_song_name, після введення назви. Далі йде пошук в бд і результати збігів виводяться в кнопках.
Далі починаються проблеми... При натисканні на кнопку з піснею має посилатися callback_data, яку обробляє handler. І виконуватись функція, яка повертає все про пісню. Але чомусь не працює. Буду вдячний, якщо допоможете виправити помилку!
@bot.message_handler(func=lambda message: True)
def process_song_name(message):
# Отримати назву
search_name = message.text
conn = sqlite3.connect('new_songs.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM songs WHERE title LIKE ?', ('%' + search_name + '%',))
search_results = cursor.fetchall()
conn.close()
# відобразити результати у кнопках
if not search_results:
bot.send_message(message.chat.id, f"Не знайдено пісні: '{search_name}'.")
else:
bot.send_message(message.chat.id, "Результати пошуку:")
for result in search_results:
# створення кнопок з кожним результатом
button_text = f"{result[3]} - {result[6]}"
callback_data = f"song_info-{result[0]}"
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton(text=button_text, callback_data=callback_data))
bot.send_message(message.chat.id, f"Назва: {result[3]}, Регіон: {result[6]}", reply_markup=markup)
# Хендлер для виведення інфи про вибрану пісню, який не працює(
@bot.callback_query_handler(func=lambda call: call.data and call.data.startswith("song_info-"))
def handle_song_info_callback(call):
print("Callback received:", call.data)
#не виводиться в консоль(
song_id = int(call.data.split('-')[1])
conn = sqlite3.connect('new_songs.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM songs WHERE id = ?', (song_id,))
song_info = cursor.fetchone()
conn.close()
if song_info:
info_message = f'Title: {song_info[3]}\nРегіон: {song_info[6]}\Додано: {song_info[1]}\Текст: {song_info[5]}'
bot.send_message(call.message.chat.id, info_message)
else:
bot.send_message(call.message.chat.id, "Помилка при отримані даних.")