Чтобы реализовать функционал добавления двух предложений в базу данных с помощью Telegram-бота, вы можете сделать несколько улучшений и настроек в вашем коде. Вам нужно будет организовать последовательность ввода данных от пользователя, чтобы они вводили слова и их переводы в нужном порядке.
Вот пример того, как это можно сделать:
1. Вам нужно будет обработать ввод первого предложения (слова) и второго предложения (перевода) в виде шагов.
2. Используйте состояние для управления этапами ввода.
Вот пример кода, который иллюстрирует предложенный подход:
```python
import telebot
from telebot import types
import psycopg2
import os
# Настройка бота
API_TOKEN = 'YOUR_API_TOKEN'
bot = telebot.TeleBot(API_TOKEN)
DATABASE_URL = os.getenv('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()
# Хранение состояния
user_states = {}
@bot.message_handler(commands=['start'])
def start(message):
welcome_text = "<b>Добро пожаловать главное меню бота</b>\n\n" \
"В скором будущем мы будем добавлять сюда новые функции!"
key = types.ReplyKeyboardMarkup(resize_keyboard=True)
button0 = types.KeyboardButton("Переводчик")
button1 = types.KeyboardButton("Словарь")
key.add(button0, button1)
bot.send_message(message.from_user.id, welcome_text, reply_markup=key, parse_mode='html')
@bot.message_handler(func=lambda message: message.text == "Словарь")
def dictionary_message(message):
user_states[message.from_user.id] = 'waiting_for_word'
bot.send_message(message.from_user.id, "Введите первое предложение:")
@bot.message_handler(func=lambda message: user_states.get(message.from_user.id) == 'waiting_for_word')
def dictionary_message_step_2(message):
words = message.text
user_states[message.from_user.id] = 'waiting_for_translation'
user_states[message.from_user.id + '_word'] = words
bot.send_message(message.from_user.id, "Введите второе предложение (перевод):")
@bot.message_handler(func=lambda message: user_states.get(message.from_user.id) == 'waiting_for_translation')
def save_to_db(message):
translate = message.text
words = user_states.pop(message.from_user.id + '_word', None) # Получаем слово из состояния
if words:
insert_data(words, translate)
bot.send_message(message.from_user.id, "Слова успешно добавлены в словарь!")
else:
bot.send_message(message.from_user.id, "Произошла ошибка. Попробуйте еще раз.")
# Завершение процесса ввода
user_states.pop(message.from_user.id, None)
# Запуск бота
if __name__ == "__main__":
bot.polling(none_stop=True)
```
### Объяснение кода:
1. **Соединение с БД:** Функция `connect_to_db()` используется для соединения с PostgreSQL.
2. **Добавление данных:** Функция `insert_data()` добавляет записи в таблицу `Dictionary`.
3. **Состояния пользователей:** Словарь `user_states` используется для отслеживания состояния каждого пользователя. Это позволяет знать, на каком этапе находится ввод данных.
4. **Обработчики сообщений:**
- `dictionary_message`: Запускает процесс добавления слов в словарь.
- `dictionary_message_step_2`: Сохраняет введенное слово и запрашивает перевод.
- `save_to_db`: Сохраняет перевод в базу данных вместе с соответствующим словом.
5. **Команда `/start`:** Обрабатывает команду и показывает кнопки для взаимодействия.
Этот код должен помочь вам реализовать функционал словаря в вашем боте. Просто обратите внимание на то, чтобы заменить `YOUR_API_TOKEN` на ваш реальный токен бота и корректно установить переменную `DATABASE_URL` для подключения к вашей базе данных.