В этом посте я объясню, как создать бота Telegram на Python. Todoist — отличный инструмент для управления списками дел. Хотя этот пост может быть просто общим руководством по созданию бота Telegram, я расскажу о подключении к Todoist API и внедрении его возможностей в Telegram, чтобы вы могли узнать больше о работе с реальным API и взаимодействии с пользователями в ботах Telegram.
Предполагается, что вы знакомы с основами Python. Вы узнаете:
- Создание бота Telegram с отцом бота Telegram
- Работа с API в Python
- Написание скрипта бота Telegram на Python
- Взаимодействие с пользователями в боте Telegram (отображение кнопок, ответ на сообщение и т. Д.)
Создание бота Telegram
Прежде всего, нам нужно получить дескриптор Telegram для нашего бота. Кроме того, нам нужен токен доступа для подключения и взаимодействия с Telegram.
Получите имя пользователя бота (дескриптор Telegram) и токен доступа
Телеграм бот на Python #2 — Клавиатуры, Reply Keyboard, Inline Keyboard, Callbacks (aiogram)
После этого вы получите сообщение с данными вашего бота, включая токен доступа вашего бота для HTTP API. Мы будем использовать это в следующих шагах.
Взаимодействие с API в Python
Чтобы создать полезного бота для Telegram, вам необходимо хорошо разбираться в работе с API.
Я прочитал много руководств по созданию ботов Telegram, но я хотел написать бота, который работает с реальным API, а не бота, чтобы показывать картинки с кошками (что, кстати, тоже очень круто).
Todoist — отличный инструмент для управления делами. Несмотря на то, что у него отличное мобильное приложение, оно может помочь вам или вашей команде выполнять ваши задачи в Telegram.
Также, используя Todoist API, вы узнаете, как взаимодействовать с реальными API.
APIHandler Класс
У Todoist есть официальная библиотека Python API. С его помощью вы можете легко взаимодействовать с Todoist API. Сначала мы собираемся изучить эту официальную библиотеку. Затем с помощью пакета запросов Python мы взаимодействуем с Todoist REST API. Поскольку многие сторонние API не поддерживают такие библиотеки Python, важно научиться использовать пакет запросов Python для выполнения HTTP-запросов для RESTful API.
Получение токена доступа к Todoist
Прежде чем мы начнем, вам нужно получить токен доступа для Todoist API. Просто зайдите в Консоль приложения Todoist и создайте новое приложение. После создания приложения вы увидите client id и client secret , которые необходимо использовать в приложении производственного уровня для аутентификации пользователей.
На данный момент нам нужно только получить токен доступа для наших тестов. Прокрутите вниз, и вы увидите свой токен доступа. Теперь давайте попробуем это в действии.
Creating a Telegram Bot in Python 3.9 Tutorial (Fast & Easy)
Официальная библиотека Python Todoist
Теперь установите пакет TodoistAPI с помощью программы Python, выполнив эту команду: pip install todoist-python
Используя библиотеку API Todoist, получить проекты очень просто.
Не забудьте указать свой токен доступа в api_token переменную.
Взаимодействие с RESTful API с использованием запросов Python
Для вызова API вам необходимо использовать пакет запросов Python. Установите его с помощью pip: pip install requests
Пакет запросов имеет две основные функции, которые мы можем использовать для выполнения get или post запросов.
Создаем бота для Telegram
В рамках данной статьи я расскажу о том, как быстро и легко написать программу-бота для популярного мессенджера Telegram. Писать бота мы будем на языке Python, параллельно изучая его основы. Договоримся, что вы используете Linux в качестве операционной системы, либо знаете как выполнить аналоги команд в Windows.
Установка необходимых библиотек
Нам понадобятся следующие библиотеки и программы:
- pip — менеджер пакетов для Python
- python — интерпретатор языка
- virtualenv — виртуальное окружение
- telebot — обертка над telegram API для языка Python
Теперь откроем консоль и наберем несколько команд. Первым делом загрузим менеджер пакетов для питона и виртуальное окружение, внутри которого мы будем устанавливать все остальные пакеты, чтобы не засорять систему и не порождать конфликтов с другими проектами. Также скачаем проект telebot, который носит название pyTelegramBotAPI.
sudo apt-get install python-pip sudo pip install pyTelegramBotAPI sudo pip install virtualenv
Следующая команда создаст в вашей директории новую директорию venv, в которой будет хранить все локальные библиотеки. Подробности про виртуальные окружения можно прочитать по адресу: http://docs.python-guide.org/en/latest/dev/virtualenvs/ Можно работать и без виртуального окружения, но тогда убедитесь, что устанавливаемые вами библиотеки не конфликтуют с другими библиотеками в системе (например, могут сломаться некоторые программы, заточенные под старые версии пакетов).
virtualenv venv
После чего нам потребуется переместиться внутрь виртуального окружения, где можно будет подгружать все необходимые пакеты для проекта.
source venv/bin/activate
Создание Telegram-бота
Код довольно интуитивен, поясним только основные идеи. Когда пользователь будет вводить команды /start и /help — выполнится функция send_welcome, которая отправит пользователю в чат сообщение с приветствием. При вводе /auth пока ничего происходить не будет.
Запустите бота командой:
python simplebot.py
/setdescription
Затем выберите нужного бота из предложенного списка и следующим сообщением отправьте текст описания. Также, вы можете задать вашему боту список команд, которые он понимает. Это необходимо для того, чтобы у пользователей выводились подсказки при наборе команд в чате. Введите:
/setcommands
Выберите бота из списка и в следующем письме введите перечень команд в формате:
команда1 — Описание команды команда2 — Еще одно описание команды
Этих знаний достаточно, чтобы уже сейчас запустить своего бота. О том как сделать его чуточку полезнее, читайте в продолжении.
If you like this article, share a link with your friends
Read more
We talk about interesting technologies and share our experience of using them.
Источник: codex.so
Как создать Telegram бота с помощью Python
Представьте, что у вас есть бот в мессенджере, который присылает вам случайно выбранную картинку с собачкой, когда вам захочется. Звучит здорово, да? Давайте сделаем такого.
В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.
В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.
Начнём
Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.
1. Создаём нового бота в BotFather
Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а
Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot . Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram.me/YOUR_BOT_USERNAME , а токен вот так:
704418931:AAEtcZ*************
2. Устанавливаем библиотеку
Команда для установки библиотеки:
pip3 install python-telegram-bot
Если всё прошло гладко, то можно двигаться дальше.
Пишем программу
Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.
Рабочий процесс нашего бота очень прост:
запрос к API -> получить URL изображение -> отправить изображение
1. Импорт библиотек
Для начала импортируем все нужные библиотеки.
from telegram.ext import Updater, CommandHandler import requests import re
2. Доступ к API и получение URL изображения
Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.
contents = requests.get(‘https://random.dog/woof.json’).json()
Проверить json данные можно в браузере по ссылке https://random.dog/woof.json . Вы увидите что-то вроде этого:
Получаем URL, чтобы иметь возможность отправить изображение:
image_url = contents[‘url’]
Оформим этот код в виде функции get_url() .
def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url
3. Отправляем картинку
Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.
Получить URL изображения можно вызвав функцию get_url() .
url = get_url()
Чтобы получить ID получателя, используйте этот код:
chat_id = update.message.chat_id
После того как мы получили URL изображения и ID получателя, пришло время отправить сообщение, т.е. изображение.
bot.send_photo(chat_id=chat_id, photo=url)
Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:
def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)
4. Основная программа
И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.
def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if name == ‘__main__’: main()
В итоге, ваш код должен выглядеть вот так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
5. Запуск программы
Отлично! Мы почти закончили.
Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:
python3 main.py
Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME . Отправьте команду /bop . Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.
Исправляем ошибки
Отлично! Теперь у вас есть работающий бот.
Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.
Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.
1. Проверяем расширение файла с помощью регулярного выражения
Чтобы решить эту проблемы, мы будем использовать регулярное выражение.
Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.
https://random.dog/*****.JPG
Во-первых, необходимо определить, какие расширения файлов допускаются в нашей программе.
allowed_extension = [‘jpg’,’jpeg’,’png’]
Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.
file_extension = re.search(«([^.]*)$»,url).group(1).lower()
Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).
def get_image_url(): allowed_extension = [‘jpg’,’jpeg’,’png’] file_extension = » while file_extension not in allowed_extension: url = get_url() file_extension = re.search(«([^.]*)$»,url).group(1).lower() return url
2. Модифицируем код
Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url def get_image_url(): allowed_extension = [‘jpg’,’jpeg’,’png’] file_extension = » while file_extension not in allowed_extension: url = get_url() file_extension = re.search(«([^.]*)$»,url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
Всё должно работать идеально. Этот код можно найти на моём GitHub.
Поздравляю с окончанием урока, теперь у вас есть классный бот для Telegram.
Источник: nuancesprog.ru