Как сделать оплату в телеграмме боту python
Перейти к содержимому

Как сделать оплату в телеграмме боту python

Бот в Telegram на Питоне от А до Я

В социальных сетях и мессенджерах огромную популярность набрали так называемые боты. Они пишутся на разных языках программирования, внедряются в ПО и активно применяются на практике.

В данной статье будет рассказано о том, как написать простой бот на Python. А еще – рассмотрены особенности соответствующего ЯП, преимущества и недостатки упомянутого «виджета». Примеры будут приведены на основе Telegram. Здесь bot – это весьма распространенное явление.

Бот – это…

Это специализированный робот-помощник. Он помогает выполнять любые рутинные занятия. Боты способны реализовывать программные коды, которые будут отвечать за активацию разных команд со стороны пользователей.

Переписка с таким ПО осуществляется непосредственно через чат. Клиент дает боту команды, которые он обрабатывает и выполняет в режиме 24/7. Ключевая задача “робота» – дать ответ на вопрос клиента, опираясь на заданную программу. С помощью оных удается экономить не только время, но и остальные ресурсы.

Умения

Бот Телеграмм умеет многое. Сегодня к спектру его навыков относят следующие моменты:

  • проведение обучения;
  • развлечение публики;
  • предложение и запуск «мини-игр»;
  • работа с поисковыми системами в пределах Сети;
  • скачивание данных – фото, видео, аудио, документов;
  • выступать в качестве напоминалки;
  • участие в групповых чатах для решения заранее определенного спектра задач (пример – согласование оптимального времени встречи);
  • комментирование постов и статей;
  • использование функций управления умным домом и другими подобными устройствами.

Bots – это связующее звено между пользователями и интернетом, а также конкретной компанией. Пользоваться ими не очень трудно. Первое, что нужно сделать – это определиться со спектром задач, поручаемых боту. После – написать грамотный код и внедрить его в мессенджер. Это способен сделать даже начинающий разработчик.

Преимущества и недостатки

Как и любое другое ПО, bot – это «виджет», который имеет ряд сильный и слабых сторон. Их предстоит учитывать каждому, кто хочет подключить соответствующего «помощника» в своем чате/диалоге.

Сильные стороны

К преимуществам ботов Телеграм относят:

  • круглосуточную помощь – функционирование bots прекратят только в случае аварий на серверах, которые случаются крайне редко;
  • удобство и простоту использования – для большинства команд достаточно выбрать из предложенного списка подходящую операцию;
  • мгновенное получение ответа;
  • отсутствие требований к мощности задействованного устройства – это связано с тем, что для работы ботов используются возможности сторонних серверов;
  • высокий уровень безопасности;
  • отсутствие необходимости инициализации дополнительного ПО для запуска рассматриваемого вида «помощника».

Ботов применять удобно и интересно. Они упрощают жизнь и владельцу чата/компании, и непосредственным клиентам/участникам диалога.

Слабые стороны

Минусы у такого ПО тоже есть, но они не слишком весомые:

  • составлять bot должен программист – тот, кто далек от данной сферы деятельности, будет долго разбираться в принципах коддинга;
  • писать бота лучше на одном языке – через Питон;
  • нужно заранее хорошо продумать навигационное меню – тем, кто раньше не имел дела с подобным контентом, может потребоваться немало времени для этого.

Бот должен быть полезным, отвечать потребностям ЦА, а также целям владельца чата. Составить его удастся «с нуля» за 15-30 минут. Особенно если придерживаться определенного алгоритма действий.

Почему Питон

Python – универсальный язык программирования с возможностью использования принципов ООП. Он обладает простым и понятным синтаксисом, освоить который еще проще, зная английский.

Бот, написанный на Python, будет отличаться скоростью, безопасностью и стабильностью. Сам ЯП предусматривает следующие преимущества:

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

Это – идеальный вариант для веб-разработки, приложений для мессенджеров и мелких проектов. Крупные и масштабные игры на чистом Python составить не получится. Для этого предстоит подучить Java или C++.

Составление софта

Bot – это просто и удобно. Телеграм позволяет внедрять и искать такие «виджеты» без особого труда. Хорошего бота удастся составить менее чем за час. Главное – придерживаться определенного алгоритма действий.

Принцип

Перед непосредственной разработкой необходимо разобраться в том, как все будет работать. Bot для «Телеги» функционирует по определенным принципам. Пример будет рассмотрен на компьютере и Telegram-клиенте.

Стоит обратить внимание на следующее:

  1. На компьютере есть интерпретатор Python. Также на устройство необходимо поставить сервер Телеграмма и клиент.
  2. Внутри интерпретатора будет функционировать программа-бот. Она будет отвечать за весь софт: в оной прописана логика и шаблоны, а также возможные операции.
  3. Внутри приложения, написанного через Питон, имеется библиотека, отвечающая за связь с сервером Telegram. В нее нужно вшить секретный ключ. Это поможет указать серверу клиента, что программа связана с конкретным ботом.
  4. Когда клиент с «Телегой» осуществляет запрос гороскопа, bot осуществляет выгрузку на сервер, а сервер – выводит результат на компьютер.
  5. Запрос будет проходить обработку через утилиту на Python, дает ответ на сервер Телеграмма.
  6. Сервер передает необходимый результат непосредственному пользователю.

Bot внедряется без особого труда. Описанный принцип действий актуален не только для гороскопов. Он подойдет для bot любого вида в мессенджере.

Краткий план – пошагово

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

  1. Провести регистрацию нового бота в мессенджере.
  2. Установить Питон-библиотеку для работы с Telegram.
  3. Добавить библиотеку в программу с гороскопом.
  4. Научить bot реагировать на сообщения в пределах чата.
  5. Прописать там же кодификацию, которая отвечает за кнопки выбора знака зодиака.
  6. Сделать так, чтобы при клике по кнопке отображался гороскоп выбранного варианта.

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

Регистрация

Для того, чтобы зарегистрировать нового бота в Телеграмме, нужно:

  1. Открыть соответствующий мессенджер.
  2. При помощи командной строки найти @BotFather. Он несет ответ за регистрацию нового bot.
  3. Кликнуть по надписи Start, а также указать команду / newbot.
  4. Система задаст поочередно вопросы о названии бота и его ника. Имя должно быть уникальным. С первого раза установить его не всегда получается.

На этом первый этап подготовки завершен. Можно двигаться дальше.

Библиотека и ее инициализация

Следующий этап – это установка подходящей библиотеки Python. Работать с «Телегой» можно через telebot. Второй вариант – это инициализация Webhook. Первый вариант проще, поэтому заострим внимание на нем:

  1. Запустить командную строку от имени администратора на устройстве.
  2. Набрать команду pip install pytelegrambotapi.
  3. Подтвердить обработку операции.
  4. Чтобы приложение понимало бота, в самое начало кода требуется добавить: import telebot;
  5. Bot = telebot.TeleBot(«токен»);.
  6. Вместо слова «токен» вставить настоящий токен, выданный @BotFather.
  7. Открыть программу гороскопа и добавить ее.

Перед тем, как импортировать приложение гороскопа, необходимо его написать. Сделать его требуется на Питоне.

Гороскоп программа

Вот так будет выглядеть код приложения, который отвечает за отображение информации о гороскопах. Создается контент в программной среде Питона:

Сразу после формирования ПО можно приступить к следующему этапу настройки.

Реакции

Bot должен реагировать на слово «Привет». После него будет выдана реакция на соответствующую фразу. Чтобы все работало нормально, необходимо добавить после строчек импорта новый метод. Он отвечает за соответствующую операцию:

  • Добавить после метода строку типа: bot.polling(none_stop=True, interval=0) .
  • После ее добавления у бота будет постоянно проверяться наличие новых сообщений.
  • Прописать код, который предполагает работу с кнопками. Сначала осуществляется вывод всех знаков зодиака. При клике по конкретной – отображается гороскоп оного.
  • Добавить обработчик кнопок. Он будет реагировать на слово zodiac. При написании оного в программе отобразится случайный текст:
  • Можно убрать кодификацию, которая ранее отвечала за вывод знаков зодиака в консоли. После очистки получится приложение:

На этом рассматриваемый «помощник» окончен. Теперь все должно нормально работать. Остается запустить его в Телеграме и получить тот или иной результат.

Команды управления

«Помощник» имеет разные функции и команды. Они пишутся через знак «слеш» («/») прямо в сообщении чата. Вот основные операции:

  • /start – начать работу помощника;
  • /help – вывод помощи на экран;
  • /settings – открыть настройки.

Некоторые подобные «дополнения» способны понимать команды на русском языке. Пример – запрос у робота Антона, который «подрабатывает» в Гидрометцентре. Если при общении с ним прописать «Погода Калининград», будет выведен соответствующий результат.

Почему «молчит»

Иногда бывает так, что «помощник» не отвечает. Такое наблюдается при вводе любой команды/выбора подходящего варианта из меню. Данное явление может происходить по нескольким причинам:

  1. Проблемы и неполадки на сервере. Пример – сбой или полный отказ оного от функционирования.
  2. Ошибки при написании кодификации. Распространенное явление среди новичков.
  3. Ввод команды, которую Телеграм бот на Python не понимает. В этом случае можно воспользоваться Google для поиска подходящих операций и их форматов.

Иногда помогает полное отключение и перезапуск «помощника».

Как быстро освоить Python

Питон и его возможности можно выучить в ВУЗе, техникуме или самостоятельно поисках материалы в Сети. Вот видео по боту в «Телеге». Самообразование – один из лучших, но долгих методов обучения.

А чтобы надписи типа examples, def get, main() и другие не доставляли хлопот, стоит пройти дистанционные курсы. Их преимущества:

  1. Доступность. Обучение можно проводить в любом месте и в любое время, имя под рукой интернет.
  2. Разнообразие направлений. Есть предложения для новичков и опытных программеров.
  3. Срок обучения – до 12 месяцев. За это время пользователь сможет освоить даже несколько направлений.
  4. Хорошо продуманная программа, подпитанная практикой и кураторством опытных разработчиков.

По завершении процесса пользователь получит сертификат, подтверждающий навыки и познания в выбранной области.

Как сделать оплату в телеграмме боту python

В настоящее время существует достаточно много разных популярных мессенджеров. Достоинством мессенджера Telegram является наличие богатого API, позволяющего взаимодействовать с мессенжером не людям, а программам, то есть писать боты.

Можете изучить полную документацию на Telegram Bot API, но непосредственно этим API мы пользоваться не будем. Но нужно понять, как это устроено внутри.

На самом простом уровне это API, использующее HTTP с JSON-ответом. Вы можете промоделировать работу бота, просто используя GET-запросы в браузере, то есть загружая страницы с определённым адресом используя браузер.

Самый простой пример тестовой страницы, которую можно загрузить при помощи API:

  1. Название бота (произвольное текстовое имя),
  2. Имя пользователя для бота (уникальное, из латинских букв, цифр, символа подчёркивания, должно заканчиваться на bot ).

В ответ вы получите от @BotFather токен.

Дальнейшее описание Telegram Bot API не нужно для выполнения заданий (т.к. мы будем использовать упрощающую разработку ботов библиотеку), но полезно для понимания.

Пример простого запроса getMe для проверки токена, который можно просто ввести в адресную строку браузера, заменив <token> на токен вашего бота:

В ответ вы должны получить небольшой JSON с информацией о вашем боте.

Если написать боту сообщение (например, с телефона или используя web.telegram.org), то это сообщение будет храниться на серверах Telegram. Чтобы получить сообщения, адресованные боту, необходимо выполнить запрос getUpdates:

Вы получите JSON, содержащий все сообщения, написанные боту, за последние 24 часа. Повторно вызвав этот запрос, мы снова получим все сообщения с сервера. Чтобы не получать сообщения повторно, можно передать запросу параметр offset , например

где <update_id> — минимальное значение параметра update_id , начиная с которого вы хотите получить сообщения. Оно должно быть на 1 больше значения параметра update_id последнего сообщения, которое вы получили. Все сообщения с меньшим значением update_id вам больше не будут отдаваться.

Для того, чтобы отправить сообщение, вам необходимо сделать запрос sendMessage с двумя обязательными параметрами в адресной строке: chat_id —идентификатор чата для отправки сообщения и text — сообщение, отправляемое пользователю. Например:

Таким образом, простейшая схема реализации бота следующая. Бот — это постоянно запущенное приложение, которое регулярно опрашивает сервер, посылая запросы getUpdates и “засыпая” на некоторое время после этого. Если ответ сервера содержит какие-то новые сообщения, то их нужно обработать и отправить запросы sendMessage для отправки ответных сообщений.

Библиотека pytelegrambotapi (telebot)

Как мы видим, реализация бота содержит много стандартной работы, типа запуск цикла обработки сообщений с учётом значения offset , разбор полученного JSON, ответ на все сообщения, отправка запросов, для ответа на сообщения. Для этого есть ряд библиотек, содержащих реализацию этой рутины, одна из наиболее популярных из таких библиотек — telebot.

Её необходимо установить при помощи pip, в pip она называется pytelegrambotapi. Соответствующая консольная команда может выглядеть, например, так:

Сразу же установите библиотеку requests, она пригодится для выполнения ряда заданий.

Простой обработчик сообщений

Пример простого бота, который на любое сообщение всегда отвечает одним словом “Привет!”:

В этом примере создаётся объект с именем bot класса telebot.TeleBot , которому в конструктор передаётся значение токена в качестве параметра. Затем объявляется функция get_text_message , принимающая в качестве параметра объект message , в котором будет хранится информация о полученном сообщении.

Эта функция регистрируется в качестве обработчика для сообщений типа “text”, что делается при помощи так называемых “декораторов” — это строчка, начинающаяся со значка “@” перед нашей функцией.

Декоратор: это специальная функция (или метод), которая получает другую функцию в качестве параметра, и создаёт новую функцию, используя переданную ей функцию. Строка, начинающаяся с “@” — это на самом деле вызов метода bot.message_handler , который зарегистрирует функцию get_text_messages , как обработчик для сообщений указанного типа. Подробней про декораторы можно прочитать, например, здесь.

Теперь при поступлении сообщений объект bot будет вызывать функцию get_text_messages для каждого сообщения отдельно, тем самым принимая на себя работу по получению и парсингу полученных сообщений. Вам нужно всего лишь определить, что делает бот для ответа на полученное сообщение. Вы можете отправлять сообщения, вызывая метод send_message с параметрами: идентификатор чата и текст отправляемого сообщения.

Наконец, запускается метод polling , который представляет собой бесконечный ( none_stop=True ) цикл запроса обновлений с сервера, который и будет вызывать функцию get_text_messages при получении новых сообщений.

Немного более подробно ознакомиться с написанием простейших ботов можно, например, в следующих статьях:

Как сдавать задачи в этом листке

В этих заданиях необходимо разработать бота для Telegram с использованием модуля telebot.

  1. Зарегистрировать своего бота в @BotFather, получить ключ для доступа к API.
  2. Написать программу, которая будет реализовывать ваш бот.
  3. В начале программы напишите в комментарии имя пользователя для вашего бота (которое было указано при получении ключа), например # @my_super_bot
  4. Отладьте вашу программу, убедитесь, что она работает.
  5. Запустите вашего бота локально и сдайте программу в тестирующую систему
  6. Не останавливайте вашего бота до окончания проверки. На каждый запрос ваш бот должен успевать отвечать за 2 секунды.

A: Бот, отвечающий односложно

Напишите бота, который на все предложения отвечает односложно. Например, пишет в ответ “Привет!”

Отладочные сообщения

Можно сделать так, чтобы telebot выводил кучу отладочных сообщений: всё сообщения, которые приходят и уходят. Для этого нужно поменять уровень логирования, вот так:

B: Приветствие по имени

Напишите бота, который в ответ на сообщение приветствует пользователя по имени. Например, “Привет, Андрей!”. Для этого изучите объект message , который передаётся в обработчик сообщений. Этот объект содержит в себе много информации. Чтобы разобраться, что есть в этом объекте, можно воспользоваться пошаговым отладчиком с просмотром переменных или отладочным выводом.

C: Бот-калькулятор

Напишите бота, который вычисляет значение выражения, которое ему прислали. Например, если написать боту 2 + 2 , он должен ответить 4 .

Для этого нужно использовать функцию eval , вычиcляющую переданное ей выражение в виде строки. Например, eval(‘2 + 2’) вернёт число 4.

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

Подробней про обработку исключений в Python можно прочитать, например, здесь.

На самом деле ни в коем случае нельзя использовать функцию eval для вычисления выражений, полученных ненадёжным способом. Например, злоумышленник может отправить вашему боту зловредный код и сделать что-то нехорошее. Например, можете посмотреть эту статью или даже вот эту.

Модуль requests для запросов из интернета

Чтобы получить данные с удалённого сайта есть несколько способов, самый простой — библиотека requests. Смотрите документацию на библиотеку, простой пример использования, а также можно сразу же распарсить полученный JSON.

D: Бот-цитатник

Пора научить бота делать что-то интересное. У нас есть интернет с огромным объёмом информации. Ну и помимо сложного способа (самим добывать информацию, парсить её и т.д.), есть некоторые ресурсы, обладающие удобным API. Зачастую это API построено точно так же: отправляете GET-запрос через http, в ответ получаете JSON с нужной информацией.

Например, есть сайт favqs.com, выдающий цитаты. У этого сайта есть API, описанное на странице https://favqs.com/api/. Для большинства функций этого API требуется авторизация при помощи токена, но мы воспользуемся простым запросом Quote of the Day, не требующим токена. Для этого нужно просто сделать запрос по адресу https://favqs.com/api/qotd , и вы получите JSON с цитатой.

Задание. Напишите бота, который на любое сообщение отвечает случайно цитатой. Не забудьте также указать автора цитаты!

E: Конвертер валют

У Центрального банка РФ есть API, выдающее официальные курсы валют: https://www.cbr-xml-daily.ru/daily_json.js

Напишите бота, который мог бы переводить любую сумму любой поддерживаемой валюты в любую другую поддерживаемую валюту. Не забудьте про российский рубль, его курс в этом документе не указан!

Бот должен уметь распознавать запросы в каком-либо формате, например, "100 USD в EUR". Если бот не смог распознать запрос, то должно выводиться сообщение об ошибке, которое бывает двух видов: сообщение о том, как использовать бота и сообщение о том, что указанная валюта ботом не поддерживается (в этом случае бот должен вывести список всех поддерживаемых валют).

F: Цитаты на заданную тему

Необходимо написать бота, который выдаёт случайную цитату на заданную тему. Например, если боту отправить какое-либо довольное распространённое слово, например, “school”, “weather”, “love” и т.д., то API вернёт список цитат на эту тему.

Техническое задание: напишите бота, который по заданному слову выдаёт случайную цитату на данную тему. Необходимо вывести одну (случайную) цитату из всех цитат в базе, у которых проставлен тэг, соответствующий этому слову. Если такие цитаты не найдены, бот должен сообщить об этом. Для выбора случайной цитаты лучше всего подойдёт функция random.choice

Для этого у API есть метод quotes (List Quotes), который выдаёт список всех цитат. Этому методу можно передать параметр filter , со значением — слово, по которому осуществляется поиск, и параметр type=tag , чтобы осуществлять поиск по тегам, а не по всем текстам цитат.

Обратите внимание, что если цитат, удовлетворяющих условию, много, то API выдаёт только 25 из них. Чтобы получить больше цитат (они выдаются страницами по 25 штук), нужно задать параметр page , равный номеру страницы.

Всё, что здесь описано, передаётся при помощи параметров GET запроса. Примеры запросов можете посмотреть в документации на API.

Но использовать функцию quotes вы можете только при наличии токена. Для этого нужно зарегистрироваться на сайте и получить бесплатно токен (они называются API keys). Токен — это строка из 32 hex-символов. Токен нужно передавать (см. раздел Authorization в API) при помощи дополнительного параметра “Authorization” в параметрах GET-запроса. Это можно сделать при помощи той же библиотеки requests , посмотрите на пример Custom Headers в документации.

Наконец, вы должны реализовать кэширование запросов. То есть если бот один раз получил список всех цитат на какую-то тему, то можно ожидать, что пользователь захочет получить ещё одну цитату на эту же тему. Чтобы не получать снова цитаты через API, необходимо сохранять все цитаты по этой теме, а при повторном запросе — выдавать одну цитату из сохранённых.

  1. Получить API key.
  2. Научиться делать запросы с использованием API key (любые, лишь бы работала авторизация).
  3. Научиться делать запросы с поиском по тэгу.
  4. Реализовать загрузку всех цитат с учётом пагинации. До сих пор вам на самом деле не нужен никакой бот, удобней написать простое приложение, которое будет делать необходимые запросы и выдавать результат на стандартный вывод.
  5. Теперь облачаем это в форму бота, кэшируя полученные цитаты в словаре.

Реализация клавиатуры

Команды, набираемые пользователем, сложно декодировать, да и пользователь может ошибиться в их написании. Поэтому в Телеграме у ботов есть возможность использования клавиатуры для выбора стандартных действий пользователя. Есть два типа клавиатуры: ReplyKeyboardMarkup (более древняя) и InlineKeyboardMarkup (более современная и богатая возможностями), на второй и остановимся.

В клавиатуру можно добавлять кнопки, у кнопки есть два параметра: text — это надпись, отображаемая на кнопке, и callback_data — это информация, которая будет передана в обработчик нажатия на кнопку. Сначала создадим все кнопки, потом добавим их в объект-клавиатуру. Метод row у клавиатуры добавляет к клавиатуре ряд из нескольких кнопок, если вызвать метод row ещё раз, то будет добавлен следущий ряд кнопок, и т.д. После этого при отправке сообщения укажем параметр reply_markup , указав созданную клавиатуру.

Теперь нам необходимо сделать обработчики кнопок. Это отдельные функции, которые необходимо зарегистрировать при помощи декоратора callback_query_handler . Эта функция будет получать объект callback_obj , которых хранит информацию о нажатии кнопки. В частности, помимо обычных данных о пользователе, чате и т.д. у этого объекта есть поле data , в котором хранится та самая информация, которая была привязана к кнопке. Пример такого обработчика:

Обратите внимание на вызов метода answer_callback_query . Он сообщает серверу телеграма, что обработка данного callback-запроса завершена. Если этот метод не вызвать, то на кнопке будут изображены часики, а сама кнопка будет недоступна для повторного нажатия.

Есть и другой способ определить, какая кнопка была нажата. Обратите внимание на параметр декоратора: func=lambda call: True . Это лямбда-функция, которая в данном случае всегда возвращает True . Это означает, что данный обработчик будет применяться ко всем callback-запросам. Но если эта функция будет возвращать не всегда True , то так можно установить обработчик для отдельных callback-запросов, а именно, будет вызван тот обработчик, для которого эта функция вернёт True .

Используем это для того, чтобы сделать разные обработчики для разных кнопок.

G: Расписание уроков

Напишите бота, который выдаёт расписание уроков на сегодняшний день (после запуска, ответ на любое сообщение), а также на любой другой день недели.

Выбор дня недели реализуйте при помощи клавиатуры.

Вот начало вашего расписание

H: Текущая погода

Зачастую хорошие данные бесплатно не раздают. Но на сайте openweathermap.org есть бесплатное API, предоставляющее погодные данные. Вернее, там есть бесплатные запросы “Current Weather Data”, “One Call API”, “5 Day / 3 Hour Forecast”.

Зарегистрируйтесь на сайте и получите ключ для доступа к API (в меню найдите “My API keys”). Сделайте это заранее, т.к. активация ключа произойдёт через некоторое время. Если при доступе к API вы получаете сообщение о том, что ключ некорректный (а он точно корректный), то это означает, что ключ ещё не был активирован и нужно ещё подождать.

Напишите бота, который выдаёт текущую погоду для одного из городов. Приложение должно предлагать выбор города при помощи кнопки (должно быть минимум 4 города, минимум из трёх разных часовых поясов, обязательно включая Москву). Также должна быть возможность ввести название города вручную (при этом не гарантируется, что погоду для этого города удастся определить).

  • Состояние атмосферы (ясно, облачно, осадки и.д.). Эта информация выдаётся на английском языке, поэтому чтобы не заморачиваться с переводом предлагается отображать её в виде иконки (она тоже выдаётся в API). Для того, чтобы отправить изображение, в Telegram API есть метод sendPhoto, а в telebot для этого есть метод send_photo .
  • Температуру (в градусах Цельсия).
  • Давление (в мм ртутного столба).
  • Влажность (в процентах).
  • Скорость ветра (в м/c).
  • Направление ветра (С, Ю, В, З, СЗ, СВ, ЮЗ, ЮВ).
  • Время восхода солнца (часы и минуты).
  • Время захода солнца (часы и минуты).

I: Конвертер валют-2

Бота, конвертирующего валюты, реализуйте при помощи кнопок. Например, должны быть кнопки “Введите сумму”, “Выберите исходную валюту” “, “Выберите валюту, в которую нужно перевести”. Для выбора валюты отображается меню из кнопок, соответствующих валютам. При вводе суммы нужно обрабатывать любые неправильные введённые данные.

J: Бот, который считает

Напишите бота с двумя кнопками: «+1» и «Сброс». По нажатию на первую кнопку выводится последнее выведенное число, увеличенное на 1, а по нажатию на «Сброс» выводится 0.

Для каждого пользователя ряд чисел должен быть собственным.

K: Камень, ножницы, бумага

Напишите бота, который реализует игру «Камень, ножницы, бумага» для двух игроков (двух пользователей). Пользователю отображаются три кнопки. Бот получает результат нажатия кнопок. Когда два пользователя нажали кнопки, бот сообщает каждому из них имя его противника, что выбрал противник и результат игры (выиграл, проиграл, ничья). То есть при получении ответа от одного пользователя бот запоминает его ход, после получения ответа от второго пользователя, бот сообщает обоим пользователям результат игры и всё начинается заново.

Если второй ответ пришёл от того же игрока, то это считается изменением его предыдущего ответа.

L: Игра ним

В игре ним на столе лежит несколько кучек камней (например, содержащих 3, 4 и 5 камней). Двое игроков по очереди берут по одному или несколько камней из одной кучки. Выигрывает тот, кто взял последний камень.

Стратегия при игре в ним: рассмотрим побитовый XOR количества камней в кучках (например, 3 ^ 4 ^ 5 = 2 ). Если эта величина ненулевая, то позиция выигрышная для ходящего игрока. Если же эта величина нулевая, то позиция проигрышная. Выигрышный ход должен быть таким, чтобы XOR размеров кучек стал нулевым.

Реализуйте бота, который играет в ним с человеком (естественно, у каждого игрока своя сессия), при этом выигрывая (если есть такая возможность).

Библиотека sympy для символьных вычислений

Есть отличная библиотека sympy для символьных вычислений. Вот так в ней можно считать производные:

Если добавить кода, то можно сделать ввод и вывод более удобными:

M: Бот, считающий производную

Сделайте бота, который будет считать производную.

N: Бот, считающий интеграл

По аналогии с производной можно и интегралы считать. Подробности письмом.

Python → Делаем простого телеграм бота на Python

В этой статье я покажу как сделать простого бота для Телеграм, который умеет конвертировать валюту.

У вас должен быть установлен Python 3. Если нет, то вы можете прочитать здесь как это сделать на Windows.

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

Как работает Телеграм бот

Эта диаграмма показывает как все элементы друг с другом взаимодействуют. Люди находят вашего бота в телеграме и пишет ему. Все их сообщения сначала попадают на сервер Телеграма. Если ваша программа-бот запущен, то он будет получать эти сообщения.

Очень важно!

Оглавление

1. Регистрация бота
2. Первые слова бота
3. Конвертацию валют
1. Регистрация бота

Бота нужно сначала создать и зарегисрировать в Телеграме. Для этого существует отец все ботов(BotFather), который создает их.

Откройте Телеграм и найдите через Поиск бота BotFather.

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

Вы найдете много чего с таким названием. Вам нужен тот, что с галочкой синей. Выберите этого бота и запустите нажав на кнопку "Start". BotFather вам покажет все свои команды, используя которые, вы будете потом управлять своими ботами.

Для создания нового бота, вам нужно нажать на команду /newbot или вы можете сразу написать ему так. Вас попросят дать название своему боту.

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

Здесь вы можете ввести любое имя. Имя можно потом изменить. Я назову своего бота "Валютный бот". После ввода имени нужно придумать уникальный ник для бота(username). Этот ник должен быть на английском и всегда заканчиваться на слово Bot. И еще там не должно быть пробелов. Имейте ввиду, что все популярные названия уже заняты кем-то другим. Поэтому я назову Currency005Bot.

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

Когда вы придумаете username для бота. Вам покажут такое сообщение, о том что бот успешно зарегистрирован:

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

В самом начале есть ссылка на вашего бота, начинающаяся на t.me/. Нажав на нее вы перейдете к вашему боту. Также эту ссылку можно отправлять всем.

А красным цветом внизу написан токен вашего бота. Этот токен как пароль от вашего бота. Его не нужно никому сообщать. Мы будем использовать его при написании программы для бота.

У вас официально есть бот! Конечно, он пока ничего не умеет. Только родился.

2. Первое слово бота

Чтобы продолжить дальше, вам нужно научиться работать в Командной строке. Вы можете прочитать статью Работа в терминале в Windows, Linux и MacOS (cli, shell, bash, cmd).

Перед тем как начать учить нашего бота говорить, попробуем что нибудь сделать на языке Python.

Откройте ваш любимый редактор кода (Sublime Text, PyCharm, Notepad++, Idle и т.п.). Создайте новый пустой файл. Сохраните его с названием bot.py в любую папку(желательно не слишком глубоко, а для начала можно сразу в корне диска С: ).

В этом файле будет написана наша программа для бота. Давайте для начала напишем простую программу, которая печатает текст "Hello World!". Для этого напишите в файле:

Теперь попробуем запустить его. Откройте Командную строку(Windows) или Terminal(Linux, Mac). Использую команду cd перейдите в папку, где вы сохранили файл bot.py.

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

А эта команда переходит в указанную папку(например Projects):

Если вы перешли в папку с файлом bot.py, теперь мы можем его запустить. Напишите в командной строке:

И нажмите Enter. Ваша программа запустится и напечатает "Hello, World!". Мы умеем запускать программы на Python ��.

Команда print() в языке Python печатает текст на экране. А в скобках нужно указать что именно нужно напечатать. Наш текст для печати мы указали в кавычках. В Python в кавычках записывает любые текстовые данные. И текстовые данные называются строкой или string.

Кроме текстовых данных есть еще числовые данные. И команда print() также умеет их тоже печатать:

Как вы заметили для чисел кавычки не нужны.

Переменные

Переменные в программировании это временные хранилища данных, т.е. они могут сохранять в себе какое-либо значение. И записываются они как в математике:

Мы сначала сохранили в переменной х строку "Hello world" а потом распечатали x. Если вы сохраните такой файл и запустите его снова в командной строке командой:

То вы увидите что программа напечатала на экран не "х", а "Hello World". Потому x — это переменная, которая хранит в себе значение "Hello World".

Также в переменной можно сохранить любые другие значения. И они могут называться как угодно, не только x или y.

Скачиваем библиотеку для создания бота

Чтобы написать бота в Python, нам нужно скачать библиотеку(или пакет) python-telegram-bot для Python. Библиотеки — это дополнительные ресурсы для Python, которые улучшают его способности. Если Python что-то не умеет, вы можете скачать ему библиотеку и он научится как это делать ��.

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

Откройте командную строку и напишите:

После этого вы увидите много непонятного текста в командной строке и в конце где-то будет написано

Значит успешно установлено. Теперь мы можем использовать его.

Пишем программу для бота

Откройте ваш код и удалите все что вы там написали. И для начала создайте переменную token и присвойте этой переменной токен вашего бота. Помните? Когда мы создавали бота, BotFather отправил нам красный токен . У вас будет примерно так:

Токен это строка, поэтому она в кавычках. Здесь мой токен, а вы используйте свой.

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

Мы подключили два класса: Updater и MessageHandler. В языке Python имеет значение регистр букв(заглавные, строчные буквы). Обязательно нужно писать именно так.

Updater — это объект, который умеет связываться с сервером телеграма и получать от него обновления, т.е. новые сообщения от пользователей. Он после запуска всегда слушает сервер Телеграма.

а про CommandHandler расскажу чуть ниже.

Давайте создадим новый объект Updater и запустим его. Создается он вот так:

Мы создали новый Updater и сохранили его в переменную с именем updater. (Переменные умеют еще и объекты разные хранить.) При создании мы указали токен нашего бота, чтобы он используя этот токен мог получать сообщения именно для нашего бота. А про use_context=True я расскажу в другой раз. Пока просто напишите так.

Теперь запускаем Updater:

Первая строчка запускает, а вторая строчка ждет пока вы нажмете Ctrl+C, а когда нажмете завершает работу бота.

Сейчас ваш код должен выглядеть примерно таким:

я незаметно добавил строчку print("Бот запущен. Нажмите Ctrl+C для завершения"). Вы тоже добавьте. Пора попробовать запустить бота. Сохраните файл. И запустите его:

Хотя бот запущен, он все равно ничего не имеет. Какой бесполезный бот! Нажмите Ctrl+C чтобы завершить его работу. Обычно завершение занимает 3-5 секунд.

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

У ботов есть команды. Они начинаются со знака / (слэш). Например: /newbot, /start. У каждого бота они свои. Но у всех есть команда /start, к оторая запускается когда кто-то начинает чат с ботом.

Мы сейчас сделаем так, чтобы наш бот представлялся, когда кто-то пишет ему команду /start . Для этого нам нужно создать обработчик для команды start. Такой обработчик создается с помощью класса CommandHandler.

У нас в программе есть объект Updater. У него есть помощник, который называется dispatcher(диспетчер или распределитель). Этот dispatcher распределяет сообщения, которые приходят от пользователей по разным обработчикам. Поэтому он должен знать о всех обработчиках.

Мы скажем этому диспетчеру, что у нас есть новый обработчик для команды start:

Другие команды могут быть добавлены так же. В кавычках нужно поменять название команды.

А вот второй параметр on_start — что это такое? Это функция-обработчик. Функция в программирование — это мини программа внутри программы, которую можно переиспользовать. Подробнее расскажу как-нибудь в другой раз.

Для обработки команды будет запущена функция on_start. Теперь создадим эту функцию:

Этот код должен быть чуть выше предыдущего кода. И обратите внимание, что в конце есть двоеточие и внутренности функции пишутся через один TAB(клавиша слева для добавления отступа). А pass значит что ничего не нужно делать.

У этой функции есть два параметра:

update — это обновление, которое пришло с сервера.(в нем есть сообщение, информация о чате, о пользователе)
context — в этом объекте хранятся все важные данные бота.

Внутри этой функции мы должны ответить в чат текстом "Привет, я Валютный бот". При отправке мы обязательно должны указать идентификатор чата(chat_id). А информацию о чате мы получим его из объекта update и сохраним в переменную chat.

После получение информации о чате, мы отправляем сообщение использую функцию бота send_message указывая id чата и текст. В итоге у вас должен получиться такой код:

Сохраните код, перейдите в командную строку и перезапустите вашего бота.

Откройте бота в Телеграме и напишит ему /start и вы услышите первые слова вашего бота.

3. Конвертация валюты

Наш бот умеет здороваться. Но, если вы ему напишете что нибудь другое, он ничего не ответит. Так как умеет отвечать только на команду start.

Давайте сделаем так, чтобы он на любое другие сообщение отвечал каким-нибудь предложением.

Для этого нам нужен еще один обработчик. В прошлый раз мы использовали CommandHandler, в этот раз мы будем использовать MessageHandler. Этот обработчик умеет отвечать на любые сообщения. Подключается он также:

Я также добавил Filters — с помощью него можно указывать какие сообщения должен обрабатывать обработчик.

Теперь сообщаем диспетчеру о новом обработчике:

У этого обработчика указывается фильтр. Мы указали что фильтровать не нужно, что нужно отвечать на все сообщения(all). Для обработки сообщения будет использована функция on_message.

Чуть выше мы объявим эту функцию:

Как вы, наверное, заметили эта функция очень похожа на функцию on_start. Единственное, что эта пишет пользователю "Напишите число для перевода".

Давайте попробуем сохранить файл и перезапустить бота. Теперь бот на любое сообщение отвечает одинаково:

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

Пора учить бота переводить валюту. Для этого мы должны получить текст, который написал пользователь, перевести его в число, умножить на курс и написать ответ.

Помните, я в начале говорил что в Python есть текстовый тип данных и числовой. С текстом нельзя проводить математические операции, но с числами можно. Поэтому мы попробуем перевести текст, который написал пользователь в число. Если у нас получится, то мы сделаем конвертацию валюты, а если нет, то снова скажем что нужно ввести число.

В Python есть выражение try, которое позволяет проверить какой-либо участок кода на ошибку. Если ошибок нет, то код выполнится. Если есть ошибка, то этот участок кода прекратит свое выполнение и перейдет в другой участок кода, который написан после слова except. Вот так:

В третьей строчке мы получили текст из сообщения пользователя и сохранили в переменной text. После try и except внутренние участки кода пишутся с дополнительным отступом слева в 1 TAB.

Внутри блока try мы пробуем перевести текст в числовой тип (float) и сохранить в переменную number. Мы получили число. Теперь попробуем сконвертировать его. В нашем примере мы будем конвертировать с долларов на сомы. Возьмем текущий курс 80.34. Этот курс мы сохраним в переменную rate и затем вычислим сомы:

Функция float() переводит строку в число, а функция str переводит число в строку. А если две строки сплюсовать, то они просто объединятся. Поэтому в этом случае пользователь увидит что нибудь такое: "23 сом". Так давайте узнаем это, сохранив код и перезапустив бота.

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

Смотрите, если пользователь пишет число, то выполняется блок try, а если пользователь вводит текст, то программа не может перевести текст в число и происходит ошибка, поэтому выполняется блок except и пользователь получает сообщение "Напишите число для перевода".

Мне кажется стоит немного изменить вывод результата. Будем использовать форматирование текста. Создадим переменную message, в котором будет ответ бота:

Здесь мы использовали форматирование текст с помощью команды %. Эта команда заменит участки с процентом в тексте на значения последующих переменных number и soms. А f означает что туда нужно подставить число (float). А .2 означает что в числе нужно оставить два знака после запятого.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *