Рубрики
Без рубрики

Как создать Python Telegram Bot [Учебник хакера]

Автоматизировать разговор бот Python Telegram? Узнайте, как в этом руководстве

Автор оригинала: Pythonista.

Благодаря популярности платформ обмена мгновенными сообщениями и достижениями в 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 самый простой способ сделать это с:

$ pip install python-telegram-bot

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

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

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

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

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

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

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, Dispatcher
import logging

logging.basicConfig(format='%(levelname)s - %(message)s',
                    level=logging.DEBUG)
logger = logging.getLogger(__name__)

updater = None

def start_bot():
    global updater
    updater = Updater(
        '### YOUR TELEGRAM BOT AUTHENTICATION KEY HERE ###', use_context=True)

    updater.start_polling()
    updater.idle()

start_bot()

Если вы просто хотите попробовать его в своей онлайн-оболочке, используйте эту 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 выглядеть так:

def start_bot():
    global updater
    updater = Updater(
        '### YOUR TELEGRAM BOT AUTHENTICATION KEY HERE ###', use_context=True)

    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler('start', start))

    updater.start_polling()

    updater.idle()

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

С линией Dispatcher.add_handler (Commenthandler («Пуск», Пуск)) Мы добавили командный обработчик, который будет выполнять, когда пользователь вводит/запускается, и будет выполняться запустить функцию обратного вызова. Эта команда автоматически выполняет при добавлении бота в качестве нового контакта и нажмите кнопку «Пуск» в Telegram. Теперь добавьте функцию для нашей команды запуска:

def start(update, context):
    s = "Welcome I Am The Finxter Chat Bot! Your life has now changed forever."
    update.message.reply_text(s)

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

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

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

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

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

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

dispatcher.add_handler(MessageHandler(Filters.text, repeater))

Это добавит MessageHandler в бот, мы также используем фильтр здесь, чтобы этот обработчик сообщений фильтрует все, кроме текста, потому что пользователь может публиковать что-то другое, чем текст в их сообщениях (таких как изображения или видео). Для этого обработчика мы создадим функцию обратного вызова с именем Repeater с кодом:

def repeater(update, context):
    update.message.reply_text(update.message.text)

В нашем ретранслятере мы используем метод Reply_Text, отвечая с update.message.text, который отправляет сообщение Text Chat обратно пользователю.

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

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

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

dispatcher.add_handler(CommandHandler('echo', echo))

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

def repeater(update, context):
    if context.user_data[echo]:
        update.message.reply_text(update.message.text)

Здесь мы добавили утверждение, если context.user_data [echo]: перед тем, как получить ответ бота пользователю. У Python Telegram Bot имеет словарь user_data, который может быть доступен с использованием контекста.

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

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

def echo(update, context):
    command = context.args[0].lower()
    if("on" == command):
        context.user_data[echo] = True
        update.message.reply_text("Repeater Started")
    elif("off" == command):
        context.user_data[echo] = False
        update.message.reply_text("Repeater Stopped")

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

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

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

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

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

dispatcher.add_handler(CommandHandler('get_image', get_image, filters=Filters.user(username="@YOUR_USERNAME")))

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

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

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

def get_image(update, context):
    terms = ",".join(context.args).lower()
    update.message.reply_text(f"Getting Image For Terms: {terms}")
     command = context.args[0].lower()
    if("on" == command):
        context.user_data[echo] = True
        update.message.reply_text("Repeater Started")
    elif("off" == command):
        context.user_data[echo] = False
        update.message.reply_text("Repeater Stopped")

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

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

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

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

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

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

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

def start_bot():
    global updater
    updater = Updater(
        '### YOUR TELEGRAM BOT AUTHENTICATION KEY HERE ###', use_context=True)

    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(MessageHandler(Filters.text, repeater))
    dispatcher.add_handler(CommandHandler('echo', echo))
    dispatcher.add_handler(CommandHandler('get_image', get_image, filters=Filters.user(username="@YOUR_USERNAME")))

    updater.start_polling()

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

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

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

def gui():
    layout = [[sg.Text('Bot Status: '), sg.Text('Stopped', key='status')],
              [sg.Button('Start'), sg.Button('Stop'), sg.Exit()]]

    window = sg.Window('Finxter Bot Tutorial', layout)

    while True:                             
        event, _ = window.read()

        if event in (None, 'Exit'):
            break

    window.close()

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

gui()

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

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

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

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

IF INTER IN (NOTE, «EXIT»): оператор выполняет, если пользователь ударяет кнопку выхода или пользователь закрывает окно другим способом (например, кнопка закрытия в углу окна), в этом случае мы просто сломаемся петля.

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

Теперь, если вы начнете скрипт кнопки «Пуск» и «Стоп» на самом деле ничего не сделают, поэтому мы добавим в код, чтобы начать и остановить скрипт и обновить состояние, создавая нашу функцию GUI:

def gui():
    layout = [[sg.Text('Bot Status: '), sg.Text('Stopped', key='status')],
              [sg.Button('Start'), sg.Button('Stop'), sg.Exit()]]

    window = sg.Window('Finxter Bot Tutorial', layout)

    while True:
        event, _ = window.read()
            
        if event == 'Start':
            if updater is None:
                start_bot()
            else:
                updater.start_polling()
            window.FindElement('status').Update('Running')
        if event == 'Stop':
            updater.stop()
            window.FindElement('status').Update('Stopped')

        if event in (None, 'Exit'):
            break

    if updater is not None and updater.running:
        updater.stop()
    window.close()

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

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

Мы также используем функцию окна Find_Element к окну, чтобы получить доступ к тексту состояния, используя ключ, созданный «Состояние» и измените, что для отображения запущенного бота.

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

Теперь, если мы запустим наш скрипт, мы получаем пользовательский интерфейс, и нажав кнопку «Пуск», начнут бот, и нажав кнопку «Стоп» остановит бот, но получаем ошибку, когда мы нажимаем кнопки из строя.

Мы восстановим эту ситуацию, изменяя цикл нашего события, чтобы отключить кнопки «Пуск» и «Стоп», чтобы пользователь мог сделать только один или другой в соответствующие времена.

        if event == 'Start':
            if updater is None:
                start_bot()
            else:
                updater.start_polling()
            window.FindElement('Start').Update(disabled=True)
            window.FindElement('Stop').Update(disabled=False)
            window.FindElement('status').Update('Running')
        if event == 'Stop':
            updater.stop()
            window.FindElement('Start').Update(disabled=False)
            window.FindElement('Stop').Update(disabled=True)
            window.FindElement('status').Update('Stopped')

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

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

layout = [[sg.Text('Bot Status: '), sg.Text('Stopped', key='status')],
              [sg.Button('Start'), sg.Button('Stop', disabled=True), sg.Exit()]]

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

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

Заключение

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

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

об авторе

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