Как написать Telegram-бота на Python — Tproger
В этой инструкции разберем процесс создания простого бота-ремайндера, единственная задача которого — напоминать пользователю о важных делах. Это базовая конструкция, которую можно усложнять и менять под свои потребности.
Инструкция подойдет для новичков, которые знают Python на базовом уровне, пробовали писать код и установили на компьютер редактор кода.
Первый этап: подготовка проекта и развертывание окружения
Найдем в поиске Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой инструкции это будут Elbrus Reminder и elbrus_reminder_bot соответственно.
После этого BotFather пришлет сообщение с токеном и ссылкой на бот:
Токен нужно хранить в безопасном месте — он дает контроль над ботом. и, как следствие, позволяет получить доступ к данным пользователей.
На время закроем Telegram и создадим на компьютере папку с именем проекта: например, reminder_bot. Откроем папку в среде разработки и создадим рабочий файл с понятным названием — bot.py.
Откроем терминал редактора кода и создадим для проекта новое окружение. В среде разработки с помощью команды python -m venv .venv
создадим папку с окружением .venv
.
Если окружение не активировалось автоматически, можно сделать это вручную, прописав путь к файлу активации в формате source .venv/bin/activate
, где source
— команда языка программирования Bash. Другой вариант — перезапустить среду разработки. Он работает для Visual Studio Code, но нужно предварительно принять предложение редактора привязать среду к папке проекта сразу после создания окружения.
Практика создания нового окружения под каждый проект позволяет повыстить безопасности и стабильность проекта — в окружении вы можете использовать только те библиотеки и их версии, которые требуются в проекте. Если в проекте появятся дополнительные функции, все изменения будут храниться в этом окружении. При этом оно будет изолировано от других окружений и проектов — это повысит безопасность проекта.
Второй этап: подключаем библиотеки
Проект создан и окружение готово: пора переходить к написанию кода. По правилам хорошего тона в первую очередь через import
добавляем несколько предустановленных библиотек Python. При создании бота нам пригодятся logging
и time
, которые отвечают за определение времени и логирование сообщений.
import time import logging
Затем добавим асинхронную библиотеку aiogram, на основе которой будет работать бот. Она, например, определяет, какое сообщение пришло, как его нужно обработать и какие порты нужны. Сначала устанавливаем ее через терминал командой pip install aiogram
, а в редакторе кода пишем следующее:
from aiogram import Bot, Dispatcher, executor, types
Из этой библиотеки нам нужны только отдельные модули и классы — все ее возможности для создания базовой версии бота не пригодятся. Поэтому вместо одиночного import использована команда
.
Когда библиотеки импортированы, создадим переменные с токеном бота и сообщением, которое он будет отправлять пользователю. Вы можете заменить это сообщение на любое другое, которое вам необходимо. Это статические переменные, поэтому их имена написаны капслоком:
TOKEN = "здесьбудетваштокенот от BotFather" MSG = "Программировал ли ты сегодня, {}?"
Токены, ключи и прочие данные для настройки проекта лучше загружать более безопасным способом (например, создавать переменные окружения или файлы конфигурации). Но в данном случае сделаем все в одном файле для наглядности, а примеры более безопасной работы с такими переменными разберем в следующих постах.
Теперь создадим экземпляр класса Bot
, передав ему в качестве аргумента наш токен, и экземпляр класса Dispatcher (dp), который в качестве аргумента получит bot
. В результате получаем связку объекта класса bot
с ключем, который привязан к боту, и диспетчера, который привязан к этому боту:
bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot)
Следующим шагом добавим конструкцию под названием декоратор (massage_handler
) — она помогает получить из диспетчера нужный функционал. В качестве аргумента прописываем команды, которые обрабатывает декоратор — в данном случае это команда
, которая запускает бот.
@dp.message_handler(commands=['start'])
Под декоратором прописываем функцию, которая будет обрабатывать команду /start
и определяет логику, в соответствии с которой будет работать бот. Поскольку мы работаем с асинхронной библиотекой, функция тоже должна быть асинхронной. Для этого перед указанием def
добавим ключевое слово async
:
async def start_handler(message: types.Message):
Функция приветствует пользователя и обрабатывает сообщение, которое он отправляет в ответ. Из сообщения можно получить информацию о пользователе, который его прислал, время отправки и его ID.
Создаем переменную и сохраняем в ней user id
:
user_id = message.from_user.id
Затем получаем из сообщения короткое и полное имя пользователя:
user_name = message.from_user.first_name user_full_name = message.from_user.full_name
Для того, чтобы в логах отображалась информация о пользователе, передаем в виде текста ID и полное имя, а также используем возможности библиотеки time
, чтобы определить время, когда писал пользователь:
logging.info(f'{user_id} {user_full_name} {time.asctime()}')
Здесь отойдем в сторону и проверим корректность работы модуля time
. Сделать это можно в терминале: для этого напишем import time
, а затем — time.asctime
Вернемся к коду. Поскольку функция, которую мы используем, асинхронна, вместо обычного для функций return
используем await
:
await message.reply(f"Привет, {user_full_name}!")
Ответить пользователю в боте можно несколькими способами — в данном случае используем reply.
Выше в переменной MSG
мы задали стандартное сообщение: «Программировал ли ты сегодня, {}?».
for i in range(7): await asyncio.sleep(60*60*24)
Затем настроим отправку сообщения с указанием имени пользователя в этом же цикле:
await bot.send_message(user_id, MSG.format(user_name))
Третий этап: финал
Переходим к финальной части: в конце скрипта напишем несколько строк. Они могут показаться странными для новичка, но это общепринятая практика, к которой многие программисты прибегают при разработке. В этой строке мы проверяем, равна ли переменная
строке "__main__"
. Это условие всегда будет True, если мы запускаем этот файл как python-скрипт через терминал:
if __name__ == '__main__':
Теперь делаем нашего бота доступным в сети:
executor.start_polling(dp)
Сохраняем файл. Запускаем бота в терминале, открытом в папке проекта, с помощью команды python bot.
. py
Вернемся в BotFather и перейдем по ссылке, которую получили вместе с токеном. Нажимаем «Начать» — готово, бот, написанный меньше, чем в 30 строк, работает.
Так выглядит его код целиком:
import time import logging import asyncio from aiogram import Bot, Dispatcher, executor, types TOKEN = "здесьбудетваштокенот@BotFather" MSG = "Программировал ли ты сегодня, {}?" logging.basicConfig(level=logging.INFO) bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot) @dp.message_handler(commands=["start"]) async def start_handler(message: types.Message): user_id = message.from_user.id user_name = message.from_user.first_name user_full_name = message.from_user.full_name logging.info(f'{user_id} {user_full_name} {time.asctime()}') await message.reply(f"Привет, {user_full_name}!") for i in range(7): await asyncio.sleep(60*60*24) await bot.send_message(user_id, MSG.format(user_name)) if __name__ == "__main__": executor.start_polling(dp)
В следующий раз подробно расскажем, как написать подобный бот на языке программирования JavaScript. Подписывайтесь, чтобы не пропустить инструкцию.
как написать с нуля самостоятельно, как его зарегистрировать и протестировать, примеры
Телеграм используют более пятисот миллионов людей по всему миру. Компании с его помощью упрощают заказ товаров или услуг, дают консультации. Для этого используют ботов — автоматические программы. Их пишут на разных языках программирования. Рассмотрим, как создать бот на самом популярном в феврале 2022 года языке — Python.
Установите интерпретатор Python
Python — динамически типизированный, интерпретируемый язык. Программы, написанные на нём, не компилируются в исполняемые файлы. Поэтому, чтобы запускать Python-программы, устанавливают его интерпретатор.
🖥️ Windows
- Перейдите на официальную страницу загрузки Python.
Выберите последнюю версию Python
- Пролистайте вниз страницы и скачайте Windows Installer.
Выберите 64-bit
- Откройте установщик и поставьте галочку, нажмите Install Now.
Поставьте галочку перед установкой напротив Add Python to PATH
- После откройте командную строку cmd.exe и установите виртуальное окружение с помощью команды
pip install virtualenv
❗ Вызов интерпретатора в командной строке Windows отличается от других ОС. Используйте команду
🖥️ Linux
Если вы используете ОС Linux, вероятно, Python уже установлен. Чтобы проверить, откройте терминал с помощью команды:
python3 --version
Если вы видите что-то вроде Python 3.x.x, то Python есть. В противном случае используйте установленный менеджер пакетов. В основном это apt. Введите команду:
sudo apt install python3
Установите виртуальное окружение с помощью команды:
sudo apt install python3-venv
🖥️ MacOS
На макбуках Python часто тоже уже есть.
python3 --version
Ответ Python 3.x.x, а не ошибка, тоже подтверждает, что Python установлен. Если нет — используйте менеджер пакетов brew. Введите команду:
brew install python3
Установите пакет для создания виртуального окружения:
pip install virtualenv
Создайте папки проекта и виртуального окружения
Откройте терминал Linux или MacOS, командную строку Windows. Перейдите в директорию, в которой вы хотите создать проект бота. Последовательно
введите команды:
mkdir myBot cd myBot python3 -m venv env #
или, если вы используете Windows:
py -m venv env #
Эти команды создадут папку проекта myBot внутри текущей рабочей директории. А в ней — папку с виртуальным окружением.
Активируйте окружение, выберите и установите библиотеки
Библиотека PandasОбзор библиотеки, которая входит в топ-5 самых востребованных навыков для вакансий в области data science.
Чтобы активировать виртуальное окружение на MacOS или Linux, используйте команду
source ./env/bin/activate
И команду
source.\env\bin\activate.bat
для Windows.
Чтобы создавать боты, используют разные библиотеки. Самые популярные: python-telegram-bot с синхронным подходом, aiogram с асинхронным.
Асинхронность позволяет отвлекаться от задач и не ждать ввода от пользователя, поэтому мы будем использовать библиотеку aiogram. Документация по ней — на docs.aiogram.
Используйте менеджер Python-пакетов (pip). Чтобы установить библиотеку aiogram, введите команду:
pip install aiogram
Зарегистрируйте бота и получите API-ключ
Откройте телеграм и найдите бота @BotFather. Он нужен, чтобы создавать другие боты и управлять ими.
Нажмите «Запустить».
Введите команду /newbot и отображаемое имя бота
Теперь введите никнейм бота. Он должен быть уникальным, в конце обязательно слово bot. Когда юзернейм пройдет валидацию, вы получите сообщение с API-ключом.
Никому не сообщайте полученный токен
Примеры ботов
🤖 ЭхоботДля начала в папке проекта создайте несколько файлов.
Handlers.py будет хранить функции — обработчики сообщений и команд, main.py нужен для запуска
Напишите в main.py код:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' # создаем экземпляры бота и диспетчера bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # запускаем программу if __name__ == '__main__': # указание skip_updates=True # пропустит команды, # которые отправили # до старта бота executor.start_polling(dp, skip_updates=True)
Разберем построчно:
from aiogram import Bot, Dispatcher, executor import handlers
Здесь из библиотеки aiogram мы импортируем классы Bot, Dispatcher — класс, который регистрирует, на какие команды/сообщения и какой функцией отвечать. И executor — он запускает бота и выполняет функции, зарегистрированные в диспетчере. На второй строке мы импортируем модуль handlers.py — в нём хранят обработчики.
Затем объявите переменную, в которую нужно вставить токен от @BotFather. Создайте экземпляр класса бота, в него передайте токен. И экземпляр диспетчера, в него передайте только что созданный бот.
Далее откройте файл handlers.py и напишите в нём пару команд, которые будут обрабатывать запросы:
from aiogram import types # функция, обрабатывающая команду /start async def start(message: types.Message): await message.answer("Привет!\nНапиши мне что-нибудь!") # функция, которая отвечает на сообщение # текстом async def echo(message: types.Message): await message.answer("Сам ты: " + message.text)
Здесь из модуля aiogram импортируем типы, с помощью которых преобразуем текст сообщения или файлы в структуру данных. Это может быть Message — сообщение, Audio — аудиозапись, Animation — анимация.
Далее определите асинхронные функции, чтобы обрабатывать команды /start и отвечать на сообщения.
Зарегистрируйте эти функции в диспетчере. Для этого в файле main.py добавьте перед запуском программы:
# регистрируем функции dp.register_message_handler(h.start, commands=["start"]) dp.register_message_handler(h.echo)
В итоге файл main.py выглядит так:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' # создаем бота и диспетчер bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # регистрируем функции dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.echo) # запускаем программу if __name__ == '__main__': # указание skip_updates=True # пропустит команды, # которые отправили # до старта бота executor.start_polling(dp, skip_updates=True)
Чтобы проверить работу, введите в терминале python3 main. py или py main.py на Windows. Откройте бота в телеграме и запустите его
🤖 Криптобот
Чтобы написать криптобота, который будет сообщать текущую цену BTC, LTC и DASH, используйте бесплатный API-сервис SoChain. Еще потребуется дополнительная библиотека, чтобы создать асинхронные запросы aiohttp, но ее устанавливают вместе с aiogram.
Создайте новый модуль utils.py. Добавьте в него url-адрес API-сервиса. Чтобы узнавать цену, используйте метод Get Prices. Он возвращает json-объект с данными о цене из нескольких источников. Поэтому напишите функцию, которая вычисляет среднее значение:
BASE_URL = "https://sochain.com/api/v2/" # API URL # функция, чтобы рассчитать цену def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD"
Далее откройте файл handlers.py и напишите код:
from aiogram import types # импортируем библиотеку aiohttp import aiohttp # импортируем из utils все данные from utils import * # обработчик команды /start async def start(message: types.Message): await message.answer("Привет!\nНапиши мне акроним криптовалюты, чтобы узнать текущую цену") # обработчик команды /help async def help(message: types.Message): await message.answer("Доступные сети:\n" + "\n".join(networks)) # обработчик запроса цены async def get_price(message: types.Message): session = aiohttp.ClientSession() # создаем GET запрос по закрепленному за методом get_price url async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: # получаем ответ в формате json data = await resp.json() # если статус запроса — успешно if data["status"] == "success": # рассчитываем цену и отправляем пользователю price = calculate_price(data) await message.answer(price) else: # сообщаем о том, что произошла ошибка await message.answer("Произошла ошибка")
Теперь измените main.py файл: зарегистрируйте функции. Затем протестируйте бота:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.help, commands=["help"]) dp.register_message_handler(handlers.get_price) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Когда пользователь укажет неподдерживаемую сеть ETH, бот вернет цену биткоина, потому что так устроен API-сервис. Если он не распознал сеть, то использует BTC
Чтобы исправить ошибку, создайте клавиатуру, которая возвращает нужные значения. Напишите специальный класс Middleware: в нём описываются проверки до и после обработки запроса. Либо проверьте вхождение внутри функции. Последний вариант проще и легче.
Если пользователь отправит неподдерживаемый акроним криптосети, вы сообщите ему об этом. Для этого в файле utils.py определите список поддерживаемых сетей:
networks = ["BTC", "LTC", "DASH"] # <-- поддерживаемые сети BASE_URL = "https://sochain.com/api/v2/" # API URL def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD"
Теперь отредактируйте функцию расчета цены криптовалюты в файле handlers.py. Для этого добавьте проверку вхождения сети в список поддерживаемых:
async def get_price(message: types.Message): network = message.text.upper() # приводим сообщение к верхнему регистру # выполняем проверку вхождения if network not in networks: await message.answer("Вы указали неподдерживаемую криптовалюту") return session = aiohttp.ClientSession() async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: data = await resp.json() if data["status"] == "success": price = calculate_price(data) await message.answer(price) else: await message.answer("Произошла ошибка")
Когда пользователь укажет неподдерживаемую сеть ETH, бот сообщит об этом
Код всех файлов
utils.py
networks = ["BTC", "LTC", "DASH"] # поддерживаемые сети BASE_URL = "https://sochain.com/api/v2/" # API URL def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD"
handlers.py
import aiohttp from aiogram import types from utils import * async def start(message: types.Message): await message.answer("Привет!\nНапиши мне акроним криптовалюты, чтобы узнать текущую цену") async def help(message: types.Message): await message.answer("Доступные сети:\n" + "\n".join(networks)) async def get_price(message: types.Message): network = message.text.upper() if network not in networks: await message.answer("Вы указали неподдерживаемую криптовалюту") return session = aiohttp.ClientSession() async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: data = await resp.json() if data["status"] == "success": price = calculate_price(data) await message.answer(price) else: await message.answer("Произошла ошибка")
main.py
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.help, commands=["help"]) dp.register_message_handler(handlers.get_price) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Вебинары
Главное о телеграм-боте на Python
- Чтобы создать бота, установите интерпретатор Python. На Linux и MacOS он часто уже есть.
- Создайте папку с проектом myBot, в ней — папку с окружением, активируйте его, установите библиотеку aiogram. Она позволяет обрабатывать запросы, даже если вы ждете, пока пользователь введет информацию.
- Регистрируйте бота и управляйте его настройками с помощью @BotFather.
В онлайн-университете Skypro обучаем профессии Python-разработчика за 10 месяцев. Узнаете, как писать чистый код, серверы для магазина, приложения, сервиса или игры, разрабатывать сложную архитектуру сервисов. Выполните практические задания с реальными инструментами и сделаете четыре проекта для портфолио. Развиваем только нужные навыки, необходимые для старта в профессии.
Создайте бота Telegram с помощью учебника по Python с примерами
Введение
Автоматический чат-бот действительно полезен для вовлечения в разговор. На таких платформах, как Facebook, Google и других, мы можем разрабатывать чат-ботов. В этом уроке мы узнаем, как создать чат-бота Telegram и использовать его для подготовки текстовых сообщений с подробными ответами.
Здесь мы узнаем, как мы можем получить различные типы ответов от бота, такие как:
- Текст
- Изображение
- Видео
- Документ
- Аудио
- Опрос
- Кнопки быстрого ответа
- Кнопки со ссылками
Шаги для создания Telegram04 Bot 90
Шаг 1 : Откройте свою учетную запись Telegram и в строке поиска введите «BotFather».
Шаг 2 : Нажмите «BotFather» и нажмите кнопку «Пуск».
Шаг 3 : Введите «/newbot».
Шаг 4 : Введите уникальное имя бота.
Шаг 5 : Теперь введите уникальное имя пользователя для своего бота.
Помните: имя пользователя должно заканчиваться на «bot». Например. «Tetris_bot» или «Tetrisbot».
Шаг 6: После указания уникального имени пользователя вы получите сообщение, подобное приведенному ниже. он содержит токен для доступа к HTTP API. Обеспечьте безопасность своего токена и храните его в безопасном месте.
Шаг 7 : Создание фляжного приложения для ответа веб-перехватчика.
Прежде всего, вам необходимо установить python и flask на свой компьютер.
$ pip install Flask
from flask import Flask приложение = фляга (__имя__) @app.route('/') индекс определения(): вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(threaded=True)
Запустите этот код, чтобы проверить, правильно ли работает приложение фляги. Когда вы запустите код, вы получите ссылку на сервер, например «http://127.0.0.1:5000/». Нажмите на эту ссылку, и вы будете перенаправлены на веб-страницу, где увидите ответ «Добро пожаловать!»
Шаг 8 : Настройка NGROK.
Перейдите в Ngrok и введите команду «ngrok http 5000», после выполнения этой команды вы получите ссылки.
Из этих ссылок Ngrok скопируйте ссылку HTTPS и вставьте ее в свой браузер. Вы увидите ответ «Добро пожаловать!» так же, как предыдущий шаг.
Шаг 9 : Настройка веб-перехватчика.
Теперь вам нужно установить вебхук для телеграмм бота.
Вы можете сделать это, запустив ссылку в браузере.
https://api.telegram.org/bot<токен вашего бота>/setWebhook?url=
После запуска ссылки в веб-браузере вы получите ответ, показанный ниже. изображение.
Шаг 10 : Получите ответ JSON.
Теперь нам нужно будет получить JSON-ответ от телеграм-бота на любой текст, который мы пишем боту.
Теперь откройте VS Code, добавьте следующий код и запустите его по той же ссылке Ngrok, по которой вы запускали предыдущий код.
из фляги импорт фляги из запроса на импорт фляги из фляги импортировать ответ запросы на импорт приложение = фляга (__имя__) @app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() печать (сообщение) вернуть ответ('хорошо', статус=200) еще: вернуть "Добро пожаловать!
" если __name__ == '__main__': app.run(debug=True)
В BotFather, где вы получаете токен для своего чат-бота Telegram, вы также можете указать URL-адрес для перенаправления на вашего бота Telegram.
После этого нажмите на Start Bot , чтобы начать чат с ботом. Затем введите любое сообщение, которое вы хотите, например, «тестовый бот» или что угодно.
После того, как вы напишете «тестовый бот» своему боту, теперь перейдите к Vscode, и вы загрузите следующий JSON в свой терминал.
Здесь мы видим, что сообщение, которое мы написали телеграмм-боту, мы можем получить на бэкенде в текстовом виде.
Шаг 11 : отправить текстовое сообщение от бота.
Мы напишем код, чтобы получить ответ на сообщение «привет» от пользователя, и если вменится что-то кроме «привет», то ответ с «от веб-перехватчика».
Вы также можете добавить дополнительный параметр в сообщение отправки, чтобы вы могли следовать документации.
из фляги импорт Фляга из запроса на импорт фляги из фляги импортировать ответ запросы на импорт TOKEN = "<Токен вашего бота>" приложение = фляга (__имя__) def parse_message (сообщение): напечатать("сообщение-->",сообщение) chat_id = сообщение['сообщение']['чат']['id'] txt = сообщение['сообщение']['текст'] print("идентификатор_чата-->", идентификатор_чата) печать("текст-->", текст) вернуть chat_id, txt def tel_send_message(chat_id, текст): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': текст } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р @app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() chat_id, txt = parse_message (msg) если txt == "привет": tel_send_message(chat_id,"Привет!!") еще: tel_send_message(chat_id,'из вебхука') вернуть ответ('хорошо', статус=200) еще: вернуть "
Добро пожаловать!
" если __name__ == '__main__': app.run(отладка=Истина)
Мы получим следующий ответ в Telegram Bot.
Шаг 12 : Получите изображение.
Теперь мы также можем получить изображение от телеграмм-бота.
Добавив в код функцию отправки изображений.
Дополнительные параметры см. в документации.
из фляги импорт Фляга из запроса на импорт фляги из фляги импортировать ответ запросы на импорт TOKEN = "<Токен вашего бота>" приложение = фляга (__имя__) def tel_parse_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: chat_id = сообщение['сообщение']['чат']['id'] txt = сообщение['сообщение']['текст'] print("идентификатор_чата-->", идентификатор_чата) печать("текст-->", текст) вернуть chat_id, txt кроме: print("Текст не найден-->>") def tel_send_message(chat_id, текст): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': текст } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р деф tel_send_image (идентификатор чата): URL = f'https://api.telegram.org/bot{TOKEN}/sendPhoto' полезная нагрузка = { 'chat_id': чат_id, 'фото': "https://raw.githubusercontent.com/fbsamples/original-coast-clothing/main/public/styles/male-work.jpg", 'caption': "Это образец изображения" } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р @ app.route('/', методы=['GET', 'POST']) индекс определения(): если request.method == 'POST': сообщение = запрос.get_json() пытаться: chat_id, txt = tel_parse_message(msg) если txt == "привет": tel_send_message(chat_id,"Привет, мир!") Элиф тхт == "изображение": tel_send_image(chat_id) еще: tel_send_message(chat_id, 'из вебхука') кроме: print("из индекса-->") вернуть ответ('хорошо', статус=200) еще: вернуть "
Добро пожаловать!
" если __name__ == '__main__': app.run(threaded=Истина)
Вот ответ, который вы получите от телеграммы.
Шаг 13 : Получить аудио.
Аналогично можно отправить аудио в телеграм. Для получения дополнительных параметров вы можете следовать документации.
деф tel_send_audio(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendAudio' полезная нагрузка = { 'chat_id': чат_id, "аудио": "http://www.largesound.com/ashborytour/sound/brobob.mp3", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "аудио": tel_send_audio(chat_id)
Шаг 14: Получить видео.
Добавьте код для получения видео в телеграм. Чтобы добавить дополнительные параметры, вы можете следовать документации.
деф tel_send_video(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendVideo' полезная нагрузка = { 'chat_id': чат_id, "видео": "https://www.appsloveworld.com/wp-content/uploads/2018/10/640.mp4", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "видео": tel_send_video(chat_id)
Вы получите следующий ответ в своей телеграмме.
Шаг 15 : Получить файл.
Добавьте код для получения Файла в телеграмму. Чтобы добавить дополнительные параметры, вы можете следовать документации.
деф tel_send_document(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendDocument' полезная нагрузка = { 'chat_id': чат_id, "документ": "http://www.africau.edu/images/default/sample.pdf", } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "файл": tel_send_document(chat_id)
Вы получите следующий ответ в телеграмме.
Шаг 16: Получите опрос.
Добавьте код для получения Опроса в телеграм. Чтобы добавить дополнительные параметры, вы можете следовать документации.
по определению tel_send_poll(chat_id): URL = f'https://api.telegram.org/bot{TOKEN}/sendPoll' полезная нагрузка = { 'chat_id': чат_id, "вопрос": "В каком направлении восходит солнце?", "options": json.dumps(["Север", "Юг", "Восток", "Запад"]), "is_anonymous": Ложь, "тип": "викторина", "правильный_option_id": 2 } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "опрос": tel_send_poll(chat_id)
Вы получите следующий ответ в телеграмме.
Шаг 17 : Получить кнопку.
Добавьте код для получения Кнопки в телеграм-бот.
по умолчанию tel_send_button(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': "Что это?", 'reply_markup': {'клавиатура': [[{'текст': 'супа'}, {'текст': 'марио'}]]} } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "кнопка": tel_send_button(chat_id)
Вы получите следующий ответ в своей телеграмме.
Шаг 18 : Получите встроенную кнопку.
Добавьте код для получения Inline Button в телеграмму.
по умолчанию tel_send_inlinebutton(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'текст': "Что это?", 'ответ_разметка': { "inline_keyboard": [[ { "текст": "А", "callback_data": "ic_A" }, { "текст": "Б", "callback_data": "ic_B" }] ] } } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "встроенный": tel_send_inlinebutton(chat_id)
Вы получите следующий ответ в своей телеграмме.
Шаг 19 : Получите URL встроенной кнопки.
Добавьте код для получения Inline Button в телеграмму.
по определению tel_send_inlineurl(chat_id): URL-адрес = f'https://api.telegram.org/bot{TOKEN}/sendMessage' полезная нагрузка = { 'chat_id': чат_id, 'text': "Какую ссылку вы хотели бы посетить?", 'ответ_разметка': { "встроенная_клавиатура": [ [ {"текст": "google", "url": "http://www.google.com/"}, {"текст": "youtube", "url": "http://www.youtube.com/"} ] ] } } r = запросы. сообщение (url, json = полезная нагрузка) вернуть р
Добавьте этот код в свою индексную функцию.
elif txt == "inlineurl": tel_send_inlineurl(chat_id)
Вы получите следующий ответ в телеграмме.
Для получения дополнительной информации вы можете следить за документацией Telegram Bot Api.
Шаг 20: Поделитесь изображением с ботом и получите его на стороне сервера.
Прежде всего, мы отправим изображение боту и посмотрим, какой тип JSON мы получаем на стороне нашего сервера.
Как мы видим, мы получаем идентификатор файла для файла, который мы отправляем боту телеграммы. Теперь мы получим этот идентификатор файла для изображения.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Теперь, вызвав данную функцию в индексной функции, мы можем получить идентификатор чата и идентификатор файла.
file_id = tel_parse_get_message(msg)
Мы получим ответ ниже.
Теперь мы будем использовать идентификатор файла, который мы получили для изображения, чтобы получить путь к файлу для изображения, которое хранится на сервере телеграмм.
Для этого нам нужно будет перенаправить на другой URL-адрес и передать ему наш идентификатор файла, для которого мы создали функцию.
по умолчанию tel_upload_file(file_id): url = f'https://api.telegram.org/bot{TOKEN}/getFile?file_id={file_id}' а = запросы.пост(url) json_resp = json.loads(a.content) напечатать("а-->",а) печать ("json_resp-->", json_resp) file_pathh = json_resp['результат']['file_path'] print("путь_к_файлу -->", путь_к_файлу) url_1 = f'https://api.telegram.org/file/bot{TOKEN}/{file_path}' б = запросы.get(url_1) file_content = б.контент с open(file_path, "wb") как f: f.write(file_content)
Нам также нужно вызвать функцию, которую мы создали.
file_id = tel_parse_get_message(msg) tel_upload_file(file_id)
Здесь в функции сначала мы пытаемся получить путь к файлу для изображения, которым мы поделились из JSON.
После получения пути к файлу мы пытаемся получить файл с сервера телеграмм, перенаправляя путь к файлу на «url_1».
С «url_1» пытаемся сохранить файл на свой компьютер.
На стороне сервера вы увидите печать и JSON, подобные этому.
Вот каталог, в котором мы пишем наш код. Нам нужно создать папку с именем « photos », чтобы мы могли получить изображение, которое мы отправляем боту, прямо в нашей системе.
Шаг 21 : Теперь попробуем добавить видео в телеграм-бота.
Когда мы отправляем видео боту, мы получаем различные типы JSON. Поэтому нам нужно извлечь из него идентификатор файла.
Это можно сделать с помощью следующего кода.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) распечатать("1") пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['видео']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_video_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Теперь аналогичным образом мы извлечем идентификатор файла и передадим его функции, получим путь к файлу и сохраним видео на стороне нашего сервера.
Чтобы сохранить видео, нам нужно создать папку с именем « видео », в которой мы можем хранить видео.
Шаг 22 : Теперь аналогичным образом мы можем сделать это для аудио и файлов.
Для хранения аудио нам нужно создать папку с именем « музыка ».
Для хранения документов нам нужно создать папку с именем « документы ».
Здесь аналогичным образом нам нужно извлечь идентификатор файла и передать его функции file_upload.
по определению tel_parse_get_message (сообщение): напечатать("сообщение-->",сообщение) пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['фото'][0]['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_image_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['видео']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_video_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['аудио']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_audio_id-->", g_file_id) вернуть g_file_id кроме: пытаться: g_chat_id = сообщение['сообщение']['чат']['id'] g_file_id = сообщение['сообщение']['документ']['идентификатор_файла'] print("g_chat_id-->", g_chat_id) print("g_file_id-->", g_file_id) вернуть g_file_id кроме: print("Файл не найден -->>")
Шаг 23: Поскольку мы пытались сохранить изображение, видео, аудио и файл на стороне нашего сервера, а также сделали код для получения различных типов ответов через бота телеграммы.
Вы также можете обратиться к полному коду в нашем репозитории Github и протестировать его, чтобы получить различные ответы через бота телеграммы и отправить файлы на сервер.
Мы узнали, как получить текстовый ответ от бота, а также различные типы файлов. После этого мы также увидели, как мы можем получить файлы, которые мы отправляем боту на стороне нашего сервера.
Теперь вы можете заставить своего бота работать так, как вы хотите, — вперед и создайте следующую большую вещь!
Надеюсь, вам понравилось создавать своего первого бота Telegram. Если вы столкнулись с какими-либо трудностями, сообщите нам об этом в комментарии.
Как создать собственного Telegram-бота | Джерри | Паук
Скучаю по Наташе из Походного чата? Что, если я скажу вам, что мы можем создать свой собственный сервис в Telegram, который общается с нами! В этой статье мы собираемся сделать именно это с помощью простого кода с открытым исходным кодом, используя Python и Telegram бесплатно!
Источник: SAP Conversational AI Боты Telegram — это просто учетные записи Telegram, управляемые программным обеспечением, а не людьми, и они часто имеют определенные функции и функции. Они могут выполнять ряд действий, например обучать, играть, искать, транслировать, напоминать, подключаться, интегрироваться с другими службами или даже передавать команды в Интернет вещей.
Теперь давайте создадим Telegram-бота, который сможет общаться с вами, как приложение ИИ, где угодно, когда угодно и для кого угодно.
Насколько это круто? Давайте начнем.
Этапы сборки:
- Создать Telegram-бота.
- Создать чат-бота.
- Создать сервис, который может связать Чат-бота с Телеграм-ботом.
Как создать бота?
Это очень просто, Telegram предлагает бота, который делает это за вас с помощью простых команд. Ищите Botfather в строке поиска приложения Telegram, вы найдете бота с официально подтвержденной галочкой. Далее нажимаем на старт, чтобы использовать бота.
Мы будем использовать команду /newbot
для создания бота.
Давайте назовем бота Дэдпулом, добавив немного остроты, чтобы давать дикие ответы.
Даем имя и уникальный логин (общая ссылка) боту, все, Ура! наш бот создан.
Мы можем скопировать ссылку и поделиться ею с кем-либо в Интернете или выполнить поиск Telegram-бота в строке поиска, чтобы получить бота. Откройте бота и начните его использовать.
Мы отправляем сообщения, но почему бот Дэдпул не отвечает? В следующем разделе мы сделаем так, чтобы он отвечал на наши сообщения.
Нам нужно приложение ИИ, которое может отвечать на наши сообщения. Мы будем кодировать это в этом разделе. Мы можем создать собственный чат-бот и тренироваться с нашими данными с нуля или использовать библиотеки с открытым исходным кодом для создания некоторых библиотек. Здесь мы будем использовать chatterbot — библиотеку Python, которая делает всю работу за вас, нам просто нужно ввести сообщение, и он возвращает ответ, в этом сила открытого исходного кода.
Затем мы устанавливаем необходимые библиотеки python3
pip install ChatterBotПример кода для использования модуля Chatterbot
Это так же просто, как и создание чат-бота, независимо от ввода, который мы вводим внутри метода get_response
, мы получаем ответ из обученного ИИ-бота, которого мы только что сделали.
Мы только что сделали чат-бота, но как мы можем интегрировать чат-бот с Telegram-ботом? Следующий раздел делает именно это.
Мы создали телеграм-бота для пользователей. Мы заставили чат-бота отвечать на сообщения, здесь нам нужно их интегрировать так, чтобы чат-бот получал сообщение от телеграмм-бота и снова отвечал на него.
Как это сделать?
Перед этим нам потребуется узнать об API Telegram, который позволяет коду Python3 взаимодействовать с ботом Telegram.
Когда пользователь отправляет сообщение, наш сервер (код) должен собрать это сообщение. Есть два способа, которыми Telegram предлагает нашим серверам получать сообщения (от пользователя).
1. Опрос в конечной точке API — Telegram API предлагает конечную точку /getUpdate
в API для получения обновлений для пользовательского ввода.
2. Веб-перехватчики — Telegram предлагает конечную точку /setWebhook
и /deleteWebhook
для установки и удаления веб-перехватчика для обновлений сообщений от пользователя.
Подробнее об определениях и различиях между опросом и веб-перехватчиками.
В этой статье мы будем использовать 1-й вариант опроса API-запроса, поскольку для этого варианта не требуется сервер, размещенный в Интернете, с конечной точкой (URL), а также его легко запустить и протестировать. Если вы новичок в веб-API, нажмите здесь , чтобы узнать о них.
Использование опроса Получение пользовательских сообщений: Мы можем использовать конечную точку /getUpdates
с токеном безопасного API, полученным при создании бота, для получения сообщений, отправленных всеми пользователями бота Deadpool, используя указанный ниже URL-адрес.
https://api.telegram.org/bot1635894026:AAHiGLTmIfLYd8IIqYBvu2vlO1Fy0JHOj3E/getUpdates
Поскольку это конечная точка запроса GET, мы можем запустить ее в браузере. замените указанный выше токен API своим токеном API и используйте URL-адрес в своем браузере, введите несколько сообщений своему боту, и вы получите сообщения в формате JSON при перезагрузке.
Ответ на сообщения пользователя : Теперь мы можем использовать конечную точку /sendMessage
для отправки сообщений пользователю с его идентификатором пользовательского чата (полученным из конечной точки /getUpdates) и ответным сообщением с использованием этого формата в URL-адресе.
https://api.telegram.org/bot1635894026:AAHiGLTmIfLYd8IIqYBvu2vlO1Fy0JHOj3E/sendMessage?text="ответить на сообщение пользователя"&chat_id=654923404
Замените своим токеном и идентификатором чата для сообщения от предыдущей конечной точки, чтобы ответить на ответное сообщение в текстовом поле в URL-адресе.
Ура! мы можем отправлять и получать сообщения от конечных точек API. Давайте реализуем это в коде python3.
Устанавливаем необходимые библиотеки из pip. Затем мы создали:
- Доступ к API-интерфейсу бота Telegram, который имеет методы для получения обновлений с использованием тайм-аута ожидания идентификатора сообщения, который является числом и увеличивается на единицу для каждого сообщения и отправки сообщений, см. документацию здесь.
- Файл конфигурации для использования собственного токена.
- Файл сервера для запуска сервера с чат-ботом (тот, который мы создали в предыдущем разделе) и для ответа на идентификатор чата пользователя с помощью метода send_message бота телеграммы из импортированного класса бота.
Мы запускаем файл с помощью следующей команды
python server.py
, которая выводит вывод в консоли, как показано ниже.
Сервер запущен и готов отвечать на сообщения для бота Дэдпула Вывод поступает от тренера чат-бота, который обучает чат-бота реагировать на ввод, он обучает бота, используя предварительно собранный набор данных в нескольких разделах английского языка, чтобы он может реагировать на различные аспекты, выдающие себя за человека на сервере.
Теперь, пока сервер работает, мы отправляемся в Telegram, чтобы проверить нашего бота, мы можем отправлять сообщения и видеть его ответ и разговаривать.
Круто, правда? Достижение Мы успешно создали чат-бот Telegram. Поделитесь им с друзьями, используя общую ссылку, и они смогут попробовать. Если они спровоцируют бота, он будет давать такие дикие ответы…
Больше он никогда не использовал бота.Вы можете тайно искать с помощью API сообщения, которые ваш друг отправил Telegram-боту, даже если он не разделяет с вами смущения и не смеется с вашими друзьями.
Бот отвечает, а ввод пользователя осмыслен и понятен. Не говоря уже о том, что чат-бот является приложением ИИ, для того, чтобы бот понимал поведение и эмоции человека из вводимого текста, требуются обучающие данные, вы можете использовать своих собственных чат-ботов или создать их самостоятельно, используя некоторые хорошо поддерживаемые библиотеки с открытым исходным кодом и применить его здесь.
Вместо чат-бота мы можем создать собственное приложение с таким количеством сервисов, которое сможем интегрировать.