Телеграм-бот на Python
В первой части мы сделали гороскоп на Python, который выдаёт нам прогноз на день по знаку зодиака. Сегодня пойдём дальше: теперь этот же генератор гороскопов будет встроен в Телеграм в виде бота.
Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.
Как всё будет работать
В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.
На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.
Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.
Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:
Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит. В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.
Что будем делать
Если записать пошагово наш план, то он будет выглядеть так:
- Регистрируем бота в Телеграме.
- Устанавливаем Python-библиотеку для работы с Телеграмом.
- Добавляем библиотеку в программу с гороскопом и учим программу реагировать на сообщения в чате.
- Пишем там же код, который покажет кнопки для выбора знаков зодиака.
- Сделаем так, чтобы по кнопкам появлялся гороскоп для этого знака.
Теперь по очереди разберём каждый пункт.
1. Регистрация нового бота
В Телеграме находим канал @BotFather — он отвечает за регистрацию новых ботов:
Первый в списке со специальным значком подтверждения — это он.
Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):
С третьей попытки нам дали нового бота и токен для управления. Токен нужен для управления ботом, поэтому на экране его нет.
2. Установка библиотеки
Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.
Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi
В конце видим сообщение об успешной установке, значит всё сделали правильно.
Подключаем библиотеку и получаем сообщения
Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:
Единственное, о чём нужно не забыть — заменить слово «токен» на настоящий токен, который дал нам @BotFather. Открываем программу гороскопа и добавляем.
Теперь научим бота реагировать на слово «Привет». Для этого добавим после строчек с импортом новый метод и сразу пропишем в нём реакцию на нужное слово. Если не знаете, что такое метод и зачем он нужен, — читайте статью про ООП.
И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:
Она скажет программе, чтобы она непрерывно спрашивала у бота, не пришли ли ему какие-то новые сообщения. Запускаем программу и проверяем, как работает наш бот.
Бот отвечает именно так, как мы запрограммировали. Класс.
Такая ошибка во время запуска программы означает, что компьютер не может соединиться с сервером telegram.org, потому что его блокирует Роскомнадзор. Что делать? Сложно сказать. Если бы вы жили в другой стране, этой проблемы бы не было. Ещё можно использовать какие-то средства, которые направляют ваш трафик через другую страну, но рассказ об этих средствах является в России преступлением, поэтому тут мы вам ничего не можем подсказать.
Добавляем кнопки
Чтобы пользователям нашего бота было удобно, покажем им сразу все знаки зодиака в виде кнопок. А потом сделаем так, что когда на них нажимаешь — появляется гороскоп для этого знака на сегодня.
Добавляем код с кнопками в раздел, который реагирует на «Привет»:
Кнопки есть, но пока не работают. Сейчас исправим.
Добавляем обработчик кнопок
Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data=’zodiac’ . Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.
Давайте сделаем обработчик кнопок, который будет реагировать на ‘zodiac’ и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:
Нажимаем на кнопку — получаем текст гороскопа.
Убираем лишнее
Теперь у нас есть готовый бот, и нам осталось только убрать лишний код, который раньше отвечал за вывод знаков зодиака в консоли. После чистки получаем готовую программу:
Как видно, большую часть кода занимает тупое перечисление всех знаков зодиака. Мы могли бы автоматизировать это через циклы, но на улице такая хорошая погода, что мы это отложим.
Что дальше
Впереди — безграничные возможности:
- можно сделать индивидуальный гороскоп для каждого знака;
- научить бота новым командам;
- присылать свежий гороскоп каждое утро;
- наладить непрерывную работу на веб-сервере.
Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?
Как создать Python Telegram Bot [Учебник хакера]
Благодаря популярности платформ обмена мгновенными сообщениями и достижениями в AI Chatbots испытывали взрывоопасный рост со скоростью 80% предприятий, желающих использовать боты Чата к 2020 году. Это создало отличную возможность для внештатных разработчиков Python, так как есть большая потребность в развитии как простые, так и сложные боты чата.
Одной из более популярных платформ обмена сообщениями является телеграмма, с отчетом 200 миллионов ежемесячных пользователей. Telegram предоставляет превосходное API для ботов в чате, позволяющую пользователю не только общаться с помощью текстовых сообщений, но и мультимедийного контента с изображениями и видео и богатым контентом с HTML и JavaScript. API можно даже использовать для управления покупками непосредственно в телеграмме.
Python отлично подходит для создания ботов Telegram, и чрезвычайно популярные Python Telegram Bot Framework делает это гораздо проще, позволяя вам по умолчанию создавать боты, которые проходят асинхронно, чтобы вы могли легко кодовые боты, которые могут общаться со многими пользователями одновременно.
Давайте начнем с созданием нашей первой телеграммы бота в Python, первое, что нам нужно будет сделать, это скачать телеграмму, создать учетную запись и общаться с «BotFather». Botfather – это бот чата, созданный Telegram, через который мы можем получить нашу Telegram Bot API Token.
Для скачивания головы телеграммы до Telegram.org И загрузите и установите соответствующую версию для вашей ОС, установите и создайте учетную запись.
Теперь добавьте Botfather в качестве контакта, сделайте это, нажав на значок меню, выбрав контакты, поиск «BotFather» и выбрав пользователя @botfather.
Разговор будет всплыть с помощью кнопки «Пуск» внизу, нажмите кнопку «Пуск», и вы получите список команд.
Команда для создания нового бота/Newbot введите «/newbot» и ответьте на подсказки для именования вашего бота, и вы получите токен API Telegram Bot. Вы можете назвать бот, что вам нравится, но имя пользователя Bot нужно будет уникальным на телеграмме.
Храните токен доступа где-то, поскольку нам понадобится, чтобы авторизовать наш бот.
Установка 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 и общайтесь с собой!
Теперь глядя на верхнюю часть кода, вы можете увидеть, что мы импортировали ряд библиотек в модуле бота Telegram, и установите регистратор для отображения любых сообщений приоритета отладки или выше.
Мы создали переменную Updater, и это будет держать обновленную для нашей телеграммы бота Telegram, которая помещается в глобальную переменную, чтобы мы могли легко получить доступ к нему позже от UI.
UPDATER обеспечивает легкий передний конец для работы с ботом и запустить наш новый бот с помощью Updater, нам просто нужно пройти в ключ аутентификации, и мы также передадим, чтобы избежать ошибок анонсов, поскольку контекстные обратные вызовы сейчас По умолчанию для Python Telegram Bot.
UPDATATER.START_POLLING () на самом деле запускает бот, и после этого будет пропущено в боте, начнут начать опрос телеграмму для любых обновлений чата по телеграмме. Бот начнет опрос в своих отдельных потоках, чтобы это не остановит ваш сценарий Python.
Мы используем команду UPDATER.IDLE () здесь, чтобы заблокировать скрипт, пока пользователь не отправит команду, чтобы вырваться из скрипта Python, такого как Ctrl-C в Windows.
При запуске этого сценария вы сможете увидеть сообщения, которые запустили бот и обновления, и запущено ряд потоков. Бот не сделает ничего заметного как в телеграмме.
Заставить бот понять команды
Давайте обновим сценарий и сделайте нашу функцию start_bot выглядеть так:
Мы добавили переменную диспетчера для более четкого доступа к диспетчеру для нашего бота, мы будем использовать диспетчеров для добавления команд.
С линией Dispatcher.add_handler (Commenthandler («Пуск», Пуск)) Мы добавили командный обработчик, который будет выполнять, когда пользователь вводит/запускается, и будет выполняться запустить функцию обратного вызова. Эта команда автоматически выполняет при добавлении бота в качестве нового контакта и нажмите кнопку «Пуск» в Telegram. Теперь добавьте функцию для нашей команды запуска:
Обработчики команд требуют как обновление, так и параметр CallbackContext. Через обновление мы отправляем обновления в чате, здесь используя Update.message.reply_text автоматически добавляет ответ только на конкретный чат, где была отправлена команда/начала/начала.
Теперь при вводе в чате с ботом или набрав команду/начала, вы должны получить такой ответ:
Добавление более продвинутой команды, которая читает чат
Команда START выполняет функцию в нашем боте всякий раз, когда пользовательские типы/начала, но что, если мы хотим, чтобы наш бот читать и отвечать на чат, а не просто выполнять команду?
Ну, для этого мы используем другой тип обработчика, называемый MessageHandler.
Добавьте следующую строку в функцию start_bot под предыдущим утверждением add_handler:
Это добавит MessageHandler в бот, мы также используем фильтр здесь, чтобы этот обработчик сообщений фильтрует все, кроме текста, потому что пользователь может публиковать что-то другое, чем текст в их сообщениях (таких как изображения или видео). Для этого обработчика мы создадим функцию обратного вызова с именем Repeater с кодом:
В нашем ретранслятере мы используем метод Reply_Text, отвечая с update.message.text, который отправляет сообщение Text Chat обратно пользователю.
Отказ от команды бота или на пользователя
Общие способности бота – включить или выключать определенные команды, но возникает проблема, которая возникает, что мы не можем просто удалить обработчик для функциональности, как это удалит его для всех пользователей бота.
К счастью, BOT Python Telegram позволяет нам хранить конкретные данные пользователя, используя контекст, который передается на наши функции обратного вызова. Давайте добавим еще один обработчик под обработчиком повторителя:
Теперь мы сначала изменим обработчик повторителя, чтобы проверить, следует ли повторять текст пользователя:
Здесь мы добавили утверждение, если context.user_data [echo]: перед тем, как получить ответ бота пользователю. У Python Telegram Bot имеет словарь user_data, который может быть доступен с использованием контекста.
Это специфично для пользователя, и используя это, мы можем убедиться, что если есть несколько пользователей бота, они не затронуты.
Теперь мы добавим в другую функцию, чтобы пользователь мог установить словарь 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 и некоторые ключевые слова такие:
Добавление графического интерфейса
Теперь мы узнали о том, как бот бежать и управляемость команд. Благодаря многопоточной природе Python Telegram Bot этот бот может справиться со многими пользователями со всего мира.
Во многих проектах на фрилансельных сайтах, таких как 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 в миллисекундах, ничего не проезжая, поскольку мы сделаем, делает функцию ждать, пока событие не будет запущено.
IF INTER IN (NOTE, «EXIT»): оператор выполняет, если пользователь ударяет кнопку выхода или пользователь закрывает окно другим способом (например, кнопка закрытия в углу окна), в этом случае мы просто сломаемся петля.
Запуск и остановка бота из графического интерфейса
Теперь, если вы начнете скрипт кнопки «Пуск» и «Стоп» на самом деле ничего не сделают, поэтому мы добавим в код, чтобы начать и остановить скрипт и обновить состояние, создавая нашу функцию GUI:
Глядя на этот код, вы можете увидеть, что мы добавили два разных условия событий, начало и перестать поделиться одними и теми же именами, что и наши кнопки, и когда кнопка нажата в Pysimplegui, событие срабатывает на основе имени кнопки.
В нашем мероприятии начала мы запускаем бот, используя start_bot, если еще нет обновлений, в противном случае мы выполняем метод start_polling нашего Updater в виде повторного запуска обновлений таким образом, намного быстрее, чем использовать start_bot для инициализации бота.
Мы также используем функцию окна Find_Element к окну, чтобы получить доступ к тексту состояния, используя ключ, созданный «Состояние» и измените, что для отображения запущенного бота.
Поворачивая кнопки графического интерфейса включения и выключения
Теперь, если мы запустим наш скрипт, мы получаем пользовательский интерфейс, и нажав кнопку «Пуск», начнут бот, и нажав кнопку «Стоп» остановит бот, но получаем ошибку, когда мы нажимаем кнопки из строя.
Мы восстановим эту ситуацию, изменяя цикл нашего события, чтобы отключить кнопки «Пуск» и «Стоп», чтобы пользователь мог сделать только один или другой в соответствующие времена.
Вы можете увидеть, что мы использовали метод findelement на кнопках здесь, а затем используя метод обновления, изменил переменную отключенную переменную, которая позволяет вам отключить кнопки.
Если вы начнете сейчас, вы увидите, что сначала обе кнопки включены, поэтому мы должны сделать небольшую модификацию на макет. Измените переменную макета к следующему:
Кнопки теперь должны включать и отключить соответствующим образом в графическом интерфейсе:
И там у нас есть, работающий графический интерфейс для нашей телеграммы бота.
Заключение
Мы узнали совсем немного в этом руководстве, и теперь вы можете иметь BOT Python Telegram, который отвечает командам, и даже представлены данные, показанные из Интернета.
Мы также создали простое интерфейс для запуска и остановки бота. С вашими новыми навыками вы теперь готовы ответить на эти потенциальные клиенты на фрилансских сайтах, которые ищут телеграмму бота.
об авторе
Johann – это фрилансер Python, специализирующийся на веб-ботах и веб-соскоб. Окончил с дипломом в компьютерных системах технологии 2009 года. Профиль на высоте.
Создание telegram-ботов на Python
Если вы хотите просто попробовать свои силы в размещении телеграм-бота и пока только знакомитесь, для ваших целей хватит базового тарифа. Когда бот вырастет, и ресурсов перестанет хватать, тариф можно будет увеличить.
Для готового бота подобрать ресурсы сложнее, и если вы не уверены, задайте вопрос нашей поддержке через форму подбора тарифа. Чем подробнее вы опишете ваш проект, тем точнее специалисты смогут подобрать подходящий тариф.
Операционная система подойдет любая, но если это ваш первый проект, то лучше выбрать Ubuntu: она проще в администрировании, чем CentOS.
Подключитесь к боксу по SSH и обновите ОС — с момента создания образа на нашей площадке могло выйти несколько обновлений для операционной системы и других пакетов, в которых могли быть закрыты обнаруженные уязвимости.
Для Ubuntu обновление проводится в 2 команды:
Их можно совместить в одну:
Когда все основные компоненты системы будут обновлены, можно приступать к подготовке бокса к размещению телеграм-бота.
Создание пользователя для бота
Запускать бота под пользователем root небезопасно. Сделайте отдельного пользователя для этих целей.
Запустите команду adduser, передав ей аргументом имя будущего пользователя.
Далее команда предложит придумать пароль, повторить его ещё раз и заполнить информацию о новом пользователе. Все поля, кроме пароля, не обязательны, можно жать Enter для подстановки значения по умолчанию.
Стать новым пользователем можно командой su:
Переключиться обратно к root-пользователю можно с помощью команды logout, либо сочетанием клавиш Ctrl+D, которое сразу выполнит эту команду:
Подготовка окружения
Проверьте версию Python, на котором будет запускаться бот:
Если вы будете размещать готового бота, версия Python должна соответствовать той, на которой бот был разработан.
Для создания нового бота подойдет любая версия.
Если у вас есть готовый бот, написанный на более старой версии языка, установите интерпретатор для него.
Установите менеджер пакетов pip. Он пригодится в дальнейшем для загрузки библиотек.
В Ubuntu установка производится так:
Следующий шаг — создание виртуального окружения. Это нужно для того, чтобы устанавливать разные модули разным проектам и избегать их конфликтов.
Станьте пользователем bot и установите модуль virtualenv командой:
Ключ —user поставит его локально для пользователя bot.
После установки добавьте виртуальное окружение в системные пути пользователя:
Создайте новое окружение:
python — произвольное имя нового виртуального окружения
Ключ —system-site-packages задействует внутри окружения модули, уже установленные в системе.
И активируйте его:
Выйти из окружения можно с помощью команды deactivate:
После создания и активации окружения можно устанавливать модули, которые нам потребуются для запуска бота. В первую очередь это pyTelegramBotAPI. Установим его:
Регистрация бота
Создание любого бота начинается сообщения отцу ботов в телеграме — @BotFather.
Он может управлять всеми существующими ботами, с помощью множества команд. Их список в любой момент можно вызвать командой /help
Для создания нового бота отправьте команду /newbot. После ответов на пару вопросов бот будет создан, а отец ботов пришлёт токен. Его нужно будет указывать в коде для взаимодействия с BotAPI.
Токен для каждого бота уникален. Нельзя, чтобы он попал в открытый доступ. Однако если это произошло, его всегда можно сменить через ботопапу командой /revoke.
Так будет выглядеть диалог создания бота:
Создание бота
Окружение подготовлено, бот зарегистрирован, можно начать писать его код.
Создайте директорию для бота, в ней будут все файлы проекта:
В директории создайте конфигурационный файл, в котором будут храниться некоторые данные проекта, например, токен:
Помимо vim можно использовать vi или nano. Далее добавьте в файл токен, в виде такой строки:
И добавьте в него такой код:
После этого выполните 3 команды друг за другом. Первая перезапустит менеджер служб, вторая включит демона, третья — запустит бота:
Проверить, что бот работает, можно командой:
Её вывод будет примерно таким:
Самое важное здесь — состояние бота, в строке «Active». Если бот вдруг остановился, его можно снова запустить:
Когда вы вносите изменения в код бота, сервис нужно перезапускать:
Чтобы отключить автоматический перезапуск бота, нужно его остановить и отключить демона: