телеграм бот не работает, он не отправляет ежедневно сообщения
очень хотела осуществить действие отправки сообщения ежедневно, но у меня никак не получается, подскажите, пожалуйста, как поправить код( к слову, когда я пыталась поставить bot.polling() в конце он выделялся серым цветом и просто не читался)
import schedule
import time
bot = telebot.TeleBot("")
def send_message(message):
bot.send_message(message.chat.id, 'Не спишь?')
schedule.every().day.at("08:00").do(send_message)
schedule.every().day.at("23:00").do(send_message)
def bot_polling():
bot.polling()
while True:
schedule.run_pending()
time.sleep(1)
Ответы (2 шт):
bot.send_message()
, кому вы собираетесь отправлять сообщение, если id неизвестен.
Чтобы отправить сообщение определённому пользователю, в аргумент функции сначала вложите id пользователя, которому хотите отправить.
Узнать свой id можно следующим образом.
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.send_message(message.chat.id, f'Ваш id: {message.from_user.id}')
Отправка нескольким пользователям по id:
list_id = [123456789, 987654321]
def time_to_send_message(list_id):
for id in list_id:
bot.send_message(id, 'some text')
time_to_send_message(list_id)
Отправка одному пользователю по id:
tg_id = # Ваш Telegram ID
def time_to_send_message():
bot.send_message(tg_id, 'some text')
time_to_send_message()
В вашем случае это будет выглядеть примерно так:
import schedule
import time
bot = telebot.TeleBot("")
tg_id = # Ваш Telegram ID
def send_message():
bot.send_message(tg_id, 'Не спишь?')
schedule.every().day.at("08:00").do(send_message)
schedule.every().day.at("23:00").do(send_message)
def bot_polling():
bot.polling()
while True:
schedule.run_pending()
time.sleep(1)
Рекомендую подключить базу данных, в ней хранить значения userID, при нажати на /start пользоваткль занесётся в базу данных с таким параметрами: userID: айди пользователя
В команде /start необходимо сделать проверку на существование пользователя, если пользователь уже 1 раз вводил /start, то больше он не будет заноситься в базу данных.
Далее уже вы можете брать айди из базы данных и каждому пользователю через цикл отправлять сообщения. Так-же рекомендую вставить блок try except, в целях если кто-либо из пользователей заблокирует бота, то бот не вернет ошибку, а продолжит выполнение рассылки.