Добавить ссылку на Телеграмм бота python

Telegram bot (library pyTelegramBotAPI) / Бот Телеграма (библиотека pyTelegramBotAPI)

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

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

1. Подготовка окружения

Как уже сказал выше, для работы бота я использовал готовую библиотеку pyTelegramBotAPI, а значит нам потребуется python, я писал на версии 3.6 под систему ubuntu 18.04 LTS. Все, что надо установить при такой конфигурации это сам python3, pip3 и, конечно, библиотеку.

apt-get update

ChatGPT В Питоне. Создаем телеграм бота при помощи OpenAI ChatGTP Python


apt-get install python3
apt-get install python3-pip
pip3 install pyTelegramBotAPI

Теперь все готово для того, чтобы кодить самого бота.

2. Код бота

Самое главное в коде это обработчики событий, то есть обработка того контента, который будет получать бот в ходе своей работы.

Так как бота мы уже создали, у нас есть токен авторизации.

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

Еще по теме:  Название канала в Телеграмме как назвать

Итак, начало файла telebot_handler.py выглядит так:

# -*- coding: utf-8 -*- import telebot from telebot import types

Тут я указываю, что использую кодировку utf8 — всегда так делаю в python скриптах, а также ссылаюсь на библиотеку telebot и модуль из нее же, там хранятся типы нужных объектов для бота.

bot = telebot.TeleBot(«4xxxxxxx2:Xxxxxxxxxxxx—XXXXxxxxxxxxXXXXXxxXX»)

Это инициализация объекта бота как потомка от типа TeleBot, с указанием токена Вашего бота. после этого этим объектом можно манипулировать, отсылать и принимать сообщения.

2.1 Обработчики событий

Как создать Telegram бота с помощью Python

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

Рейтинг
( Пока оценок нет )
Загрузка ...