Задать вопрос
@AndreyNOVICE1

Я не знаю что в этом коде не так поможите :)?

В коде возникает ошибка, точно не знаю что не так, но я заметил что в поля таблицы данные не записываются, использую я 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)
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы