• Как настроить webhook для Telegram-бота (python3 + pyTelegramBotAPI) на хостинге Heroku?

    @keshamin Автор вопроса
    johny2308, @gavrilka
    В общем в итоге еще весной 2017-го, когда был создан этот тикет, я все-таки справился с этой проблемой путем долгих проб и постоянных нерабочих пушей на Хероку...
    Уже не помню весь свой путь к этому решению, но в итоге вот как в итоге у меня это работает:
    import telebot
    import os
    from flask import Flask, request
    import logging
    
    bot = telebot.TeleBot(token)
    
    # Здесь пишем наши хэндлеры
    
    # Проверим, есть ли переменная окружения Хероку (как ее добавить смотрите ниже)
    if "HEROKU" in list(os.environ.keys()):
        logger = telebot.logger
        telebot.logger.setLevel(logging.INFO)
    
        server = Flask(__name__)
        @server.route("/bot", methods=['POST'])
        def getMessage():
            bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
            return "!", 200
        @server.route("/")
        def webhook():
            bot.remove_webhook()
            bot.set_webhook(url="https://min-gallows.herokuapp.com/bot") # этот url нужно заменить на url вашего Хероку приложения
            return "?", 200
        server.run(host="0.0.0.0", port=os.environ.get('PORT', 80))
    else:
        # если переменной окружения HEROKU нету, значит это запуск с машины разработчика.  
        # Удаляем вебхук на всякий случай, и запускаем с обычным поллингом.
        bot.remove_webhook()
        bot.polling(none_stop=True)


    Насчет настройки переменной окружения в Хероку - заходим в настройки приложения в Хероку и видим пункт "Config Variables". И добавляем туда переменную HEROKU, чтобы наш бот отличал - запущен он на сервере или на локальной машине. Но это уже не обязательно, это вкусовщна. Просто для меня это удобно.

    Надеюсь, у вас все получится!
    Ответ написан
    3 комментария
  • Стоит ли работать и учиться на программиста?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Стоит. Обязательно идите. Чем вас будет больше, тем ценнее программисты будут как специалисты.
    И "работать на программиста" тоже стоит. Мне вот тут пол помыть пару раз в неделю нужно бывает.
    Ответ написан
    Комментировать
  • Что такое self в Python?

    @olegshv
    SysAdmin
    Объяснение self в python:

    dog‎: у котов внутри есть мурчалка
    dog‎: она реализована для всех котов в классе кот
    ‎dog‎: в объекте кот надо как то вызвать метод мурчало у класса кот
    ‎dog‎: как ты это сделаешь?
    dog‎: кот.мурчало()
    ‎dog‎: ежели ты вызовешь кот.мурчало(), муркнут сразу все коты на свете
    ‎dog‎: а ежели ты вызовешь self.мурчало(), муркнет только тот кот, на которого указывает self
    Ответ написан
    5 комментариев
  • Подключение кулера к адаптеру 12 вольт. Не сгорит?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Из комментариев видно, что вам непонятен практический смысл терминов "напряжение" и "ток". В этом случае разобраться помогает сравнение с потоком воды. Напряжение - это аналог давления, или разницы уровней выше-ниже плотины. А ток - аналог расхода воды (не зря созвучен слову "поток"). Если кран закрыт (выключатель выключен, цепь разомкнута) то какое бы ни было напряжение/давление, (по)тока не будет.
    Теперь с вашим примером. Есть адаптер 12 в, 0,5 а. Включаем его - на выходе 12 вольт, и никакого тока, хотя на нём написано 0,5 а - ещё не создан путь для потока. Подключаем кулер - пошёл такой ток, который затребовал кулер, т.е. 0,18 а, и не больше (поток течёт по размеру дырочки, которую ему открыли). Остальные 0,32 ампера пока не востребованы. Подключаем ещё один такой же кулер - ток возрос до 0,36 а (два потока по 0,18). Поскольку адаптер может обеспечить 0,5, всё нормально. Но если подключим ещё один такой же кулер, суммарный ток возрастет до 0,54 а, что больше допустимого для адаптера - он будет перегружен, от него требуют невозможного. Если через плотину перельётся поток больше, чем может прийти по реке, то поскольку вода ушла, верхний уровень над плотиной понизится. Аналогично при перегрузке по току выходное напряжение адаптера понизится и уже будет менее 12 вольт. Если защиты от перегрузки в схеме адаптера не предусмотрено, он просто перегреется и может сгореть. Если защита предусмотрена, то при перегрузке она сработает, адаптер отключится, выходной ток исчезнет.
    если врубаем напрямую, то нужно ли еще какой элемент в цепи, чтобы обезопасить сию конструкцию?

    Если встроенной защиты от перегрузки нет, то обычно последовательно в цепь включают такой элемент, как плавкий предохранитель. Сгорая сам, он защищает от повреждения остальную схему, гораздо более дорогую. В вашем случае полезно последовательно с выходной цепью адаптера включить предохранитель на 0,5 а. Но реальный ток сгорания у дешёвых плавких предохранителей не точен и может быть в пределах -30%... +80%. Так что не удивляйтесь, если увидите, что такой предохранитель сгорит при подключении всего двух кулеров или не сгорит вообще, когда уже весь адаптер будет в дыму.
    Ответ написан
    4 комментария
  • Как лучше учить английский?

    antonydevanchi
    @antonydevanchi
    10 лет в айтишке
    Смотрите порно-кастинги на английском. И приятно и полезно, так как задается очень много вопросов с использованием стека словарного запаса используемого в повседневной жизни.
    Ответ написан
    Комментировать