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

Почему бот не отправляет сообщение в нужно время?

Вообщем весь код ниже. Суть бота проста, он должен отправлять напоминалку во время которое указал пользователь. Строки которые отвечают за это внизу они расписаны подсказками. Бот не работает, ошибок нет, бот просто не отправляет сообщения в указанное время, спасибо за помощь тем кто поможет.

import telebot
from telebot import types
import sqlite3
import schedule
import time
import re

bot = telebot.TeleBot('апи не покажу ;)')

user_responses = {}

time_input = '00:00'
hint_input = ''

# бот приветствует пользователя и выдает ему команду /help
@bot.message_handler(commands=['start'])
def hello_message(message):
try:
# Подключаю к дб при вводе /start
connect = sqlite3.connect('users.db')
cursor = connect.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS login_id(
id INTEGER
)""")
connect.commit()

# Проверяю есть ли уже пользователь в дб
people_id = message.chat.id
cursor.execute(f"SELECT id FROM login_id WHERE id = {people_id}")
data = cursor.fetchone()
if data is None:
# Добавляю в поля пользователя
user_id = [message.chat.id]
cursor.execute("INSERT INTO login_id VALUES(?);", user_id)
connect.commit()
else:
bot.send_message(message.chat.id, 'Вы уже зарегистрированы.')

# Текст при вводе /start
bot.send_message(message.chat.id, '''
Привет, мое имя Эрис! Я помогу тебе сохранить твое время ;)''')
bot.send_message(message.chat.id, '''
Введи команду /help для просмотра всех моих команд. ''')

except Exception as e:
print(f"Error: {str(e)}")

# команда /help которая показывает что может бот.
@bot.message_handler(commands=['help'])
def help(message):
# Добавляю клавиатуру
kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton(text='/sethint')
btn2 = types.KeyboardButton(text='/settings')
kb.add(btn1, btn2)

# Текст при вводе /help
bot.send_message(message.chat.id, '''
Вот что я могу :)''')
bot.send_message(message.chat.id, '''
/sethint - Создать подсказку.
/settings - Управление подсказками.
''', reply_markup=kb)

# Запрашиваем у человека время
@bot.message_handler(commands=['sethint'])
def settime(message):
bot.send_message(message.chat.id, '''
Сейчас тебе нужно будет ввести время и подсказку которую тебе пришлет бот в определенное время.
''')
user_time = bot.send_message(message.chat.id, '''
Введи время в формате HH:MM:
''')
bot.register_next_step_handler(message,time_step)

# Показываем человеку введенное время и делаем правильные формат с помощью регулярного выражения.
def time_step(message):
try:
global time_input
time_input = message.text
if re.match(r'^\d{2}:\d{2}$',time_input):
bot.send_message(message.chat.id, f"Вы ввели время: {time_input}")
bot.send_message(message.chat.id, "Дальше подсказка! Введи /hint")
else:
bot.send_message(message.chat.id, "Неправильный формат времени. Используйте HH:MM.")
except Exception as e:
bot.send_message(message.chat.id, "Произошла ошибка. Пожалуйста, попробуйте снова.")

# Вводим подсказку
@bot.message_handler(commands=['hint'])
def sethint_user(message):
user_hint = bot.send_message(message.chat.id, '''
Введи подсказку, максимум 50 символов:
''')
bot.register_next_step_handler(message, hint_step)

# Подтверждение что человек указал подсказку
def hint_step(message):
try:
global hint_input
hint_input = message.text
bot.send_message(message.chat.id, f"Вы указали подсказку: {hint_input}")
except Exception as e:
bot.send_message(message.chat.id, "Произошла ошибка. Пожалуйста, попробуйе снова.")

def endhint(message):
try:
global hint_input
global time_input
bot.send_message(message.chat.id, f"Напоминаю! {hint_input}, в {time_input}")

except Exception as e:
bot.send_message(message.chat.id, "Произошла ошибка, попробуйте еще раз.")

schedule.every().day.at(time_input).do(endhint)

while True:
schedule.run_pending()
time.sleep(1)
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@codingoleg
Ты хочешь, чтобы у тебя было 2 параллельных процесса - работа бота и планировщик. Я это делал через aiogram/asyncio. Иначе будет работать либо одно, либо другое. Возможно ли это сделать через субпроцессы или многопоточность - хз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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