Как заставить бота автоматически отправлять сообщения в заданное время?
через scheduleimport schedule
import time

def job():
    print("I'm working...")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().minute.at(":17").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
Самый простой вариант.
В базу писать дату, время, id пользователя и текст сообщения. Для каждого сообщения существует статус: новое, отправка, отправлено.
С помощью крона запускать скрипт каждую минуту (или другой период времени). При запуске смотреть каким пользователям уже можно/пора отправлять сообщения.
Если уже пора, то делаем отметку в базе "идет отправка" и начинаем отправлять сообщения.
После отправки пишем в базу "отправлено".