Задать вопрос
ApXNTekToP
@ApXNTekToP
Недопрограммист

Как отправить сообщение для отдельного пользователя через определенный промежуток времени?

Имеется бот, в котором пользователь переходит в бота , запускает его по команде /start.
После бот высылает определенное сообщение.
Через определенный промежуток времени бот высылает еще 2 сообщения, сообщение #1 в 12:00, сообщение #2 в 18:00.
Промежуток который должен быть перед отправкой сообщения #1 и #2 для каждого пользователя 24 часа.
Как это все можно реализовать и возможно ли вообще?
  • Вопрос задан
  • 345 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
FAbrickA
@FAbrickA
Программист
Самым простым способом будет реализовать всё это через threading и time.sleep()
Здесь создаётся 2 потока, которые отправляют сообщения, а потом уходят в сон на 24 часа

import datetime as dt
from threading import Thread
from time import sleep


class SendThread(Thread):
    def __init__(self, hours: int):
        Thread.__init__(self)
        self.hours = hours

    def run(self):
        # Здесь код, который будет выполняться в потоке
        day_to_seconds = 24 * 60 * 60
        now = dt.datetime.now()
        today_time = now - dt.datetime(year=now.year, month=now.month, day=now.day)
        seconds = today_time / dt.timedelta(seconds=1)
        time_to_next_call = self.hours * 60 * 60 - seconds  # Время в секундах до первого вызова
        if time_to_next_call < 0:
            time_to_next_call += day_to_seconds
        sleep(time_to_next_call)

        while True:
            #  Ваш код (отправка сообщения)
            # ...

            sleep(day_to_seconds)


# Ваш код...

if command == "/start":
    send_12 = SendThread(hours=12)  # сообщение #1
    send_18 = SendThread(hours=18)  # сообщение #2

    send_12.start()
    send_18.start()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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