Python бот для windows

Телеграм-бот на Python

В пер­вой части мы сде­ла­ли горо­скоп на Python, кото­рый выда­ёт нам про­гноз на день по зна­ку зоди­а­ка. Сего­дня пой­дём даль­ше: теперь этот же гене­ра­тор горо­ско­пов будет встро­ен в Теле­грам в виде бота.

Да. То, что обыч­но на кур­сах про­да­ют за 50 тысяч руб­лей, мы вам сей­час рас­ска­жем за 15 минут бесплатно.

Как всё будет работать

В этом про­ек­те три зве­на: наш ком­пью­тер с Python, сер­вер Теле­гра­ма и Телеграм-клиент.

На ком­пью­те­ре рабо­та­ет интер­пре­та­тор Python, а внут­ри интер­пре­та­то­ра кру­тит­ся наша про­грам­ма на Python. Она отве­ча­ет за весь кон­тент: в неё зало­же­ны все шаб­ло­ны тек­ста, вся логи­ка, всё поведение.

Внут­ри про­грам­мы на Python рабо­та­ет биб­лио­те­ка, кото­рая отве­ча­ет за обще­ние с сер­ве­ром Теле­гра­ма. В биб­лио­те­ку мы вши­ли сек­рет­ный ключ, что­бы сер­вер Теле­гра­ма пони­мал, что наша про­грам­ма свя­за­на с опре­де­лён­ным ботом.

Когда кли­ент с Теле­гра­мом запра­ши­ва­ет у бота горо­скоп, запрос при­хо­дит на сер­вер, а сер­вер отправ­ля­ет его на наш ком­пью­тер. Запрос обра­ба­ты­ва­ет­ся про­грам­мой на Python, ответ идёт на сер­вер Теле­гра­ма, сер­вер отда­ёт ответ кли­ен­ту. Изи:

Обра­ти­те вни­ма­ние, что рабо­тать наш бот будет толь­ко тогда, когда вклю­чён ком­пью­тер и на нём запу­ще­на про­грам­ма на Python. Если ком­пью­тер выклю­чит­ся, про­па­дёт интер­нет или вы отклю­чи­те интер­пре­та­тор, то бот рабо­тать пере­ста­нет: запро­сы будут при­хо­дить, но никто на них не отве­тит. В одной из сле­ду­ю­щих частей мы сде­ла­ем так, что­бы это всё рабо­та­ло на уда­лён­ном сер­ве­ре и было все­гда доступно.

Что будем делать

Если запи­сать поша­го­во наш план, то он будет выгля­деть так:

  1. Реги­стри­ру­ем бота в Телеграме.
  2. Уста­нав­ли­ва­ем Python-библиотеку для рабо­ты с Телеграмом.
  3. Добав­ля­ем биб­лио­те­ку в про­грам­му с горо­ско­пом и учим про­грам­му реа­ги­ро­вать на сооб­ще­ния в чате.
  4. Пишем там же код, кото­рый пока­жет кноп­ки для выбо­ра зна­ков зодиака.
  5. Сде­ла­ем так, что­бы по кноп­кам появ­лял­ся горо­скоп для это­го знака.

Теперь по оче­ре­ди раз­бе­рём каж­дый пункт.

1. Регистрация нового бота

В Теле­гра­ме нахо­дим канал @BotFather — он отве­ча­ет за реги­стра­цию новых ботов:

Нажи­ма­ем Start и пишем коман­ду /newbot. Нас по оче­ре­ди спро­сят про назва­ние бота и его ник­нейм (мы при­ду­ма­ли толь­ко с тре­тьей попыт­ки, пото­му что осталь­ные были заняты):

2. Установка библиотеки

Есть два основ­ных спо­со­ба рабо­тать с теле­гра­мом в Python: через биб­лио­те­ку telebot и с помо­щью Webhook. Мы будем исполь­зо­вать биб­лио­те­ку — так про­ще и быстрее.

Что­бы её уста­но­вить, запус­ка­ем команд­ную стро­ку от име­ни адми­ни­стра­то­ра (если у вас Windows) и пишем коман­ду pip install pytelegrambotapi

Подключаем библиотеку и получаем сообщения

Что­бы про­грам­ма на Python уме­ла управ­лять Телеграм-ботами, нуж­но в самое нача­ло кода доба­вить строки:

Един­ствен­ное, о чём нуж­но не забыть — заме­нить сло­во «токен» на насто­я­щий токен, кото­рый дал нам @BotFather. Откры­ва­ем про­грам­му горо­ско­па и добавляем.

Читайте также:  Загрузка windows происходит через раз

Теперь научим бота реа­ги­ро­вать на сло­во «При­вет». Для это­го доба­вим после стро­чек с импор­том новый метод и сра­зу про­пи­шем в нём реак­цию на нуж­ное сло­во. Если не зна­е­те, что такое метод и зачем он нужен, — читай­те ста­тью про ООП.

И послед­нее, что нам оста­лось сде­лать до запус­ка, — доба­вить после мето­да такую строчку:

Она ска­жет про­грам­ме, что­бы она непре­рыв­но спра­ши­ва­ла у бота, не при­шли ли ему какие-то новые сооб­ще­ния. Запус­ка­ем про­грам­му и про­ве­ря­ем, как рабо­та­ет наш бот.

Добавляем кнопки

Что­бы поль­зо­ва­те­лям наше­го бота было удоб­но, пока­жем им сра­зу все зна­ки зоди­а­ка в виде кно­пок. А потом сде­ла­ем так, что когда на них нажи­ма­ешь — появ­ля­ет­ся горо­скоп для это­го зна­ка на сегодня.

Добав­ля­ем код с кноп­ка­ми в раз­дел, кото­рый реа­ги­ру­ет на «При­вет»:

Добавляем обработчик кнопок

Ско­рее все­го, вы заме­ти­ли, что в каж­дой кноп­ке у нас напи­са­но callback_data=’zodiac’ . Это зна­чит, что при нажа­тии на любую кноп­ку у нас будет вызы­вать­ся один и тот же метод, кото­рый отве­ча­ет за горо­скоп. Если вы хоти­те сде­лать чест­ный горо­скоп, при­дёт­ся в каж­дой кноп­ке про­пи­сать своё назва­ние обра­бот­чи­ка, а потом задать его пове­де­ние, тоже для каж­дой кнопки.

Давай­те сде­ла­ем обра­бот­чик кно­пок, кото­рый будет реа­ги­ро­вать на ‘zodiac’ и выда­вать слу­чай­ный текст, как в исход­ной про­грам­ме. Для это­го доба­вим новый метод в программу:

Убираем лишнее

Теперь у нас есть гото­вый бот, и нам оста­лось толь­ко убрать лиш­ний код, кото­рый рань­ше отве­чал за вывод зна­ков зоди­а­ка в кон­со­ли. После чист­ки полу­ча­ем гото­вую программу:

Как вид­но, боль­шую часть кода зани­ма­ет тупое пере­чис­ле­ние всех зна­ков зоди­а­ка. Мы мог­ли бы авто­ма­ти­зи­ро­вать это через цик­лы, но на ули­це такая хоро­шая пого­да, что мы это отложим.

Что дальше

Впе­ре­ди — без­гра­нич­ные возможности:

  • мож­но сде­лать инди­ви­ду­аль­ный горо­скоп для каж­до­го знака;
  • научить бота новым командам;
  • при­сы­лать све­жий горо­скоп каж­дое утро;
  • нала­дить непре­рыв­ную рабо­ту на веб-сервере.

Напи­ши­те в ком­мен­та­ри­ях, что бы вы хоте­ли от тако­го бота? Что дол­жен уметь иде­аль­ный бот с гороскопом?

Telegram-бот на Python: от первой строчки до запуска на Heroku

Telegram-бот на Python: от первой строчки до запуска на Heroku

Напишем простой диалоговый Telegram-бот на Python и запустим его на сервере Heroku.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Настройка

Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:

  • свой токен;
  • адрес Telegram API;
  • ссылку на документацию.

Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.

Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ.

Далее начните беседу с ботом. Введите в поисковой строке его имя и нажмите /start . Отправьте любое сообщение: оно станет первым обновлением, которое получит бот.

Установка Python

Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии уже установлены.

Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.

Установка pip

Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Читайте также:  Настраиваем web сервер windows

Установка pyTelegramBotAPI

Есть два способа установить эту библиотеку:

  1. С помощью pip:
  2. Из исходников (требуется git):

Hello, bot!

Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеку и подключить токен Telegram-бота на Python:

Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help :

Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:

Запускаем бота следующей строкой:

Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.

22–25 апреля, Онлайн, Беcплатно

Ну вот и всё, простенький бот в Телеграмме готов.

Деплой Телеграм-бота на Heroku

Последним шагом будет развёртывание бота на сервере. Зарегистрируйтесь на GitHub, если у вас ещё нет там аккаунта, и установите Git. Для этого на Linux выполните следующую команду:

На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku. Установите virtualenv:

Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :

Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env . Теперь нужно склонировать git-репозиторий. Введите команду:

Поместите скрипт в папку, полученную в результате выполнения команды git clone . Вернитесь в папку my_env и запустите virtualenv :

Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env). Перейдите в папку репозитория и ещё раз установите модуль requests:

Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:

Создайте Procfile . В этом файле следует разместить инструкции по работе со скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):

Добавьте файл __init__.py в вашу папку. Он может быть пустым, но должен там быть. Отправьте коммит с изменениями в репозиторий:

Теперь развернём Telegram-бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.

Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду. Если у вас Ubuntu, используйте следующие команды:

Теперь выполните следующие команды:

С этого момента приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:

Заключение

Поздравляем! Теперь вы знаете, как создать бота в Телеграм.

Кроме того, Telegram bot на Python можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.

Кстати, в этом мессенджере есть два типа клавиатур:

  1. Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
  2. Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:

Но и это полностью рабочий Телеграм-бот на Python: дополните словарём и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.

Футбольный телеграм бот на Python (1/4): Подготовка и настройка бота

В этой серии статей мы напишем телеграм бота на python. Он работает с внешним API, запрашивает результаты футбольных матчей и выводить их в сообщении.

Читайте также:  Linux remove network interface

Когда локальная версия будет готова, разместим бота на сервере. Вместо Heroku, я выбрал отдельную виртуальную машину, что бы бот не засыпал. Это ближе к реальности.

Вся разработка разбита на этапы:

  1. Локальная установка библиотек и Redis.
  2. Регистрация и получение токена.
  3. Настройка , подключение к базам данных.
  4. Написание основной функциональности бота.
  5. Регистрации, выбор и настройка внешнего апи футбольных матчей.
  6. Добавление сбора результатов матчей и интеграция в бота.
  7. Деплой, публикация на сервере:
    1. Регистрация дешевого или бесплатного VPS.
    2. Запуск Редис-клиента.
    3. Запуск и настройка бота на сервере.

Рабочая версия бота запущена в телеграме до конца февраля @FonlineBOT. Бот отключен.

Вводные данные

Материал рассчитан на уровень Начинающий+, нужно понимать как работают классы и функции, знать основы базы данных и async/await. Если знаний мало, крайне желательно писать код в Pycharm, бесплатная версия подходит.

Используйте указанные версии библиотек, что бы проект работал без изменений. При установке иных версий вы можете получать ошибки, связанные с совместимостью.

Локальная установка библиотек для бота и Redis

Для начала нужно создать проект «fonlinebot» с виртуальным окружение. В Pycharm это делается так:

Затем установить библиотеки в виртуальном окружении. Сразу понадобятся 4: для бота, работы с redis, ускорения и emoji в сообщениях.

Установка Redis локально

Redis — это резидентная база данных (такая, которая хранит записи прямо в оперативной памяти) в виде пар ключ-значение. Чтение и запись в память происходит намного быстрее, чем в случае с дисками, поэтому такой подход отлично подходит для хранения второстепенных данных.

Для установки Redis на Linux/Mac следуйте этим инструкциям: https://redis.io/download#from-source-code. Для запуска достаточно ввести src/redis-server .

Что бы установить на Windows скачайте и распакуйте архив отсюда. Для запуска откройте «redis-server.exe».

Теперь нужно убедиться, что все работает. Создайте файл «main.py» в корне проекта и выполните этот код:

Вывод будет True , в другом случае ошибка.

Регистрация бота и получение токена

Для регистрации напишем https://t.me/botfather команду /newbot . Далее он просит ввести имя и адрес бота. Если данные корректны, выдает токен. Учтите, что адрес должен быть уникальным, нельзя использовать «fonlinebot» снова.

На время разработки сохраним токен в файл. Создайте «config.py» в папке проекта для хранения настроек и запишите токен TOKEN = «ВАШ ТОКЕН»

Настройка бота

Теперь нужно связать бота с redis и базой данных, проверить работоспособность.

Создадим необходимые модули и файлы. В папке «fonlinebot» к созданным ранее «main.py» и «config.py» добавим: «database.py», «requirements.txt» и папку «app». В папку «app» добавьте: «bot.py», «dialogs.py», «service.py». Вот такая структура получится:

Разделив бот на модули, его удобнее поддерживать и дорабатывать.

  • «main.py» — для запуска бота.
  • «config.py» — хранит настройки, ключи доступов и другую статическую информацию.
  • «database.py» — для работы с базой данных и кешем(redis).
  • «requirements.txt» — хранит зависимости проекта, для запуска на сервере.
  • «app» — папка самого бота.
    • «bot.py» — для взаимодействия бота с юзерами, ответы на сообщения.
    • «dialogs.py» — все текстовые ответы бота.
    • «service.py» — бизнес логика, получение и обработка данных о матчах.

Пришло время перейти к программированию. Запишем в «requirements.txt» наши зависимости:

Так как большая часть программирует на Windows, uvloop мы не устанавливали локально. Установим его на сервере.

Оцените статью