Как сделать телеграмм бота на python

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

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

Настройка рабочего окружения

ВАЖНО! Во время установки убедитесь, что вы добавили Python в системные переменные, иначе вы не сможете работать с ним и его утилитами из командной строки. Что бы проверить, есть ли Python в системных переменных, откройте интерфейс командной строки (cmd/terminal) и введите одну из следующих команд:

В консоле должна появиться информация о установленной версии (если вы используете Linux, то по умолчанию в нём есть Python 2.7, но нам эта версия не подходит).

После того, как интерпретатор установлен, скачаем и установим библиотеки, необходимые для разработки. В нашем случае это только одна библиотека – PyTelegramBotApi. Для установки, удаления, обновления библиотек и модулей в Python есть пакетный менеджер pip (pip3 для Python начиная с 3 ветки).

Мы не будем усложнять себе работу и возиться с виртуальным окружением и тд. Откройте терминал и для начала проверьте, работает ли pip, введя следующую команду:

Если в консоле появилась информация о версии pip, то всё работает корректно. Теперь установим библиотеку с помощью этой команды:

Библиотека для работы с API Telegram будет установлена глобально, и вы сможете использовать её в любом проекте.

Теперь создайте папку, в которой будет код нашего бота, например, можно создать папку bots в корне диска C:\, и в ней директорию проекта first-bot. Откройте эту папку в текстовом редакторе или IDE. Я же буду использовать PyCharm – одна из лучших IDE для работы с Python. В директории с проектом вам нужно создать два файла с расширением .py:

Создание бота в Telegram

Хорошо, отвлечёмся ненадолго от редактора и разберёмся, что такое token, и, самое главное, как создать бота в самом Telegram. За создание ботов в Telegram отвечает… тоже бот)) Он называется BotFather, и доступен по ссылке @BotFather. Найдите его в ТГ и нажмите Start, вы получите список команд, их довольно много и сейчас со всеми разбираться мы не будем. Для того, чтобы создать нового бота, выберите /newbot, потом введите имя бота, и уникальную ссылку, по которой можно будет найти бота (она должна заканчиваться на bot). Примеры показан в мобильном приложении Telegram .

Python

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

В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.

В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.

Начнём

Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.

1. Создаём нового бота в BotFather

Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а

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

Команда для установки библиотеки:

Если всё прошло гладко, то можно двигаться дальше.

Пишем программу

Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.

Рабочий процесс нашего бота очень прост:

1. Импорт библиотек

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

2. Доступ к API и получение URL изображения

Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.

Оформим этот код в виде функции get_url() .

3. Отправляем картинку

Получить URL изображения можно вызвав функцию get_url() .

Чтобы получить ID получателя, используйте этот код:

Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:

4. Основная программа

И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.

В итоге, ваш код должен выглядеть вот так:

5. Запуск программы

Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:


Исправляем ошибки

Отлично! Теперь у вас есть работающий бот.

Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.

Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.

1. Проверяем расширение файла с помощью регулярного выражения

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

Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.

Во-первых, необходимо определить, какие расширения файлов допускаются в нашей программе.

Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.

Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).

2. Модифицируем код

Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:

Всё должно работать идеально. Этот код можно найти на моём GitHub.

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

Часть 2: Подготовка к написанию кода

Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести:

sudo apt-get install python python-pip

Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .

После, в терминале Linux, или командной строке Windows вводим:

Теперь все готово для написания кода

Открывайте ваш любимый текстовый редактор, и давайте писать код бота!

Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:

@bot.message_handler(content_types=['text', 'document', 'audio'])

if message.text == "Привет":

bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?")

elif message.text == "/help":

bot.send_message(message.from_user.id, "Напиши привет")

else:

bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")

Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).

Где bot.py – имя нашего файла.

Теперь можно написать боту и посмотреть на результат:

Простой Telegram-бот на Python за 30 минут Habr, Python, Социальные сети, Длиннопост, Telegram, Бот

И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age

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

Python отлично подходит для создания ботов Telegram, и чрезвычайно популярные Python Telegram Bot Framework делает это гораздо проще, позволяя вам по умолчанию создавать боты, которые проходят асинхронно, чтобы вы могли легко кодовые боты, которые могут общаться со многими пользователями одновременно.

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

Установка Python Telegram Bot Framework

Для создания бота мы будем использовать Python версию 3.7. Бота Python Telegram Bot совместима с Python 2.7 и выше.

Прежде чем мы доберемся до фактического кодирования, нам нужно будет установить бот Python Telegram Bot самый простой способ сделать это с:

Если вы предпочитаете использовать исходный код, вы можете найти проект на Github Отказ

Сейчас с установленной библиотекой Bot Bot Python Telegram.

Подключение бота к телеграмме

Первое, что вам нужно будет иметь, у него будет подключиться к боту и аутентифицироваться с API Telegram.

Мы импортируем библиотеку регистратора Python, чтобы использовать фреймворки бота Python Telegram, построенные в журнале, чтобы мы могли видеть в реальном времени, что происходит с ботом, и если есть какие-либо ошибки.

Поместите следующий код в файл Python и поместите ключ Bot Telegram, где указано в операторе обновления:

Если вы просто хотите попробовать его в своей онлайн-оболочке, используйте эту refl.it, я создал для вас. Это уже настроено, и все зависимости устанавливаются!

Упражнение : Получите свой токен API, загрузив телеграмму и следуя вышеуказанным простым инструкциям. Это займет вас 10 минут или меньше! 🙂 Затем запустите это своим собственным токеном API и общайтесь с собой!

Мы создали переменную Updater, и это будет держать обновленную для нашей телеграммы бота Telegram, которая помещается в глобальную переменную, чтобы мы могли легко получить доступ к нему позже от UI.

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

UPDATATER.START_POLLING () на самом деле запускает бот, и после этого будет пропущено в боте, начнут начать опрос телеграмму для любых обновлений чата по телеграмме. Бот начнет опрос в своих отдельных потоках, чтобы это не остановит ваш сценарий Python.

Мы используем команду UPDATER.IDLE () здесь, чтобы заблокировать скрипт, пока пользователь не отправит команду, чтобы вырваться из скрипта Python, такого как Ctrl-C в Windows.

Заставить бот понять команды

Давайте обновим сценарий и сделайте нашу функцию start_bot выглядеть так:

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

Обработчики команд требуют как обновление, так и параметр CallbackContext. Через обновление мы отправляем обновления в чате, здесь используя Update.message.reply_text автоматически добавляет ответ только на конкретный чат, где была отправлена команда/начала/начала.

Теперь при вводе в чате с ботом или набрав команду/начала, вы должны получить такой ответ:

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

Команда START выполняет функцию в нашем боте всякий раз, когда пользовательские типы/начала, но что, если мы хотим, чтобы наш бот читать и отвечать на чат, а не просто выполнять команду?

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

Добавьте следующую строку в функцию start_bot под предыдущим утверждением add_handler:

Отказ от команды бота или на пользователя

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

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

Теперь мы сначала изменим обработчик повторителя, чтобы проверить, следует ли повторять текст пользователя:

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

Теперь мы добавим в другую функцию, чтобы пользователь мог установить словарь ECHO с помощью команды echo в чате:

В этой функции обратного вызова мы собираем параметры дополнительных команд пользователей из контекста. Параметры пользователей содержатся с CONTEXT.ARGS, которые предоставляют массив на основе пробелов от пользователя, в этой функции мы проверяем первый параметр, передаваемый пользователем, ищем включение или выключение, и измените переменную user_data [echo].

Размещение данных из веб-сайтов и крепежных команд

Python Telegram Bot позволяет легко ответить с файлами из веб-сайта, таких как фотографии, видео и документы, вам просто нужно дать URL к указанному типу контента.

Мы будем использовать USCUBICK API, чтобы собрать бесплатное изображение на основе пользователей, предоставляемых условиями и опубликуйте его в чате, и мы также будем использовать фильтр, чтобы эта команда работает только для вашего имени пользователя.

Добавьте следующий код в функцию start_bot ():

Замените your_username с вашим именем пользователя.

Этот код будет выполнять функцию get_image, но только если имя пользователя соответствует вашим собственным. С помощью этого фильтра мы проходим только в 1 имени пользователя, но вы также можете пройти в список пользователей.

Теперь давайте создадим функцию Get_Image:

Как и в предыдущем примере, мы получаем термины, используя переменную args из контекста, но в этом случае мы объединяем условия вместе с A и преобразовываться в нижний регистр, потому что это то, что требуется от разбавления API.

Затем вы можете получить изображение в чате, используя/get_image и некоторые ключевые слова такие:

Добавление графического интерфейса

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

Чтобы построить наш пользовательский интерфейс Мы будем использовать библиотеку Pysimplegui. С Pysimplegui вы можете создать перекрестную платформу GUI, которая работает на Windows, Mac и Linux без какого-либо исходного кода с легко читаемым синтаксисом и минимальным кодом для котла.

Чтобы начать добавление кода GUI Давайте сначала удалите строку UPDATER_IDLE () из нашей функции start_bot, поэтому функция start_bot читает так:

Сняв линию Updater.idle (), бот больше не приостанавливает скрипт после запуска и прогон в отдельной резьбе, пока не решили остановить бот или останавливаться основным потоком.

Теперь мы создадим графический интерфейс, этот графический интерфейс состоит из строки состояния, чтобы показать, включается ли бот в настоящее время вместе с началом и кнопкой остановки и название, как это:

Чтобы создать этот графический интерфейс, добавьте следующий код:

Теперь, чтобы запустить GUI Удалить оператор Start_bot () в нижней части нашего сценария и замените на GUI ():

В переменной макета вы можете видеть, что мы определили некоторые элементы текста и кнопки, и каждый элемент в списке отображается как строка в нашем интерфейсе UI. Наша первая строка состоит из 2 элементов, чтобы показать состояние (мы дали второй элемент ключ, чтобы мы могли легко обратиться к нему позже), а наша вторая строка состоит из трех кнопок.

Функция SG.Window – это то, где мы предоставляем наш заголовок и макет.

В то время как True: Loop – это стандартная петля событий Pysimplegui.

Функция Window.read () возвращает любые события GUI вместе с любыми значениями, передаваемыми вместе с событием (таким как текст ввода пользователя), мы не будем использовать какие-либо значения в нашей петле, поэтому мы передаем их в переменную, вы можете пройти Время ждать функции чтения Windows в миллисекундах, ничего не проезжая, поскольку мы сделаем, делает функцию ждать, пока событие не будет запущено.

Запуск и остановка бота из графического интерфейса

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

В нашем мероприятии начала мы запускаем бот, используя start_bot, если еще нет обновлений, в противном случае мы выполняем метод start_polling нашего Updater в виде повторного запуска обновлений таким образом, намного быстрее, чем использовать start_bot для инициализации бота.

Поворачивая кнопки графического интерфейса включения и выключения

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

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

Кнопки теперь должны включать и отключить соответствующим образом в графическом интерфейсе:

И там у нас есть, работающий графический интерфейс для нашей телеграммы бота.

Заключение

Мы узнали совсем немного в этом руководстве, и теперь вы можете иметь BOT Python Telegram, который отвечает командам, и даже представлены данные, показанные из Интернета.

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

об авторе

Johann – это фрилансер Python, специализирующийся на веб-ботах и веб-соскоб. Окончил с дипломом в компьютерных системах технологии 2009 года. Профиль на высоте.

Читайте также: