Как писать бот программы

Наверняка вам уже приходилось сталкиваться с ботами в Telegram. Боты помогают автоматизировать рутинные задачи как для обычных пользователей (например, боты-планировщики или боты для учета финансов), так и для компаний. Последние могут использовать ботов-рекламщиков, которые занимаются рассылками по клиентской базе, ботов-ассистентов, которые выполняют роль технической поддержки, и так далее.

В этой инструкции опишем процесс создания бота в Telegram на Python . В качестве примера создадим Telegram-бот компании Timeweb Cloud, который будет приветствовать пользователя и предлагать ему перейти на сайт компании.

Как создать бота в Telegram на Python пошагово

Шаг 1. Регистрация бота в BotFather

После нажмите кнопку «Запустить» в нижней части окна и выберите в открывшемся списке команду /newbot . Бот предложит указать имя создаваемого бота. В нашем случае укажем TimewebCloudBot, и его же продублируем в качестве короткого имени.

После этого бот будет создан.

Telegram Bot на Python / Создания ботов для начинающих за 30 минут

Надежно сохраните токен бота — в будущем он понадобится для авторизации и работы с ботом.

Шаг 2. Подготовка необходимых компонентов

Переходим к подготовке необходимых компонентов. На вашем компьютере должен быть установлен Python и среда разработки (в нашем случае это PyCharm).

В качестве библиотеки мы будем использовать pyTelegramBotAPI . Установить ее можно, с помощью следующей команды:

pip install pyTelegramBotAPI

Все необходимые компоненты установлены. Переходим к следующему шагу.

Шаг 3. Написание кода

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

import telebot

botTimeWeb = telebot.TeleBot(‘Уникальный токен’)

from telebot import types

Вместо ‘Уникальный токен’ укажите токен, который вы получили при регистрации бота.

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

С помощью кода ниже реализуйте команду /start , которая будет отвечать за запуск бота:

Разберем написанный выше код по порядку.

Первые две строчки объявляют метод обработки входящих сообщений. В нашем случае в качестве параметра передается команда /start .

Далее объявляется переменная first_mess , хранящая указанную строку. Она будет отображаться пользователю после вызова команды /start . Здесь также используется объект Message , необходимый для определения имени ( first_name ) и фамилии ( last_name ) пользователя.

Далее следуют 3 строчки кода, отвечающие за добавление кнопки, которая в будущем будет перенаправлять пользователя на следующее сообщение. Тип данной кнопки — Inline. Это значит, что такая кнопка будет отображаться прямо под сообщением. Для ее создания необходимо использовать метод InlineKeyboardButton . Параметр text отвечает за имя кнопки, а callback_data — за возвращаемую строку при нажатии. Второй параметр понадобится для реализации функционала кнопки.

Как создать бота для любой игры?

И наконец, добавляется метод send_message , необходимый для отправки сообщения пользователю. У него указаны 4 параметра:

  • message.chat.id отвечает за синхронизацию сообщения с чатом бота;
  • first_mess передает ранее указанное сообщение;
  • parse_mode необходим для указания режима разметки сообщений;
  • reply_markup отвечает за добавление созданной кнопки.

Сейчас кнопка создана, но при ее нажатии ничего не происходит. Необходимо реализовать её функционал. Для этого используем следующий фрагмент кода:

В начале объявляется метод для обработки запросов обратного вызова. Выполняется проверка на соответствие строки, указанной после == и возвращенной после нажатия кнопки. Так как ранее мы указали значение параметра callback_data = ‘yes’ , то проверка пройдет успешно.

После проверки реализован функционал кнопки. Переменная second_mess хранит текст ответного сообщения. А далее описана реализация кнопки, которая хранит ссылку на сайт компании Timeweb Cloud.

Читайте также:
Винрар платная или бесплатная программа

Последним шагом будет указать боту на то, что обработка команды закончена. Для этого указываем команду answer_callback_query .

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

botTimeWeb.infinity_polling()

Бот создан. Сохраните файл с кодом и переходите к его запуску.

Шаг 4. Запуск бота

Откройте терминал и выполните запуск проекта:

python main.py

Теперь бот запущен, можно переходить в Telegram и тестировать его.

Для дополнительной безопасности и стабильности рекомендуется запускать бота на виртуальном сервере. Арендовать надежный облачный сервер можно на Timeweb Cloud .

Шаг 5. Тестирование бота

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

Для начала работы нажмем «Запустить» внизу экрана.

Бот обработает команду и выведет приветственное сообщение.

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

Бот среагирует на нажатие кнопки и выведет следующее сообщение. Под ним также отображается кнопка, которая содержит ссылку на сайт компании. Проверим ее работоспособность.

В ответ на нажатие кнопки бот предложит перейти по ссылке. Нажимаем «Перейти» и переходим на сайт компании.

Заключение

Как написать Telegram бота: практическое руководство

6 Апрель 2016 , Python, 452185 просмотров, How To Create a Telegram Bot Using Python

В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом.

Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

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

Как создать Telegram бота?

Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

  • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
  • Добавляем к себе в контакт-лист бота с именем BotFather
  • Запускаем процедуру «общения» с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.
  • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, DjangoBot или Django_bot.

Telegram bot

  • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂

Python Planet бот

После создания бота, обратите внимание на строку с текстом:

Use this token to access the HTTP API:

За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

  • Присвоить боту описание
  • Установить аватар
  • Поменять token

и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.

Читайте также:
Убрать рекламу из программы zona

Приступаем к кодированию

Как я ранее уже упоминал, мы будем писать веб-приложение на Django. Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

  • Использование вызова API метода getUpdates
  • Установка Webhook

Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook.

Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.

Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

Итак, вернёмся к python библиотеке для работы с Telegram — telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

pip install telepot

Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

import telepot token = ‘123456’ TelegramBot = telepot.Bot(token) print TelegramBot.getMe()

Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:

Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

Telegram Bot

TelegramBot.getUpdates() [, u’message_id’: 1, u’chat’: >, u’update_id’: 649179764>]

Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message.

Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

TelegramBot.getUpdates(649179764+1) [, u’message_id’: 13, u’chat’: >, u’update_id’: 649179765>]

На этапе написания простейшего Telegram бота нам этих вызовов достаточно. Приступим к написанию Django приложения для обслуживания наших пользователей.

Простая функция парсинга RSS фида Planet Python выглядит вот так:

# -*- coding: utf8 -*- from xml.etree import cElementTree import requests def parse_planetpy_rss(): «»»Parses first 10 items from http://planetpython.org/rss20.xml «»» response = requests.get(‘http://planetpython.org/rss20.xml’) parsed_xml = cElementTree.fromstring(response.content) items = [] for node in parsed_xml.iter(): if node.tag == ‘item’: item = <> for item_node in list(node): if item_node.tag == ‘title’: item[‘title’] = item_node.text if item_node.tag == ‘link’: item[‘link’] = item_node.text items.append(item) return items[:10]

Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:

CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage. Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения.

Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.

Читайте также:
Exocat программа требования системные

Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂

Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates.

После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:

http://127.0.0.1:8000/planet/b. BOT_TOKEN/

где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:

Postman REST Client

telegram-bot-postman

А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

Postman и TelegramPostman и Telegram

На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

Присоединяйтесь к рассылке

Понравился контент? Пожалуйста, подпишись на рассылку.

Интересные записи:

  • Работа с MySQL в Python
  • Введение в logging на Python
  • Руководство по работе с HTTP в Python. Библиотека requests
  • Pyenv: удобный менеджер версий python
  • FastAPI, asyncio и multiprocessing
  • Что нового появилось в Django Channels?
  • Обзор Python 3.9
  • Django Channels: работа с WebSocket и не только
  • Celery: начинаем правильно
  • Почему Python?
  • Python-RQ: очередь задач на базе Redis
  • Работа с PostgreSQL в Python
  • Введение в pandas: анализ данных на Python
  • Разворачиваем Django приложение в production на примере Telegram бота
  • Авторизация через Telegram в Django и Python
  • Итоги первой встречи Python программистов в Алматы
  • Участие в подкасте TalkPython
  • Обзор Python 3.8
  • Строим Data Pipeline на Python и Luigi
  • Видео презентации ETL на Python

Источник: khashtamov.com

Создайте своего первого Telegram-бота на базе ChatGPT: Пошаговое руководство 2023

Руководство не рабочее, не понятно какой код куда вставлять.

Развернуть ветку

что именно не работает ? python какой версии ?

Развернуть ветку

Ндамс. Совсем даже не для чайников текст ) Где создавать, что запускать, куда что вводить) а так — да, наверн полезная инструкция.

Развернуть ветку

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

Развернуть ветку

Спасибо, получилось разобраться и без навыков кодинга, хоть и непросто было. Все получилось. Правильно понимаю, что это не та же версия, что в веб-интерфейсе работает? Отвечает как-то кривовато, как будто через переводчик проходит.
Отдельное спасибо за ссылку на узбекский гит со своими прикольчиками.

Развернуть ветку

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

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

И вот это тоже не понятно что такое (ENTRY_STATE,
QUESTION_STATE,
) = range(2)

Развернуть ветку

Эта инструкция видимо очень сложная для моего уровня владения python

Развернуть ветку

попробуйте сначала самые азы

Развернуть ветку
Развернуть ветку

Самый прикол что мне chat gp нужен чтобы питон учить)))

Развернуть ветку

Можно по подробнее для чайников?

Источник: vc.ru

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