Допустим у вас есть таблица с названием `categories` в базе данных SQLite3, и вы хотите извлечь из неё все категории, чтобы создать список inline-кнопок в Telegram. Для работы с Telegram API мы будем использовать библиотеку `python-telegram-bot`, a для работы с базой данных SQLite3 — модуль `sqlite3` из стандартной библиотеки Python.
Примерный код может выглядеть так:
```python
import sqlite3
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
# Функция для получения категорий из базы данных
def get_categories_from_db():
# Подключаемся к базе данных
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()
# Запрос на получение всех категорий
cursor.execute("SELECT category_name FROM categories")
categories = cursor.fetchall()
# Закрываем соединение с базой данных
conn.close()
# Возвращаем список категорий
return categories
# Функция для создания списка inline-кнопок
def build_menu(bot, update):
categories = get_categories_from_db()
# Создаем inline-кнопки для каждой категории
buttons = [InlineKeyboardButton(category[0], callback_data=category[0]) for category in categories]
# Создаем inline-клавиатуру
reply_markup = InlineKeyboardMarkup([buttons])
# Отправляем сообщение с inline-клавиатурой пользователю
bot.message.reply_text('Выберите категорию:', reply_markup=reply_markup)
# Обработчик нажатия на кнопку
def button_callback(bot, update):
# Этот метод вызывается при нажатии на кнопку
query = bot.callback_query
# В query.data будет содержаться callback_data кнопки, которую нажал пользователь
category_selected = query.data
# Для примера просто отправим выбранную категорию обратно пользователю
bot.editMessageText(text=f"Выбрана категория: {category_selected}",
chat_id=query.message.chat_id,
message_id=query.message.message_id)
# Метод для запуска бота
def main():
# Создаем экземпляр Updater
updater = Updater("YOUR_BOT_TOKEN", use_context=True)
# Получаем диспетчера для регистрации обработчиков
dp = updater.dispatcher
# Добавляем обработчики команд
dp.add_handler(CommandHandler('start', build_menu))
# Добавляем обработчик нажатий на кнопки
dp.add_handler(CallbackQueryHandler(button_callback))
# Запускаем бота
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
```
Обратите внимание на несколько важных моментов:
- Замените `'your_database.db'` на путь к вашей базе данных SQLite3.
- Замените `"YOUR_BOT_TOKEN"` на токен вашего бота Telegram.
- Этот пример использует старый синтаксис `python-telegram-bot`. Проверьте версию библиотеки и обновите синтаксис, если это необходимо.
- В функции `build_menu` мы организуем кнопки в один ряд. Вы можете настроить то, как кнопки отображаются, изменяя структуру списка, который передаётся в `InlineKeyboardMarkup`.
Чтобы узнать точную информацию об ошибке, которая у вас возникает, предоставьте `traceback` ошибки, чтобы было понятно, в каком месте программы и по какой причине происходит сбой.