В коде возникает ошибка, точно не знаю что не так, но я заметил что в поля таблицы данные не записываются, использую я Sqlite3 и SQLiteStudio
Суть ошибки в том что на стадии установки времени и текста напоминания бот начинает постоянно у меня спрашивать Введите дату/время и текст напоминая, если дело в sql напишите пожалуйста как это настроить или исправить.
Вот сам код:
# Подключение к базе данных SQLite3
conn = sqlite3.connect('reminders', check_same_thread=False)
cursor = conn.cursor()
# Создание таблицы reminders, если она не существует
cursor.execute('''CREATE TABLE IF NOT EXISTS reminders
(id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
username TEXT,
reminder_text TEXT,
reminder_date TEXT)''')
conn.commit()
# Инициализация бота
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def handle_start(message):
# Проверка, есть ли пользователь в базе данных
cursor.execute("SELECT * FROM reminders WHERE user_id=?", (message.from_user.id,))
user = cursor.fetchone()
if user is None:
# Если пользователя нет в базе данных, запрашиваем его имя
bot.send_message(message.chat.id, "Привет! Как тебя зовут?")
bot.register_next_step_handler(message, handle_name)
else:
bot.send_message(message.chat.id, f"Привет, {user[2]}! Чем я могу помочь?")
# Обработчик имени пользователя
def handle_name(message):
name = message.text
# Добавляем информацию о новом пользователе в базу данных
cursor.execute("INSERT INTO reminders (user_id, username) VALUES (?, ?)", (message.from_user.id, name))
conn.commit()
bot.send_message(message.chat.id, f"Приятно познакомиться, {name}! Чем я могу помочь?")
# Обработчик всех остальных сообщений
@bot.message_handler(func=lambda message: True)
def handle_message(message):
cursor.execute("SELECT * FROM reminders WHERE user_id=? AND reminder_date IS NULL", (message.from_user.id,))
reminder = cursor.fetchone()
conn.commit()
if reminder is None:
# Если у пользователя нет текущего напоминания, просим его ввести дату/время
bot.send_message(message.chat.id, "Когда тебе нужно напомнить?")
bot.register_next_step_handler(message, handle_date)
else:
cursor.execute("UPDATE reminders SET reminder_text=? WHERE id=?", (message.text, reminder[0]))
conn.commit()
# Отправляем сообщение с датой/временем и текстом напоминания
keyboard = types.InlineKeyboardMarkup()
keyboard.row(
types.InlineKeyboardButton("Да, верно", callback_data="confirm"),
types.InlineKeyboardButton("Нет, редактировать дату/время", callback_data="edit_date"),
types.InlineKeyboardButton("Нет, редактировать сообщение", callback_data="edit_message")
)
bot.send_message(message.chat.id, f"Ты хочешь, чтобы я напомнил тебе:\n\n{reminder[4]}\n\n{reminder[3]}",
reply_markup=keyboard)
# Обработчик даты/времени
def handle_date(message):
date = message.text
if '.' not in date:
# Если дата не указана, считаем ее сегодняшней
date = datetime.datetime.now().strftime("%d.%m.%Y") + ' ' + date
# Проверка, является ли введенная строка датой/временем
try:
reminder_date = datetime.datetime.strptime(date, "%d.%m.%Y %H:%M")
# Добавляем информацию о дате/времени в базу данных
cursor.execute("UPDATE reminders SET reminder_date=? WHERE user_id=? AND reminder_date IS NULL",
(reminder_date, message.from_user.id))
conn.commit()
bot.send_message(message.chat.id, "Что тебе нужно напомнить?")
except ValueError:
bot.send_message(message.chat.id,
"Некорректный формат даты/времени. Введите дату/время в формате ДД.ММ.ГГГГ ЧЧ:ММ.")
bot.register_next_step_handler(message, handle_date)
# Обработчик кнопок
@bot.callback_query_handler(func=lambda call: True)
def handle_button(call):
if call.data == "confirm":
# Отправляем подтверждение и удаляем текущее напоминание из базы данных
bot.send_message(call.message.chat.id, "Хорошо, я запомнил!")
cursor.execute("DELETE FROM reminders WHERE id=?", (call.message.reply_to_message.message_id,))
conn.commit()
elif call.data == "edit_date":
# Просим пользователя ввести новую дату/время
bot.send_message(call.message.chat.id, "Введи новую дату/время:")
bot.register_next_step_handler(call.message, handle_date)
elif call.data == "edit_message":
# Просим пользователя ввести новое сообщение
bot.send_message(call.message.chat.id, "Введи новое сообщение:")
bot.register_next_step_handler(call.message, handle_message)
# Функция для проверки и отправки напоминаний
def check_reminders():
current_time = datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
# Получаем все напоминания, у которых наступила дата/время
cursor.execute("SELECT * FROM reminders WHERE reminder_date=?", (current_time,))
reminders = cursor.fetchall()
conn.commit()
for reminder in reminders:
# Отправляем сообщение с напоминанием пользователю
bot.send_message(reminder[1], f"Напоминаю:\n\n{reminder[4]}\n\n{reminder[3]}")
# Удаляем напоминание из базы данных
cursor.execute("DELETE FROM reminders WHERE id=?", (reminder[0],))
conn.commit()
# Запуск бота
bot.polling(none_stop=True, interval=1)
# Запуск функции проверки и отправки напоминаний каждую минуту
while True:
check_reminders()
time.sleep(60)