Задать вопрос
WHOYAMI
@WHOYAMI
Бу, испугался? Не бойся, я твой друг

Как обновлять message в Telebot?

Недавно столкнулся с проблемой, что объект message(если это не объект, то поправьте) не обновляется у меня, если пользователь ничего не отправляет боту.
В своем коде создал отдельный поток для уведомлений, и там я беру время пользователя через
unix_time = message.date
Он мне присылает время в юних и потом каждые допустим пол минуты я сравниваю время пользователя с установленным мои временем для получения уведомления, если условие верно, то отправляется напоминание. Но в откладке я заметил, что время всегда старое, так как я понял, что объект message обновляется только после действия пользователя и поэтому время не будет обновляться в нем…

UPD: добавлю пример кода
import time
import datetime 

setTimeH = 11
setTimeM = 30

@bot.message_handler()
def day1(message):
    #Не стал вписывать код перед запуском потока, чтобы не заполнять лишний раз код
    Notify = threading.Thread(target=notify, args=(message, )
    Notify.start()
    
#Функция, которая запускается в отдельном потоке
def notify(message):
    while true:
        unix_time = message.date
        user_time = datetime.datetime.fromtimestamp(unix_time).strftime('%Y-%m-%d %H:%M:%S')
        user_timeH = datetime.datetime.fromtimestamp(unix_time).strftime('%H')
        user_timeM = datetime.datetime.fromtimestamp(unix_time).strftime('%M')
        print(user_time) #Выводит к примеру 2024-12-06 22:02:30 и после каждый раз значение одно и тоже, а это значит условие в операторе if не будет выполняться, так как объект message не обновляется 
        if int(user_timeH) and int(user_timeM) == setTimeH and setTimeM:
            bot.send_message(message.chat.id, "text”)
            time.Sleep(60)
        else:
            time.Sleep(30)
        time.Sleep(30)
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@Reply_Other
Согласно документации к апи https://core.telegram.org/constructor/message. Атрибут date содержит дату отправки сообщения. Соответственно бот должен отправить уведомление только когда время отправки совпадет со временем, когда вы хотите получить уведомление. Если я правильно понял задачу, которую вы хотите решить, нужно в тексте сообщения пользователя передавать время, когда вы хотите получить уведомление. И я обнаружил ошибку в условии. Должно выглядеть вот так:
if (int(user_timeH) == setTimeH)
  and (int(user_timeM) == setTimeM):

Надеюсь мой ответ вам поможет!
Ответ написан
Ваш ответ на вопрос

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

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