@zenondd

Как обновить таблицу SQLite нажатием inline кнопки в телеграм боте?

Не могу никак заставить бота обращаться к БД нажатием inline кнопки. Функция, отвечающая за обработку inline клавиатуры, выполняется, но строки, отвечающие за БД, просто пропускает. При этом, если ту же функцию вызвать обычной клавиатурой, то все работает, как надо. Что и где я упускаю?

Привожу обсуждаемую часть кода:

from aiogram import Bot, types, executor, Dispatcher
import sqlite3
import logging

TOKEN = "_TOKEN_"
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
logging.basicConfig(level=logging.INFO)

@dp.message_handler(commands=['show']) 
async def test(message: types.Message):
    key = types.InlineKeyboardMarkup()
    b1 = types.InlineKeyboardButton(text='Test it', callback_data='testit')
    key.row(b1)
    await message.answer('Take a chance', reply_markup=key)

@dp.callback_query_handler(text='testit')
async def update(call: types.CallbackQuery): #вот эта функция не выполняется полностью
    uid = call.message.from_user.id
    conn = sqlite3.connect('db/gecko.db', check_same_thread=False)
    cursor = conn.cursor()
    cursor.execute('UPDATE table_name SET column = ? WHERE user_id = ?', ('some_text', uid))
    conn.commit()
    cursor.close()
    print('ok')

@dp.message_handler(content_types=['text']) 
async def sl(msg: types.Message): #эта функция работает прекрасно и вносит все изменения в таблицу
    if msg.text == 'sl':
        uid = msg.from_user.id
        conn = sqlite3.connect('db/gecko.db', check_same_thread=False)
        cursor = conn.cursor()
        cursor.execute('UPDATE table_name SET column = ? WHERE user_id = ?', ('some_text', uid))
        conn.commit()
        cursor.close()
        print('ok')

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 1
Замените
@dp.callback_query_handler(text='testit')
На
@dp.callback_query_handler(lambda c: c.data == 'testit')

Ваш декоратор был правильным для отслеживания KeyboardButton, но не для InlineKeyboardButton
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 апр. 2024, в 00:13
800 руб./за проект
17 апр. 2024, в 00:06
240000 руб./за проект
17 апр. 2024, в 00:02
1000 руб./за проект