PyTelegramAPI автоматическая отправка сообщения
Необходимо в определенное время отправлять пользователю сообщение, разумеется без его участия. Сообщения отправляются в виде callback'ов, которые вызывают сами сообщения.
@bot.message_handler(regexp="Напоминания") # пользователь нажимает на клавиатуре кнопку и в базе меняется сего статус
def next_ticket(message):
bot.send_message(message.chat.id, "Хотите ключить напоминания? В этом случае я буду присылать вам по одному случайному вопросу раз в день.")
keyboard = types.InlineKeyboardMarkup()
button_1 = types.InlineKeyboardButton(text="Да", callback_data= "reminding_on")
button_2 = types.InlineKeyboardButton(text="Нет", callback_data= "reminding_off")
keyboard.row(button_1, button_2)
msg = bot.send_message(message.chat.id, "Включаем?", reply_markup=keyboard)
bot.register_next_step_handler(msg, job) # переходим к следующей функции
# И тут начинается проблема:
def job():
сlass XClass(object): # четыре следующие строки мне помогли написать и я не понимаю как они работают, но callback точно посылается.
def __init__(self):
self.message = message
self.data = "ticket_1" # после отправки этого callback'а пользователю должно отправится сообщение
callback_inline(XClass())
schedule.every(10).minutes.do(job) # задаем время для периодического вызова функции
schedule.run_pending()
time.sleep(1)
Как сделать так, чтобы функция job() работала и отправляла callback'и?
При этом если просто запустить такой код:
@bot.message_handler(regexp="Напоминания")
def job(message):
сlass XClass(object):
def __init__(self):
self.message = message
self.data = "ticket_1"
callback_inline(XClass())
То callback выдается , но только при отправке пользователем любого сообщения. Как сделать, чтобы функция job работала самостоятельно?
Ответы (1 шт):
Автор решения: Dmitry Artamonov
→ Ссылка
Итак, проблема решилась следующим образом:
Достаточно один раз получить соответствующий call.data
и запускается цикл.
if call.data == "reminding_on":
bot.send_message(call.message.chat.id, 'Ок. Каждый день в 17:20 по Московскому времени я буду присылать вам один случайный вопрос.')
def job():
randomnum = randrange(1, 20, 1)
randomnum_2 = randrange(1, 10, 1)
random_ticket = str(randomnum) +'.'+str(randomnum_2)
date = datetime.datetime.today()
nowtime = date.strftime('%H:%M')
send_time = "17:20"
while nowtime != send_time:
# bot.send_message(call.message.chat.id, str(nowtime))
# bot.send_message(call.message.chat.id, str(send_time))
time.sleep(5)
return job()
else:
class XClass(object):
def __init__(self):
self.message = call.message
self.data = "ticket_%s" % random_ticket
callback_inline(XClass())
time.sleep(60)
return job()
job()
Надеюсь это будет кому то полезно.