Поделюсь своим опытом разработки телеграм-бота для большого количества пользователей: разберу свои ошибки и шаги для их решения.
Одной из моих рабочих задач, как программиста, была автоматизация проведения викторины. Конечно, уже существуют специализированные бесплатные приложения, заточенные под эти задачи, но нужно было такое, в котором не было бы ничего лишнего, оно было всегда под рукой и такое привычное, чтобы не нужно было с ним разбираться. Выбор пал на телеграм-бота и для того чтобы он справлялся с большей нагрузкой было принято решение использовать асинхронную библиотеку aiogram.
Начнём с создания эхо бота на aiogram, тут нет ничего сложного, возьмём пример из документации:
Однако преимущество aiogram над python-telegram-bot и pyTelegramBotAPI в том, что он асинхронный, а значит, может обрабатывать несколько запросов почти единовременно. Стандартная база данных sqlite отлично подходит для несложных проектов и уже входит в стандартную библиотеку питона, поэтому для начала я решил использовать её.
Деплой бота Telegram или Discord на Heroku | Развертывание в облаке
Через несколько часов работы приложение было написано, и мы с коллегами решили протестировать на себе его работоспособность. Бот запускался с использование технологии long polling, и запускался он на локальном компьютере. Для небольшого количества человек этого вполне достаточно: 3-4 человека в секунду бот выдерживает без особых проблем.
Но, к сожалению, или к счастью, во время проведения викторины боту посыпалось бОльшее количество запросов, на которое мы не рассчитывали, в связи с чем посыпались ошибки не обрабатываемые ошибки, связанные с одновременным постоянным запросом новых сообщений у сервера и обработкой уже полученных.
Решением этой проблемы стал переход на вебхуки. И для обеспечения бесперебойной работы разместим его на удалённом сервере. Отличным решением для этого является heroku: здесь можно управлять запуском приложения как с компьютера, так и с мобильного приложения, отслеживать логи и, что является наиболее важным для нас, настраивать вебхуки.
Алгоритм для реализации эхо бота в данном случае занимает больше времени, но он достаточно прост:
2) На странице Personal создаём новое приложение:
Выбираем имя нашего приложения (у меня это «aiogram-echo-bot-webhook» — запомним его, оно нам ещё понадобится!), меняем сервер на Europe и нажимаем кнопку «create app»:
Отлично, мы подготовили контейнер для нашего приложения! Передать туда код самого приложения можно несколькими способами, например, через Heroku CLI или через GitHub. Разберём деплой через гитхаб, так как при любой возможности лучше использовать контроль версий 🙂
Перед деплоем на Heroku хорошо бы переписать наше приложение на вехуки[1]:
Что здесь происходит?
TOKEN, HEROKU_APP_NAME мы считываем из переменных окружения, которые скоро добавим в наш проект.
WEBHOOK_HOST – доменное имя нашего приложения
WEBHOOK_PATH – часть пути, на который мы будем принимать запросы. Его следует придумать таким, чтобы не было возможности его угадать, во избежание фальсификации запросов. В нашем случае используется токен бота, так как его, также, следует держать в секрете.
How to Run a Discord Bot on Heroku for Free | Discord Bot Tutorial Python Nextcord | Part 8
WEBHOOK_URL – полный url адрес, на который будут принимать запросы.
WEBAPP_HOST – хост нашего приложения, оставляем локальный.
WEBAPP_PORT – порт, на котором работает наше приложение, так же считывается с переменных окружения, которое предоставляет Heroku, его мы не заполняем.
Асинхронная функция on_startup устанавливает вебхук для нашего телеграм бота, на который будут отсылаться уведомления о получении новых сообщений. И on_shutdown, наоборот, удаляет этот вебхук при выключении.
Далее мы переключаем вывод логов только на вывод только чисто информативной информации. И, собственно, запускаем наш диспетчер, при этом при запуске опускаются все сообщения, которые были получены в то время, когда бот не работал, что указано в параметре «skip_updates».
Почти всё готово, но чтобы дать инструкции Heroku, как именно развернуть наше приложение, нужно создать файл «Procfile» и вставляем туда следующий код:
web: python main.py
Здесь: web – значит, что наше приложение будет web приложением, а то, что идёт после «:» это строка, которую необходимо выполнить в первую очередь. Запустить наш файл main.py с помощью питона.
И ещё один файл, который необходим для запуска, это requirements.txt, в котором мы указываем все зависимости нашего проекта. Его создаём, выполнив команду «pip freeze > requirements.txt».
Также можно указать, какую конкретную версию питона использовать: для этого создадим файл «runtime.txt» и впишем туда версию питона по шаблону «python-3.9.7».
Теперь подготовим переменные среды на Heroku: для этого переходим на вкладку «Settings» и жмём кнопку «Reveal Config Vars».
Источник: vc.ru
Как запустить бота discord.py через Heroku?
Мне надо было чтобы бот написанный на пайтоне, всегда был в сети. Для этого использовал Heroku, репозиторий использовал от GitHub. В репозиторий закинул 4 файла.
Procfile-в нем написал worker: python bot.py;
bot.py-в нем сам код;
requirements.txt-в нем библиотеки: discord.py aiohttp, websockets, chardet, discord.ext, discord_webhook, discord.utils;
в runtime.txt версию пайтона, а именно 3.9.0. Но на Heroku выдает ошибки:
Traceback (most recent call last): File «/app/bot.py», line 6, in from discord_webhook import DiscordWebhook, DiscordEmbed ModuleNotFoundError: No module named ‘discord_webhook’
ERROR: Could not find a version that satisfies the requirement discord.ext (from -r /tmp/build_d8626d71/requirements.txt (line 5)) (from versions: none) ERROR: No matching distribution found for discord.ext (from -r /tmp/build_d8626d71/requirements.txt (line 5))
Кто уже работал с этим сайтом и кто разбирается, пожалуйста помогите!
- Вопрос задан более двух лет назад
- 519 просмотров
Источник: qna.habr.com
Развертывание Python бота для ВКонтакте на Heroku
*Этими исполняемыми файлами являются: боты, работающие на основе вебхуков, веб серверы.
Следует пояснить по поводу файла процессов (Procfile): в бесплатной версии мы можем создавать до двух процессов, по 1 на каждый тип.
В нашем случае понадобится только:
worker: python %not_web_app%.py // vbot.py
6. Загружаем бота через git
Не забудьте убрать settings.py из .gitignore
git init
heroku git:remote -a %app_name%
git add .
git commit -am «make it better»
git push heroku master
7. Запускаем бота
Готово.
Если бот не запустился — проверьте логи
Остались вопросы? Задавайте в комментариях.
Подпишитесь на еще что-нибудь подобное этому.
Введите свой email
Как подключить Yeelight Arwen Ceiling Light 550C/450C к Китайскому региону Mi Home
Если вы здесь оказались, то наверняка в курсе, что умные потолочные светильники Yeelight Arwen 550C/450C выпущены специально для «российского» рынка. И повсюду можно найти подобные отзывы: Светильник действительно автоматически не определяется в Mi Home и подключить через него у меня тоже не вышло, но есть одно но. Так как
7 авг. 2022 г. — 2 min read
Как заставить работать мультимедийные клавиши в Яндекс Музыке (MacOS)
Всем маководам пользующимся Яндекс Музыкой посвящается. Меня же не одного бесит то, что нельзя листать треки и ставить их на паузу привычными мультимедийными кнопками? (спойлер: не одного) Данную проблему разработчики игнорируют уже несколько лет, хоть и создавались темы-предложения на соответствующем форуме: Поэтому пользователи уже успели сами себе сделать костыли решающие
12 нояб. 2021 г. — 2 min read
Подключение SMTP модуля для отправки почты в 1С-Битрикс: Управление сайтом
Так случилось, что мне понадобилось подключить сторонний модуль к сайту на «1С-Битрикс: Управление сайтом» для корректной отправки электронной почты. Зачем? Стандартные средства на старых версиях (в моем случае это 20.0.1198) не позволяют отправлять электронную почту с поддержкой DKIM, поэтому приходящие письма выглядели вот так: Меня это не устраивало.
Источник: blog.disonds.com