Insaned
@Insaned

Как с помощью pytelegrambotapi обрабатывать внешние события?

Написал несколько ботов. Во всех случаях обходился примерно такой конструкцией:
import telebot
bot = telebot.TeleBot(config.token, threaded=True)

@bot.message_handler(commands=['Меню','start','Обновить'])
def menu(message):
    markup = types.ReplyKeyboardMarkup()
    markup.row('/Обновить')
    bot.send_message(message.chat.id, 'Привет ' + message.chat.first_name,reply_markup=markup)

if __name__ == '__main__':
    bot.polling(none_stop=True)

Недостаток этого подхода что бот получается "реактивным" т.е. всё что он может делать - реагировать на действия пользователя. А можно ли сделать так, чтобы бот сам инициировал сообщения по каким-то внешним событиям?
  • Вопрос задан
  • 2654 просмотра
Решения вопроса 1
@dmitriprank
Смотри, какая веселая вещь. И можешь, и не можешь в то же время...
1. Начну с малого - пока ты первый боту не напишешь - он писать тебе вообще не может
2. Если 1 пункт в порядке, наступает проблема номер 2 - или вручную запускай скрипт, в котором не будет поллинга, а лишь команда на отправку сообщения, или кидай ее в крон, задавай периодичность запуска этого скрипта, и радуйся, или же привязывай свою отправку к какому-то действию пользователя.
Нет, конечно можно извратиться, и написать что-то типа

while true:
    if (какое-то условие, допустим, your_date == datetime.today()):
        bot.send_message(.....)
        time.sleep(60*60) #Время сам уже выбирай


Логика в том, что бы запускать скрипт вот с таким простеньким кодом, и он себе будет работать (вопрос в том, сколько он будет жрать...), проверять твое условие, и засыпать на угодное тебе время.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@X-User
Ты в любой момент можешь вызвать bot.send_message(). Вот происходит какое то событие, ты берешь айди юзера из базы и отправляешь сообщение.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект