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

Рейтинг: 0Ответов: 1Опубликовано: 25.07.2023
from random import randint
import schedule
import time


bot = telebot.TeleBot("token")


@bot.message_handler(commands=["start"])
def start(message):
    bot.send_message(message.chat.id, " text " + str(randint(1, 100)) + "%")


schedule.every().day.at("10:00").do(start)

bot.polling(none_stop=True, interval=0)
while True:
    schedule.run_pending()
    time.sleep(1)


bot.polling(none_stop=True, interval=0)
while True:
    schedule.run_pending()
    time.sleep(1)```

Ответы

▲ 0

Конкретно в этом примере оно не может работать, потому что в старт передается message, а функция в расписании вызывается без него. Вы буквально пытаетесь отправить сообщение в несуществующий чат, несуществующему человеку. Как минимум, вам нужно что-то такого формата:

def start(message):
    if(type(message)=="dict"):
        bot.send_message(message.chat.id, " text " + str(randint(1, 100)) + "%")    
    else:
        bot.send_message(message, " text " + str(randint(1, 100)) + "%")    

schedule.every().minute.at(":17").do(start, message="111111111")
while True:
    schedule.run_pending()
    time.sleep(1)

Если нужно отправлять всего одному человеку, то, как в примере выше, просто добавьте в функцию старт условие, которое проверяет, является ли message словарем или просто idшником, если idшкой формата "2847329841", то сообщение отправляется на чат id, если словарем - на message.chat.id и передавайте id чата как параметр для расписания, если многим - тут нужен списочек и цикл, если многим и заранее неизвестно кому - тут только бд, получать список всех idшек и отправлять им.

А вообще, просто сделайте абсолютно отдельную функцию для расписания, пихать одну и ту же функцию в два логически разных действия довольно странно, особенно странно это будет, когда вам понадобится добавить в старт побольше текста