Как стать автором
Обновить

Разбираемся с Tg ботом вместе. Python

Решил разобраться с написанием телеграмм бота и поделиться успехами с Вами.

Как уже было сказано ранее основная цель освоить телеграмм бота и создать некоторые шаблоны которые могут пригодиться в будущем для создания полноценного бота.

Всё начинается с малого

Ⅰ. Регистрация бота

  1. Поиск в tg @BotFather

  2. Регистрация

  3. Запомнить токен(Ваш доступ к боту)

Ⅱ. Подготовка

Пишем на Python'е с использованием библиотеки PyTelegramBotAPI. Я использую PyCharm, его можно скачать на официальном сайте https://www.jetbrains.com/ru-ru/pycharm/. Так же для установки библиотеки PyTelegramBotAPI вводим следующую команду в командной строке

pip install pytelegrambotapi

Ⅲ. Базовые элементы. Привет

Импортируем библиотеку и подключаем нашего бота

import telebot
bot = telebot.TeleBot('%токен%')

Описываем метод получения текстовых сообщений:

@bot.message_handler(content_types=['text', 'document', 'audio']) #получает
def get_text_messages(message): #обрабатывает

Опишем функцию обработки полученного сообщения. При получении слова "Паника" бот будет отвечать "заразна !". Для помощи пользователю будем выводить ещё текст о том что надо делать.

if message.text == "Паника":
    bot.send_message(message.from_user.id, "Заразна!")
else:
    bot.send_message(message.from_user.id, "Напиши Паника")

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

Наш бот будет у сервера Telegram постоянно спрашивать "Мне кто-нибудь написал?" Если это случится, наш бот получит переданное сообщение. Для этого допишем:

bot.polling(none_stop=True, interval=0)

Работает !

Ⅳ. Диалог

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

Заведем ряд переменных в которых будем хранить данные регистрации:

name = ''
surname = ''
city = ''
age = 0

Аналогично как в предыдущем пункте опишем функцию начала регистрации start по команде /reg

@bot.message_handler(content_types=['text'])
def start(message):
	if message.text == '/reg':
      bot.send_message(message.from_user.id, "Как тебя зовут?")
      bot.register_next_step_handler(message, get_name) #следующий шаг – функция get_name
  else:
      bot.send_message(message.from_user.id, 'Напиши /reg')

Далее опишем ряд последовательных функций - этапов нашей регистрации:

    def get_name(message): #получаем имя
        global name
        name = message.text
        bot.send_message(message.from_user.id, 'Какая у тебя фамилия?')
        bot.register_next_step_handler(message, get_surname) #следующий шаг – функция get_surname

    def get_surname(message): #получаем фамилию
        global city
        name = message.text
        bot.send_message(message.from_user.id, 'Из какого ты города?')
        bot.register_next_step_handler(message, get_city)

    def get_city(message): #получаем город
        global city
        city = message.text
        bot.send_message(message.from_user.id,'Сколько тебе лет?')
        bot.register_next_step_handler(message, get_age)

    def get_age(message): #получаем возраст
        global age
        try:
            age = int(message.text) #проверяем, что возраст введен корректно
        except Exception:
            bot.send_message(message.from_user.id, 'Цифрами, пожалуйста')
            bot.register_next_step_handler(message, get_age)

В каждой из этих функций мы с помощью переменной message получаем интересующие нас данные, сохраняя их и с помощью bot.register_next_step_handler переходим к следующей функции. В функции get_age проверяем чтобы полученное значение действительно было числом.

В следующей части рассмотрим работу с кнопками и сохранение данных в базе данных.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.