Привет! Чтобы ваш Telegram-бот отображал данные, полученные из базы данных, вам нужно модифицировать функцию `select_data`. В текущем состоянии она не возвращает значения, которые можно использовать для отправки сообщения в Telegram. Вместо этого она просто выполняет запрос и закрывает соединение.
Вот пример, как можно изменить ваш код так, чтобы данные из базы данных отправлялись пользователю в ответ на команду. Мы модифицируем функцию `select_data`, чтобы она возвращала результаты, и добавим обработку для вывода этих данных в боте.
Ваш обновлённый код может выглядеть так:
```python
import psycopg2
import telebot
from telebot import types
from telebot.types import Message
from googletrans import Translator
from langdetect import detect
from contextlib import closing
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
bot = telebot.TeleBot(TOKEN)
translator = Translator()
DATABASE_URL = 'YOUR_DATABASE_URL'
def connect_to_db():
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
return conn
def insert_data(words, translate):
conn = connect_to_db()
cursor = conn.cursor()
query = "INSERT INTO Dictionary (words, translate) VALUES (%s, %s)"
cursor.execute(query, (words, translate))
conn.commit()
cursor.close()
conn.close()
def select_data():
conn = connect_to_db()
cursor = conn.cursor()
cursor.execute('SELECT words, Dictionary.translate, description, Terms.translate FROM Dictionary INNER JOIN Terms ON Dictionary.id = Terms.words_id')
results = cursor.fetchall() # Получаем все результаты
cursor.close()
conn.close()
return results # Возвращаем результаты
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, f"Привет, <b>{message.from_user.first_name.title()}</b>! Я тестовый бот.\n"
f"1. Чем полезен бот\n")
@bot.message_handler(commands=['get_data'])
def get_data(message):
data = select_data() # Получаем данные из базы
if data:
response = ""
for row in data:
words, translate, description, term_translate = row
response += f"Слово: {words}, Перевод: {translate}, Описание: {description}, Перевод термина: {term_translate}\n"
bot.send_message(message.chat.id, response or "Данные отсутствуют.")
else:
bot.send_message(message.chat.id, "Не удалось получить данные.")
# Запуск бота
if __name__ == '__main__':
bot.polling(none_stop=True)
```
### Что здесь изменено?
1. **Функция `select_data`:** Теперь она возвращает список результатов, полученных из базы данных.
2. **Обработчик команды `/get_data`:** Эта новая функция позволяет пользователю запрашивать данные из базы. Она вызывает `select_data`, формирует строку ответа и отправляет её пользователю.
3. **Форматирование сообщения:** Для каждого результата из базы данных формируется строка, и все они объединяются.
### Замечания
- Не забудьте заменить `YOUR_TELEGRAM_BOT_TOKEN` и `YOUR_DATABASE_URL` на ваши реальные параметры.
- Для корректного отображения в Telegram можно использовать HTML-тэги, например, `<b>` для жирного текста.
- Не забудьте предварительно установить требуемые библиотеки (например, `psycopg2`, `pyTelegramBotAPI`, `googletrans`, и другие), если они у вас еще не установлены.
Такой код позволит вашему боту взаимодействовать с базой данных и отправлять пользователям запрашиваемую информацию.